上次总结到,vsftpd如何使用mysql完成用户验证。
其中包括三个用户:tom@123,jerry@456,mike@789。这些用户都映射为一个系统虚拟用户,所以一定要有一套机制来分别设置每个用户的权限。
1、在vsftpd.conf主配置文件中添加:
user_config_dir=/etc/vsftpd/vusers_conf
参考man vsftpd.conf可以看到user_config_dir选项的说明,它可以指向一个任意取名的目录,用于存放虚拟用户配置文件。
2、创建虚拟用户的配置目录,及配置文件:
mkdir /etc/vsftpd/vusers_conf && cd /etc/vsftpd/vusers_conf
这些配置文件只需要和用户同名即可。而后,每个文件中都可以单独对这个用户权限进行设置。使用匿名用户的指令即可。比如:
vim -o tom jerry mike ../vsftpd.conf(我是一次编辑了四个文件。三个用户分别设置了最简单的权限,用于测试学习而已。代码如下:)
tom:
anon_upload_enable=YES
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
jerry:
anon_upload_enable=NO
anon_mkdir_write_enable=YES
anon_other_write_enable=NO
mike:
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=YES
由于修改了vsftpd.conf主配置文件,需要重载服务:
service vsftpd reload
实测,修改pam相关是不用重载服务的。测试过程如下:
这个/_ftproot是之前创建的系统虚拟用户的家目录,以后tom,jerry,mike上传的文件都在这里。可以看到目前什么都没有。下面我用另外一台centos7测试,
使用tom登录ftp,上传fstab文件成功,但不能mkdir,也不能删除fstab文件,符合配置要求。
因为测试tom的时候,还没用jerry创建目录,所以没有测试rmdir,后来试过也是一样拒绝的。符合配置要求。
使用jerry登录ftp,上传issue文件失败,创建目录a成功,删除文件或目录失败,符合配置要求。
使用mike登录ftp,上传issue文件失败,创建目录b失败,删除文件fstab成功,删除目录a成功,符合配置要求。证毕。
说明:
我试过,哪怕是属主不是映射的虚拟用户,具备删除权限的用户依然可以在远程执行删除的。只不过,无论是delete还是rmdir,都只能带一个参数,不能一次删除多个对象。
mkdir也是只能删除空目录。而mkdir生成的目录。上面截图也看见了,没有go权限,所以能切换过去,也能上传和删除文件,但无法执行ls(亦即list)操作。可见默认anon_umask=077。所以,一般我就参考local_umask的默认值,设置anon_umask=022。
本文完。