参考资料:

http://www.9170.org/post-322.html    史上最详细的vsftpd配置文件讲解   作者:王健宇


实验可能会用到的测试工具

flashfxp或filezilla        

1、安装vsftpd(服务器端)、ftp软件(客户端)

[root@gnnt ~]# yum install vsftpd ftp

#yum源的建立可参见:http://1343138116.blog.51cto.com/6124664/1681861  RedHat 6.6自建yum仓库

2、查询vsftpd安装列表

[root@gnnt ~]# rpm -ql vsftpd

/etc/vsftpd/vsftpd.conf   #vsftpd服务的主配置文件

/etc/pam.d/vsftpd       #vsftpd的pam模块 

/etc/vsftpd/ftpusers     #控制用户是否能够登录FTP服务器,默认为加入此文件的用户不能登录

/etc/vsftpd/user_list    #主配置文件经常与此命令连用userlist_deny=YES(黑名单),为NO代表白名单

以上4个文件经常用到

3、实际用户

以用户zj为例

(1)、创建zj用户

[root@ftp ~]# useradd zj

[root@ftp ~]# passwd zj

Changing password for user zj.

New password: 

BAD PASSWORD: it is too simplistic/systematic

Retype new password: 

passwd: all authentication tokens updated successfully.

(2)、将用户禁锢在自身的主目录中

实验前最好先关闭iptables与SElinux

[root@ftp ~]#service iptables stop

[root@ftp ~]#setfenforce 0

[root@ftp ~]#getfenforce

Permissive

[root@ftp ~]# vim /etc/vsftpd.conf/vsftpd.conf

chroot_list_enable=YES              #开启chroot写入列表的功能

chroot_list_file=/etc/vsftpd/chroot_list  #与上条命令结合使用,在文件里的用户将被禁锢

[root@ftp ~]#vim /etc/vsftpd/chroot_list

zj

[root@ftp ~]#

注:如果以上两个参数与chroot_local_user=YES(将用户限制在自己的主目录内,为了安全最好是YES)连用,将会出现chroot_list中的用户将成为白名单,否则为黑名单,我这里没有与它连用

(3)、普通用户的文件上传、下载、新建、删除

[root@ftp ~]# ftp localhost        #登录FTP服务器,也可自行添加一台linux客户端做测试

Connected to localhost (127.0.0.1).

220-welcome to ftp.gnnt.com!!!    

220

Name (localhost:root): zj            #输入用户名

331 Please specify the password.

Password:                       #输入密码

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> pwd                        

257 "/" 

ftp> cd /home                    #被禁锢在了自己的家目录中,不能切换目录

550 Failed to change directory.                     

ftp> ls

227 Entering Passive Mode (127,0,0,1,160,213).

150 Here comes the directory listing.

226 Directory send OK.

ftp> lcd /etc                    #改变本地的工作目录

Local directory now /etc

ftp> put inittab     

#上传/etc/inittab文件到/home/zj,上传文件时最好是在自己的主目录中(此种情况发生在没有被禁锢的用户中)

local: inittab remote: inittab

227 Entering Passive Mode (127,0,0,1,185,62).

150 Ok to send data.

226 Transfer complete. 

884 bytes sent in 9e-05 secs (9822.22 Kbytes/sec)

ftp> get inittab          #下载inittab文件到当前目录(意指登录FTP时是在哪个目录进行的)

local: inittab remote: inittab

227 Entering Passive Mode (127,0,0,1,114,111).

150 Opening BINARY mode data connection for inittab (884 bytes).

226 Transfer complete.

884 bytes received in 0.0189 secs (46.85 Kbytes/sec)

ftp> mkdir test                       #新建test目录

257 "/test" created

ftp> rmdir test                       #删除test目录

250 Remove directory operation successful.

ftp> delete inittab                    #删除inittab文件

250 Delete operation successful.

ftp> ls

227 Entering Passive Mode (127,0,0,1,41,127).

150 Here comes the directory listing.

226 Directory send OK.


同时也可在windows下进行测试(这里我使用的gif录制软件“都叫兽”,可以百度搜索下载)

这里我的windows客户端IP地址为:172.16.0.255

     linux服务器端IP地址为:172.16.0.10


Vsftpd服务搭建_ftp服务器


4、虚拟用户(未完待续)

5、匿名用户上传、下载、新建、删除文件的方法(不建议给匿名用户如此大的权限)

(1)、修改vsftpd.conf配置文件

[root@ftp ~]# vim /etc/vsftpd/vsftpd.conf

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

banner_file=/etc/vsftpd/welcome.txt

listen=YES

xferlog_enable=YES

xferlog_file=/var/log/xferlog

命令逐条解释

#给anonymous用户有上传文件的权限

#给anonymous用户有创建文件的权限

#给anonymous用户有创建文件之外的其它权限,例如删除文件

#登录ftp服务器时显示的信息,此文件需要自己手动创建,并添加相应的内容

#设置vsftpd的启动方式为stand alone(独立守护进程),另一种方式为super daemon(超级守护进程),可在/etc/xinetd.d/目录下配置一个脚本文件即可让其成为瞬时守护进程(用于访问量较小的FTP服务器)

