搭建了一个vsftp的环境,花了小半天才搞好,主要是在文件权限部分折腾了挺久,我的系统环境是CentOS Linux release 7.0.1406 ,vsftpd-3.0.2-21.el7.x86_64
首先是虚拟用户的概念,vsftp有三种登录方式,匿名,本地用户,虚拟用户。
匿名使用ftp或者anonymous登录,无密码
本地用户使用系统用户登录
虚拟用户是使用在vsftp内创建的一系列账户进行登录,vsftp通过db以及用户配置文件来对用户进行管理,通常配置比较灵活,安全性也较高
搭建过程:
一、添加一个系统用户
useradd –d /home/ftp –s /sbin/nologin vftpuser
ftp目录,可以使用该用户的home目录,也可以指定其他目录作为ftp目录,需要确保有相应的权限(读、写、删除更名等)
二、vsftp中添加虚拟用户
1、使用db_load生成用户口令认证文件
先生成一个txt文件,一行用户名,一行密码,例如:
然后通过db_load生成口令认证文件,放在/etc/vsftpd/目录下
db_load –T –t hash –f ./vsftpuser.txt /etc/vsftpd/vsftpuser.db
可以通过db_dump来查看db中的内容,命令格式为:
db_dump -d a ./vsftpuser.db
2、修改PAM认证文件
修改/etc/pam.d/vsftpd文件
注掉所有行后添加以下两行:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpuser
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpuser
三、修改vsftpd.conf配置文件
1 anonymous_enable=NO 2 local_enable=YES 3 write_enable=YES 4 local_umask=022 5 anon_upload_enable=NO 6 dirmessage_enable=YES 7 xferlog_enable=YES 8 connect_from_port_20=YES 9 chroot_local_user=NO 10 chroot_list_enable=YES 11 chroot_list_file=/etc/vsftpd/chroot_list 12 listen=YES #不打开启动失败,同时ipv6设置为NO 13 userlist_enable=YES 14 tcp_wrappers=YES 15 guest_enable=YES #打开虚拟用户设置 16 guest_username=vsftpuser #映射为第一步中添加的系统用户 17 pam_service_name=vsftpd #PAM文件 18 vsftpd_log_file=/var/log/vsftpd.log #指定log文件 19 user_config_dir=/etc/vsftpd/userconf #虚拟用户的配置文件路径 20 allow_writeable_chroot=YES #新版本安全选项 21 virtual_use_local_privs=NO #为NO时,虚拟用户使用匿名用户权限,为YES虚拟用户使用系统用户权限,默认为NO,可以通过用户的配置文件再来为用户单独指定权限
主要是这些配置,如遇到问题,可以根据错误提示,反复尝试一下配置选项
四、虚拟用户配置文件
对应着vsftpd.conf中 user_config_dir=/etc/vsftpd/userconf的路径
可以为每一个虚拟用户创建单独的配置文件,该文件中的配置选项覆盖vsftpd.conf的选项。
通常匿名用户只具有浏览和下载的权限,通过用户配置文件可以为虚拟用户指定目录以及各种上传下载权限等等
例如用户名为mput的配置文件:
1 local_root=/home/ftpfile/media_upload #指定该用户ftp路径 2 # 3 anon_upload_enable=YES #匿名用户的权限 4 anon_world_readable_only=YES 5 anon_mkdir_write_enable=YES 6 anon_other_write_enable=YES 7 chown_username=vsftpuser #上传时文件用户名 8 ~ 9 ~ 10 11 "./userconf/mput" 7L, 173C
配置好后,systemctl start vsftpd.service将服务起起来,通过客户端进行测试
遇到的一些问题:
1、vsftpd:500 OOPS: vsftpd: refusing to run with writable root inside chroot ()
安全选项,设置一下 allow_writeable_chroot=YES试试
2、550 Permission denied.
检查下用户是否对该目录有写权限,以及在虚拟用户的配置项中,需要打开写的权限
3、500 OOPS: cannot change directory:/home/vsftp
安全选项,在setsebool中将ftpd_full_access 项打开
4、启动失败,提示warning: can’t get client address: Socket operation on non-socket
检查一下配置选项中的LISTEN是否打开,以及ipv6的配置
参考:
配置选项:http://yuanbin.blog.51cto.com/363003/108262/