参考资料:
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
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