#是否开启传输日志

#传输日志的文件的路径

[root@ftp ~]#service vsftpd restart

Shutting down vsftpd:                                    [  OK  ]

Starting vsftpd for vsftpd:                                [  OK  ]

#每次修改配置文件或刚安装完服务后,都不要忘记重启,使服务可用

(2)、匿名用户上传文件方法

1)新建uploads文件夹与“欢迎”文件

[root@ftp ~]#mkdir /var/ftp/uploads

[root@ftp ~]#echo "welcome to ftp.gnnt.com!!!" >/etc/vsftpd/welcome.txt

#新建welcome.txt文件并向其追加内容

2)添加匿名用户可以上传文件权限

anon_upload_enable=YES       #将vsftpd.conf配置文件中的井号去掉

3)设置uploads文件夹权限

[root@ftp ~]#setfacl -m u:ftp:rwx /var/ftp/uploads/

[root@ftp uploads]# getfacl /var/ftp/uploads/

getfacl: Removing leading '/' from absolute path names

# file: var/ftp/uploads/

# owner: root

# group: root

user::rwx

user:ftp:rwx

group::r-x

mask::rwx

other::r-x

4)上传/etc/inittab文件

[root@ftp ~]# ftp localhost 

Connected to localhost (127.0.0.1).

220-welcome to ftp.gnnt.com!!!    #事先建立好了的“欢迎”文件

220 

Name (localhost:root): anonymous   #用户名

331 Please specify the password.

Password:                  #密码可以不用输,敲回车键即可

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> cd uploads                        #进入到uploads目录

250 Directory successfully changed.

ftp> lcd /etc/                         #在客户端上改变本地的工作目录

Local directory now /etc

ftp> put inittab                        #上传inittab到uploads目录

local: inittab remote: inittab

227 Entering Passive Mode (127,0,0,1,176,207).

150 Ok to send data.

226 Transfer complete.

884 bytes sent in 9.6e-05 secs (9208.33 Kbytes/sec)

ftp> ls

227 Entering Passive Mode (127,0,0,1,119,21).

150 Here comes the directory listing.

drwx------    2 14       50           4096 Aug 18 11:18 123

-rw-------    1 14       50           884 Aug 18 11:55 inittab

-rw-r--r--    1 0        0           0 Aug 18 11:14 test.txt

226 Directory send OK.

若没有执行3)这步操作,将出现以下提示:

ftp> put inittab

local: inittab remote: inittab

227 Entering Passive Mode (127,0,0,1,250,230).

550 Permission denied.

(3)、匿名用户新建、删除目录方法

anon_mkdir_write_enable=YES    #将vsftpd.conf配置文件中的井号去掉

ftp> cd uploads            #注下例实验均在此目录进行

250 Directory successfully changed.

ftp> ls

227 Entering Passive Mode (127,0,0,1,92,36).

150 Here comes the directory listing.

drwx------    2 14       50           4096 Aug 18 11:18 123

-rw-------    1 14       50           884 Aug 18 11:55 inittab           

226 Directory send OK.

ftp> mkdir test

257 "/uploads/test" created

ftp> rmdir test

250 Remove directory operation successful.

ftp> ls

227 Entering Passive Mode (127,0,0,1,199,206).

150 Here comes the directory listing.

drwx------    2 14       50           4096 Aug 18 11:18 123

-rw-------    1 14       50           884 Aug 18 11:55 inittab

drwx------    2 14       50           4096 Aug 18 12:04 test

226 Directory send OK.

(4)、匿名用户删除文件方法

anon_other_write_enable=YES     #将vsftpd.conf配置文件中的井号去掉

事先在/var/ftp/uploads目录中新建一个test.txt文件或另外上传一个文件

ftp> ls

227 Entering Passive Mode (127,0,0,1,173,181).

150 Here comes the directory listing.

drwx------    2 14       50           4096 Aug 18 11:18 123

-rw-------    1 14       50           884 Aug 18 11:55 inittab

drwx------    2 14       50           4096 Aug 18 12:04 test

-rw-r--r--    1 0        0           0 Aug 18 11:14 test.txt

226 Directory send OK.

ftp> delete test.txt

250 Delete operation successful.

ftp> ls

227 Entering Passive Mode (127,0,0,1,188,242).

150 Here comes the directory listing.

drwx------    2 14       50           4096 Aug 18 11:18 123

-rw-------    1 14       50           884 Aug 18 11:55 inittab

drwx------    2 14       50           4096 Aug 18 12:04 test

226 Directory send OK.

(5)、匿名用户下载文件方法

再次在/var/ftp/uploads目录中新建test.txt文件或自己上传一个文件进行下载

ftp> ls

227 Entering Passive Mode (127,0,0,1,253,154).

150 Here comes the directory listing.

drwx------    2 14       50           4096 Aug 18 11:18 123

-rw-------    1 14       50           884 Aug 18 11:55 inittab

drwx------    2 14       50           4096 Aug 18 12:04 test

-rw-r--r--    1 0        0           0 Aug 18 12:14 test.txt

