vsftpd介绍
VSFTP是一个在UNIX/Linux操作系统上运行的FTP服务器,安全性是它的一个最大的特点。它可以运行在诸如Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开发源代码的FTP服务器软件,支持很多其他的FTP服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。
本文所有配置是在CentOS 5.8-64位系统上进行,配置的是vsftp虚拟用户模式,虚拟用户的特点是只能访问服务器为其提供的FTP服务,而不能访问系统的其它资源。所以,如果想让用户对FTP服务器站内具有写权限,但又不允许访问系统其它资源,可以使用虚拟用户来提高系统的安全性。
安装vsftpd和db_load加密工具
#要关闭selinux 和防火墙或者开启允许的端口,不然访问会有问题 sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config setenforce 0 #关闭防火墙 #centos6 service iptables stop #centos7 systemctl stop firewalld.service #安装vsftp和db_load yum install vsftpd db4-utils -y
添加宿主用户
新建系统用户vsftpd,用户目录为/home/vsftpd, 用户登录终端设为/bin/false(即使之不能登录系统)
useradd vsftpd -d /home/vsftpd -s /bin/false
所配置的虚拟用户其实都是映射成配置的宿主用户。
建立虚拟用户名单文件
touch /etc/vsftpd/virtusers
编辑虚拟用户名单文件:
第一行账号,第二行密码,注意:不能使用root做用户名,系统保留
vi /etc/vsftpd/virtusers
生成虚拟用户数据文件
db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
修改认证方式
修改/etc/pam.d/vsftpd配置文件
#%PAM-1.0 #session optional pam_keyinit.so force revoke #auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed #auth required pam_shells.so #auth include password-auth #account include password-auth #session required pam_loginuid.so #session include password-auth auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
注意:如果系统为32位,上面lib64改为lib,否则配置不生效。
建立虚拟用户个人Vsftp的配置文件
建立目录
mkdir /etc/vsftpd/vconf cd /etc/vsftpd/vconf
编辑虚拟用户配置文件
配置文件名必须为虚拟用户名
touch ftp01 vi ftp01
添加以下内容
#虚拟用户登录后的根目录 local_root=/home/vsftpd/ftp01 #虚拟用户和本地用户有相同的权限,默认是NO. #virtual_use_local_privs=YES anon_umask=022 #开放虚拟用户的下载权限。注意这个地方千万不能写成YES,否则将不能列出和下载子目录的文件。 anon_world_readable_only=NO #开放虚拟用户的写权限 write_enable=NO #开放虚拟用户的下载权限 anon_world_readable_only=YES #开放虚拟用户的上传权限 anon_upload_enable=NO #开放虚拟用户创建目录的权限 anon_mkdir_write_enable=NO #开放虚拟用户删除和重命名的权限 anon_other_write_enable=NO
配置vsftpd
编辑/etc/vsftpd/vsftpd.conf文件
#设定不允许匿名访问 anonymous_enable=NO #设定本地用户可以访问。注:如使用虚拟宿主用户,在该项目设定为NO的情况下所有虚拟用户将无法访问 local_enable=YES #使用户不能离开主目录 chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list #设定支持ASCII模式的上传和下载功能 ascii_upload_enable=YES ascii_download_enable=YES #PAM认证文件名。PAM将根据/etc/pam.d/vsftpd进行认证 pam_service_name=vsftpd #下面的配置在vsftpd.conf中末尾手动添加 #设定启用虚拟用户功能 guest_enable=YES #指定虚拟用户的宿主用户 guest_username=vsftpd #设定虚拟用户个人vsftp的FTP服务文件存放路径。 user_config_dir=/etc/vsftpd/vuser_conf
重启vsftpd服务器
#centos6 service vsftpd restart #centos7 systemctl restart vsftpd.service
其他配置
虚拟目录配置
比如:
把/home/a 映射为 ftp://localhost/a
把/home/b/c 则为 ftp://localhost/c
解决办法
[root@localhost ~]# mount –bind 原有的目录 新目录
操作
# 创建新目录 [root@localhost ~]# mkdir /home/public/soft # 然后执行mount命令 [root@localhost ~]# mount --bind /mnt/soft /home/public/soft
查看是否挂载成功:进入/home/public/soft目录,查看内容是否和/mnt/soft下面的内容一致,如果一致则映射成功。
按照上面的设置在服务器重新启动的时候,mount 就会失效,我们再配置开机自动mount
[root@localhost etc]# vi /etc/fstab # 将下面的语句添加到/etc/fstab文件的末尾 /mnt/soft /home/public/soft auto bind 0 0
修改vsftp端口
1.在文件/etc/vsftpd/vsftpd.conf末尾添加listen_port=2121
2.修改/etc/services,将将其中的 ftp 21/tcp 改为 ftp 2121/tcp , ftp 21/udp改为 ftp 2121/udp,即
ftp 21/tcp -------> ftp 2121/tcp ftp 21/udp -------> ftp 2121/udp
常见问题
上传文件的权限配置
设置上传之后文件的权限,有两种情况:
- 如果使用vsftp的是本地用户,则要修改配置文件中的 local_umask 的值。
- 如果使用vsftp的是虚拟用户,则要修改配置文件中的 anon_umask 的值。
登陆ftp服务器,报错:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
原因在于,从vsftpd_2.3.5版开始,取消了登陆用户的根目录的可写权限。
解决办法1:
去掉该用户根目录的写的权限,再新建一目录,以后用新目录
解决办法2:
保持旧版的管理策略,ftp用户根目录还是可以设置为可写权限。
在vsftpd.conf中添加如下配置
allow_writeable_chroot=YES