系统环境 centos7.3 版本
ftp 根目录 : /data/ftp
ftp 配置文件目录:/etc/vsftpd
ftp 虚拟用户权限配置文件目录:/etc/vsftpd/vuser_config
实现目标:
1,匿名用户可以登录,但是不能访问虚拟用户的宿主目录,只能访问共享目录
2,虚拟用户对自己的宿主目录有任何权限,且只能在自己宿主目录中操作
1,安装vsftpd和db_load加密工具
1 2 3 4 5 6 |
#要关闭selinux 和防火墙或者开启允许的端口,不然访问会有问题 sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config #修改配置文件 setenforce 0 #临时关闭 systemctl stop firewalld.service #关闭防火墙
yum install vsftpd db4-utils -y |
2,创建本地用户[用于映射虚拟用户]
1 2 3 4 5 6 7 |
#建立ftp用户目录 mkdir -p /data/ftp #创建用户 useradd -d /data/ftp vuser -s /sbin/nologin 更改权限和主组权限 chmod 755 /data/ftp chown vuser.root /data/ftp |
3,创建虚拟用户[用户和密码]文件
1 2 3 4 5 |
vim /etc/vsftpd/vuser-list jin [用户名] 123456 [密码] jinc [用户名] 123123 [密码] |
4,加密用户密码文件生成数据库文件
1 2 3 4 |
cd /etc/vsftpd/ db_load -T -t hash -f ./vuser-list ./vuser-list.db chmod 600 vuser-list.db
|
5,创建PAM认证文件
1 2 3 4 |
vim /etc/pam.d/vuser.vu auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser-list #注意64位系统写/lib64这个路径,32位系统要写成/lib,下同! account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser-list
|
6,修改配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
vim /etc/vsftpd/vsftpd.conf
#允许匿名用户访问 anonymous_enable=yes
local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_file=/var/log/xferlog xferlog_std_format=YES
listen=NO listen_ipv6=YES
#修改ftp默认目录到/data/ftp下面 chroot_local_user=YES local_root=/data/ftp anon_root=/data/ftp
#pam认证文件 pam_service_name=vuser.vu
#虚拟用户权限配置目录 user_config_dir=/etc/vsftpd/vuser_config
userlist_enable=YES tcp_wrappers=YES allow_writeable_chroot=YES one_process_model=NO
#开启虚拟用户 guest_enable=YES guest_username=vuser
重启vsftpd服务 systemctl restart vsftpd.service |
7,创建虚拟用户[权限]配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
cd /etc/vsftpd/vuser_config vim jin [有所有权限] local_root=/data/ftp/jin #设置登录后禁锢的目录 write_enable=yes #开放写权限 anon_world_readable_only=no #开放下载权限 anon_upload_enable=yes #开放上传权限 anon_mkdir_write_enable=yes #开放创建目录的权限 anon_other_write_enable=yes #开放删除和重命名的权限
vim jinc [只有上传下载的权限] local_root=/data/ftp/jinc anon_upload_enable=yes anon_world_readable_only=no
|
8,更改虚拟用户目录权限
1 2 3 |
#如果不更改的话,匿名用户是可以访问到的 chmod 700 jin chmod 700 jinc |
9,访问测试:[先在用户文件夹中建个测试的文件夹或文件,方便识别]
匿名访问
登录jin 用户访问:
登录jinc 用户访问:
错误1:226 Transfer done (but failed to open directory)
解决:selinux 和防火墙导致
错误2:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
解决:配置文件中加入 allow_writeable_chroot=YES 针对标准vsftpd(standonly)模式, 然后重启ftp