查看本地是否以安装
[ root@localhost ~ ] # rpm - qa | grep ftp
使用yum安装
[ root@localhost ~ ] # yum install - y vsftpd
启动/停止vsftpd
[ root@localhost ~ ] # systemctl start vsftpd
查看vsftpd状态
[ root@localhost ~ ] # systemctl status vsftpd
设置vsftpd开机自动启动
[ root@localhost ~ ] # systemctl enable vsftpd
[ root@localhost ~ ] # systemctl is- enabled vsftpd
开启防火墙并允许访问vsftpdd
[ root@localhost ~ ] # firewall- cmd -- add- service= ftp -- permanent
[ root@localhost ~ ] # firewall- cmd -- reload
[ root@localhost ~ ] # firewall- cmd -- list- services
可以通过ftp://
+ip地址
匿名访问了
允许匿名用户上传和重命名
查询vsftpd安装后生产的文件
[ root@localhost ~ ] # rpm - ql vsftpd
修改/etc/vsftpd/vsftpd.conf
[ root@localhost ~ ] # vim / etc/ vsftpd/ vsftpd. conf
去掉前面的 # 号
并且在anon_mkdir_write_enable=YES
之前必须加上anon_other_write_enable=YES
(这是个大坑)
给/var/ftp目录赋予-rwxr-xr-rwx-
权限
[ root@localhost ~ ] # chmod - R 757 / var / ftp
当前面这些配置好了,匿名用户还并不能对ftp目录进行操作,以下有两种解决方法,任选其一即可:
方法一,修改Selinux文件
[ root@localhost ~ ] # vim / etc/ selinux/ config
修改后必须重启Linux:
[ root@localhost ~ ] # reboot
方法二,ftp相关的SELinux规则
[ root@localhost ~ ] # getsebool - a | grep ^ ftp
ftp_home_dir -- > off
ftpd_anon_write -- > off
ftpd_connect_all_unreserved -- > off
ftpd_connect_db -- > off
ftpd_full_access -- > on
ftpd_use_cifs -- > off
ftpd_use_fusefs -- > off
ftpd_use_nfs -- > off
ftpd_use_passive_mode -- > off
[ root@localhost ~ ] # setsebool - P ftpd_full_access= on
现在匿名用户可以对ftp目录下文件进行操作了
重命名
限制用户切换到主目录外
执行命令vim /etc/vsftpd/vsftpd.conf
,按照表5.2所示的要求修改配置选项,然后执行systemctl restart vsftpd
重启服务器
表5.2 配置选项
参数 作用 local_enable=YES 允许本地用户模式 write_enable=YES 设置本地用户可写入权限 chroot_list_enable=YES 启用chroot_list_file设定的文件,限制指定的用户只能访问自己的主目录 chroot_list_file=/etc/vsftpd/chroot_list 指定受chroot控制的用户列表文件 llow_writeable_chroot= YES 如果用户被限定在其主目录下,且目录有写入权限时,必须添加此项,开启chroot环境下的主目录写入权限
设置SELinux
[ root@localhost ~ ] # setsebool - P ftp_home_dir= on
创建/etc/vsftpd/chroot_list文件
[ root@localhost ~ ] # useradd tester
[ root@localhost ~ ] # passwd tester
[ root@localhost ~ ] # vim / etc/ vsftpd/ chroot_list
tester
: wq
[ root@localhost ~ ] # systemctl restart vsftpd. service
测试本地用户
从Windows客户端,使用用户“tester”连接服务器,登录成功后,切换到/home失败,如果下图所示所示,操作被拒绝。
执行命令vim /etc/vsftpd/vsftpd.conf
,将chroot_list_enable=YES
配置项修改为chroot_list_enable= NO
,执行systemctl restart vsftpd
重启服务器。然后从Windows客户端,使用用户tester
再次登录成功后,切换到/home
可以成功
使用虚拟用户模式访问vsftpd
建立虚拟FTP用户数据库文件
[ root@localhost ~ ] # vim / etc/ vsftpd/ vuser. list
xiaoming
123456
xiaohong
123456
: wq
[ root@localhost ~ ] #
[ root@localhost ~ ] # db_load - T - t hash - f / etc/ vsftpd/ vuser. list / etc/ vsftpd/ vuser. db
[ root@localhost ~ ] # file / etc/ vsftpd/ vuser. db
[ root@localhost ~ ] # chmod 600 / etc/ vsftpd/ vuser. db
[ root@localhost ~ ] # rm - rf / etc/ vsftpd/ vuser. list
创建FTP根目录及虚拟用户映射的系统用户
[ root@localhost ~ ] # useradd - d / var / ftproot - s / sbin/ nologin virtual
[ root@localhost ~ ] # chmod - Rf 755 / var / ftproot/
[ root@localhost ~ ] # ls - ld / var / ftproot/
建立支持虚拟用户的PAM认证文件
[ root@localhost ~ ] # vim / etc/ pam. d/ vsftpd. vu
auth required pam_userdb. so db= / etc/ vsftpd/ vuser
account required pam_userdb. so db= / etc/ vsftpd/ vuser
: wq
在vsftpd.conf文件中添加支持配置
既然要使用虚拟用户模式,而虚拟用户模式确实要比匿名访问模式更加的安全,配置的同时也关闭匿名开放模式。执行命令vim /etc/vsftpd/vsftpd.conf
,按照下表所示的要求修改配置选项,然后执行systemctl restart vsftpd
重启服务器
注意
:在修改pam_service_name=vsftpd.vu
时,一定要注意在vim /etc/vsftpd/vsftpd.conf
的文件末尾直接修改值,不要自己创建。否则存在两个,会导致虚拟用户登录不上。
参数 作用 anonymous_enable=NO 禁止匿名开放模式 local_enable=YES 允许本地用户模式 guest_enable=YES 开启虚拟用户模式 guest_username=virtual 指定虚拟用户帐号 pam_service_name=vsftpd.vu 指定pam文件 allow_writeable_chroot=YES 允许禁锢的FTP根目录可写而不拒绝用户登入请求
设置SELinux
[ root@localhost ~ ] # setsebool - P ftpd_full_access= on
现在不论是xiaoming还是xiaohong帐户,他们的权限都是相同的——默认不能上传、创建、修改文件,如果希望用户xiaohong能够完全的管理FTP内的资料,就需要让FTP程序支持独立的用户权限配置文件了。
为虚拟用户设置不同的权限
[ root@localhost ~ ] # mkdir / etc/ vsftpd/ vusers_dir/
[ root@localhost ~ ] # vim / etc/ vsftpd/ vsftpd. conf
user_config_dir= / etc/ vsftpd/ vusers_dir
[ root@localhost ~ ] # touch / etc/ vsftpd/ vusers_dir/ xiaoming
[ root@localhost ~ ] # vim / etc/ vsftpd/ vusers_dir/ xiaohong
anon_upload_enable= YES
anon_mkdir_write_enable= YES
anon_other_write_enable= YES
重启vsftpd服务,验证实验效果
确认填写正确后保存并退出vsftpd.conf文件,重启vsftpd程序并设置为开机后自动启用。
[ root@localhost ~ ] # systemctl restart vsftpd
[ root@localhost ~ ] # systemctl enable vsftpd
如果重启vsftpd并没有看到报错,此时就可以尝试登入FTP服务了,这次使用Linux客户端,对两个虚拟用户分别验证。