226 Directory send OK.

ftp> get test.txt

local: test.txt remote: test.txt

227 Entering Passive Mode (127,0,0,1,221,87).

150 Opening BINARY mode data connection for test.txt (0 bytes).

226 Transfer complete.

ftp> bye

221 Goodbye.

[root@gnnt ~]# ls    #可以看出是直接下载在当前目录中的

anaconda-ks.cfg  Desktop  Documents  Downloads  install.log.syslog s  test.txt 

6、查看xferlog

[root@ftp ~]# tail /var/log/xferlog 

Tue Aug 18 19:14:52 2015 1 127.0.0.1 0 /uploads/test.txt b _ o a ? ftp 0 * c

Tue Aug 18 19:27:54 2015 1 127.0.0.1 884 /uploads/inittab b _ i a ? ftp 0 * c

Tue Aug 18 19:55:19 2015 1 127.0.0.1 884 /uploads/inittab b _ i a ? ftp 0 * c

Tue Aug 18 20:12:49 2015 1 127.0.0.1 0 /uploads/inittab b _ o a ? ftp 0 * i

Tue Aug 18 20:13:58 2015 1 127.0.0.1 0 /uploads/inittab b _ o a ? ftp 0 * i

Tue Aug 18 20:14:26 2015 1 127.0.0.1 0 /uploads/test.txt b _ o a ? ftp 0 * c

7、用awk命令找出满足条件的日志

若遇到日志较多的情况可通过如下命令解决,暂不深究以下命令,会用便可

[root@ftp ~]# awk '{if(substr($4,1,2)*10000+substr($4,4,2)*100+substr($4,7,2)>=191452&&substr($4,1,2)*10000+substr($4,4,2)*100+substr($4,7,2)<195519)print $0}' /var/log/xferlog


Tue Aug 18 19:14:52 2015 1 127.0.0.1 0 /uploads/test.txt b _ o a ? ftp 0 * c

Tue Aug 18 19:27:54 2015 1 127.0.0.1 884 /uploads/inittab b _ i a ? ftp 0 * c


#此为一行命令,目的是找出19:14:52—19:55:19的日志行,注意文中的不等式,要灵活运用

8、vsftpd的安全性

1)使用tcpdump命令监测

[root@ftp ~]# tcpdump -i eth0 -nn -X -vv tcp port 21 and ip host 172.16.0.11

tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

2)在windows中的命令提示符进行如下操作

C:\Users\k>ftp 172.16.0.11

连接到 172.16.0.11。

220-welcome to ftp.gnnt.com!!!

220

用户(172.16.0.11:(none)): zj

331 Please specify the password.

密码:

230 Login successful.

3)监测结果

[root@ftp ~]# tcpdump -i eth0 -nn -X -vv tcp port 21 and ip host 172.16.0.11

tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

...........................................................................................

20:54:53.100571 IP (tos 0x0, ttl 128, id 2779, offset 0, flags [DF], proto TCP (6), length 53)

    172.16.0.255.55633 > 172.16.0.11.21: Flags [P.], cksum 0x80ab (correct), seq 10:23, ack 73, win 2030, length 13

0x0000:  4500 0035 0adb 4000 8006 96bd ac10 00ff  E..5..@.........

0x0010:  ac10 000b d951 0015 1f50 ac5e d1db ecce  .....Q...P.^....

0x0020:  5018 07ee 80ab 0000 5041 5353 2031 3233  P.......PASS.123

0x0030:  3435 360d 0a                             456..


...........................................................................................

其中红色加粗部分为捕捉到的密码

9、加强vsftpd的安全性(未完待续)

10、配置文件参数汇总

-------------------------------------------------------------------------------------------

与服务器环境相关的设置值:

banner_file=/etc/vsftpd/welcome.txt

listen=YES

#登录ftp服务器时显示的信息,此文件需要自己手动创建,并添加相应的内容

#设置vsftpd的启动方式为stand alone(独立守护进程),另一种方式为super daemon(超级守护进程),可在/etc/xinetd.d/目录下配置一个脚本文件即可让其成为瞬时守护进程(用于访问量较小的FTP服务器)

-------------------------------------------------------------------------------------------

与实体用户较相关的设置值

chroot_local_user=YES              

chroot_list_enable=YES              

chroot_list_file=/etc/vsftpd/chroot_list  

#将用户限制在自己的主目录内,为了安全最好是YES

#开启chroot写入列表的功能

#与上条命令结合使用,在文件里的用户将被禁锢

-------------------------------------------------------------------------------------------

与匿名用户较相关的设置值

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

#给anonymous用户有上传文件的权限

#给anonymous用户有创建文件的权限

#给anonymous用户有创建文件之外的其它权限,例如删除文件

-------------------------------------------------------------------------------------------

与系统安全方面的设置值

xferlog_enable=YES

xferlog_file=/var/log/xferlog

#是否开启传输日志

#传输日志的文件的路径

-------------------------------------------------------------------------------------------




至此,本文档已经结束,文档中难免有不尽人意之处,希望各位能够给出宝贵的建议,谢谢!



紫禁之巅

2015年8月18日 21:12