所谓虚拟用户就是,全部虚拟用户会统一映射为一个指定的系统普通帐号:访问共享位置,即为此系统普通用户的家目录,固然每一个虚拟用户也可被赋予不一样的访问权限,经过匿名用户的权限控制参数进行指定数据库
虚拟用户账号的存储方式: vim
1,建立专门一个文件存放用户密码,可是该文件须要用hash格式。因此须要用下面的这条命令:安全
db_load -T -t hash -f vusers.txt vusers.db
实现步骤:ide
"注意该文件的格式:第一行 用户名,第二行 密码,以此类推" vim /etc/vsftpd/vusers.txt wang #用户名 wangpass #密码 mage #用户名 magepass #密码
1,cd /etc/vsftpd/ 2,db_load -T -t hash -f vusers.txt vusers.db #为了安全修改文件权限 3,chmod 600 vusers.*
1,建立用户 useradd -d /var/ftproot -s /sbin/nologin vuser • 2,由于FTP是只能普通用户登入,因此普通用户须要对目录有读和执行权限,这样才能上传下载文件。 chmod +rx /var/ftproot/ 3,由于FTP为了安全根目录不能有写权限,由于根目录有写权限,咱们登入上去是否是就能根目录给删了对吧,因此须要执行下面的命令。 chmod -w /var/ftproot/ #为了能有个上传下载的目录单独在建立一个目录。 mkdir /var/ftproot/upload #由于登入上来映射的用户都是vuser用户因此要给vuser用户对upload目录有彻底控制的权限,因此能够给它ACL权限这样比较安全 setfacl -m u:vuser:rwx /var/ftproot/upload
由于如今的验证方式跟以前的不一样了,因此须要本身建立一个PAM模块文件,而后在主配置文件中调用该文件测试
1,建立PAM模块文件ui
vim /etc/pam.d/vsftpd.db 文件内容以下: auth required pam_userdb.so db=/etc/vsftpd/vusers account required pam_userdb.so db=/etc/vsftpd/vusers
2,从新指定PAM配置文件rest
vim /etc/vsftpd/vsftpd.conf guest_enable=YES guest_username=vuser "pam_service_name=vsftpd.db"注意该项在配置文件中已经有须要修改一下
禁用SELinux或者 setsebool -P ftpd_full_access 1 code
若是是CentOS-7:systemctl restart vsftpd 若是是CentOS-6:service vsftpd restart
这时候登入就能够用刚才建立的vusers.txt文件里的用户名密码了ci
例如: [root@ansible-7 ~]# ftp 192.168.136.7 Connected to 192.168.136.7 (192.168.136.7). 220 (vsFTPd 3.0.2) Name (192.168.136.7:root): "wang" 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 227 Entering Passive Mode (192,168,136,7,149,32). 150 Here comes the directory listing. drwxrwxr-x 2 0 0 6 Feb 27 00:58 upload 226 Directory send OK.
成功了,可是有一个不足就是每一个用户登入上来都是一个权限一个目录这样不太灵活,下面实现每一个虚拟用户登入上来各自对应不一样的权限,而且还可以让他登入上来对应的目录都不一样一个。rem
1,修改FTP主配置文件
vim /etc/vsftpd/vsftpd.conf #下面这个选项,做用就是让虚拟用户支持独立的权限配置文件 user_config_dir=/etc/vsftpd/vusers.d/
2,给每一个虚拟用户建立一个独立的权限配置文件
#建立配置文件存放的路径 mkdir /etc/vsftpd/vusers.d/ #进入此目录 cd /etc/vsftpd/vusers.d #建立各自用户的权限配置文件 vim wang anon_upload_enable=YES #容许wang用户上传文件 anon_mkdir_write_enable=YES #容许wang用户建立文件 anon_other_write_enable=YES #容许wang用户删除文件 local_root=/wangroot #登陆wang目录改变至指定wangroot目录里 注意"wangroot这个目录手工建立,而且该目录不能有w权限,能够为wang用户单首创建一个共享目录而且权限也须要改成766,让Other具备读写权限" vim li anon_other_write_enable=YES #容许li用户删除文件 local_root=/liroot #登陆li目录改变至指定liroot目录里 "一样liroot目录也须要手工建立,操做跟wang帐号的同样"
3,测试
一,wang帐号测试 登入测试:成功 [root@ansible-7 ~]# ftp 192.168.136.7 Connected to 192.168.136.7 (192.168.136.7). 220 (vsFTPd 3.0.2) Name (192.168.136.7:root): wang 331 Please specify the password. Password: 上传文件测试:成功 ftp> !ls #查看本机文件 anaconda-ks.cfg Downloads Music Templates Desktop f1 Pictures Videos Documents Public ftp> put f1 #上传文件 local: f1 remote: f1 227 Entering Passive Mode (192,168,136,7,226,193). 150 Ok to send data. 226 Transfer complete. 1073741824 bytes sent in 3.56 secs (301946.46 Kbytes/sec) ftp> ls #查看目录列表 227 Entering Passive Mode (192,168,136,7,40,213). 150 Here comes the directory listing. -rw------- 1 1001 1001 1073741824 Feb 27 03:12 f1 建立目录测试:成功 ftp> mkdir wangdir #建立目录 257 "/upload/wangfile" created ftp> ls #查看目录列表 227 Entering Passive Mode (192,168,136,7,208,167). 150 Here comes the directory listing. -rw------- 1 1001 1001 1073741824 Feb 27 03:12 f1 drwx------ 2 1001 1001 6 Feb 27 03:12 wangdir 226 Directory send OK. "下载文件测试:失败测试" "为何呢,由于FTP默认,被下载的文件必须全部人都有读权限,若是想什么文件都能下载的话," "须要修改主配置文件加上这一项: anon_world_readable_only=NO便可 (默认YES)" ftp> get f1 local: f1 remote: f1 227 Entering Passive Mode (192,168,136,7,74,156). 550 Failed to open file. 删除文件测试:成功 ftp> delete f1 250 Delete operation successful. ftp> ls 227 Entering Passive Mode (192,168,136,7,130,109). 150 Here comes the directory listing. drwx------ 2 1001 1001 6 Feb 27 03:12 wangfile 226 Directory send OK. 二,li帐号测试 登录测试:成功 [root@ansible-7 ~]# ftp 192.168.136.7 Connected to 192.168.136.7 (192.168.136.7). 220 (vsFTPd 3.0.2) Name (192.168.136.7:root): li 331 Please specify the password. Password: 上传文件测试:失败 ftp> put f1 local: f1 remote: f1 227 Entering Passive Mode (192,168,136,7,232,207). 550 Permission denied. 下载文件测试:成功。默认FTP就支持匿名下载因此限制不了 ftp> get f1 local: f1 remote: f1 227 Entering Passive Mode (192,168,136,7,219,59). 150 Opening BINARY mode data connection for f1 (1073741824 bytes). 226 Transfer complete. 1073741824 bytes received in 2.55 secs (421099.01 Kbytes/sec) 删除文件测试:成功 ftp> delete f1 250 Delete operation successful. ftp> ls 227 Entering Passive Mode (192,168,136,7,195,31). 150 Here comes the directory listing. drwx------ 2 1001 1001 6 Feb 27 03:34 a 建立目录测试:失败 ftp> mkdir lidir 550 Permission denied.