本文由ilanniweb提供友情赞助,首发于烂泥行天下linux
想要得到更多的文章,能够关注个人微信ilanniweb。web
1、实际问题ubuntu
在使用vsftpd过程当中,咱们会常常发现vsftpd在默认状况下一个用户(不管是系统用户仍是虚拟用户)只能拥有一个目录,通常是根目录。centos
若是此时再要向该用户添加其它目录的话,好比系统的其余目录也须要此用户访问,那么就没法直接添加了。服务器
vsftpd不像FileZilla_Server等相似的ftp服务器软件同样能够直接给用户添加多目录,以下:微信
因此咱们只能借助其余方式实现这个功能,在此咱们使用的是mount --bind命令。测试
注意:mount --bind命令存在linux内核2.4版本之后的linux系统中。spa
要想把vsftpd一个用户添加多个目录的话,咱们能够经过mount --bind命令来达到要求。3d
mount --bind命令其实就是一个挂载命令,它的主要做用是将一个目录中的内容挂载到另外一个目录上。blog
有关mount --bind命令的使用,咱们能够经过查看mount的帮助文档得到。以下:
man mount
根据权限的不一样,咱们把vsftpd的这个要求分为可读写和只读这两种状况,下面分别介绍下。
PS:如下实验环境均是基于《烂泥:ubuntu下vsftpd虚拟用户配置》这篇文章的环境进行。
固然这个vsftpd单用户多目录的功能在ubuntu和centos均是可使用的。
vsftpd的虚拟用户为ailanni,其对应的系统用户为wangxy。
如今要求新建一个目录/write,ailanni用户要对/write目录具备可读写权限。
首先建立/write目录,并修改所属的用户及用户组为wangxy系统用户。以下:
sudo mkdir /write
sudo chown wangxy:wangxy -R /write/
由于虚拟用户ailanni登陆到vsftpd要看到write这个目录,因此须要咱们在ailanni用户的根目录下也建立一个write目录并修改所属的用户及用户组为wangxy系统用户。
sudo mkdir /www/write
sudo chown wangxy:wangxy -R /www/write/
以上相关的目录建立完毕后,如今咱们来经过mount --bind命令进行挂载。以下:
sudo mount --bind /write/ /www/write/
mount
上述命令中sudo mount --bind /write/ /www/write/命令的意思是把/write/目录挂载到/www/write/目录下。
经过上图,咱们能够很明显的看到/write/已经挂载到了/www/write/下,而且是可读写挂载的。
以上命令在服务器重启后是不会自动执行的,若是要使上述命令自动进行挂载,咱们能够把上述命令放在/etc/fstab或者/etc/rc.local文件中。
放在/etc/fstab文件中,形式以下:
sudo vi /etc/fstab
/write/ /www/write/ none bind 0 0
放在/etc/rc.local文件中,形式以下:
sudo vi /etc/rc.local
mount --bind /write/ /www/write/
如今要求新建一个目录/readonly, ailanni用户要对/readonly目录具备只读权限。
首先建立readonly目录,并修改所属的用户及用户组为wangxy系统用户。以下:
sudo mkdir /readonly
sudo chown wangxy:wangxy -R /readonly/
由于虚拟用户ailanni登陆到vsftpd要看到readonly这个目录,因此须要咱们在ailanni用户的根目录下也建立一个readonly目录并修改所属的用户及用户组为wangxy系统用户。
sudo mkdir /www/readonly
sudo chown wangxy:wangxy -R /www/readonly/
以上相关的目录建立完毕后,如今咱们来经过mount --bind命令进行挂载。以下:
sudo mount --bind /readonly/ /www/readonly/
sudo mount -o remount,ro /www/readonly/
mount
上述命令中sudo mount --bind /readonly/ /www/readonly/命令的意思是把/readonly/目录挂载到/www/readonly/目录下。
sudo mount -o remount,ro /www/readonly/命令的意思是挂载/www/readonly/为只读权限。
经过上图,咱们能够很明显的看到/readonly/已经挂载到了/www/readonly/下,而且是只读挂载的。
注意:mount --bind命令的只读挂载与读写挂载是不一样的。
以上命令在服务器重启后是不会自动执行的,若是要使上述命令自动进行挂载,咱们能够把上述命令放在/ etc/rc.local文件中,而只读挂载命令不能放在/etc/fstab文件中。
通过屡次测试只读挂载放在/etc/fstab文件中vsftpd用户还具备写入权限,因此只能放在/etc/rc.local文件中。
放在/etc/rc.local文件中,形式以下:
sudo vi /etc/rc.local
mount --bind /readonly/ /www/readonly/
mount -o remount,ro /www/readonly/
以上所有挂载完毕后,咱们如今开始测试相关权限。
如今开始测试vsftpd对各个目录的权限,下面开始对读写和只读权限分别进行测试。
使用FlashFXP链接vsftpd服务器,以下:
随便上传一个文件到write目录,以下:
经过上图,咱们能够很明显的看出。咱们如今上传了一个ks.cfg文件到write目录下了。
如今咱们在登录vsftpd服务器切换到/write目录下,看看刚刚上传的文件ks.cfg是否在此目录下。以下:
经过上图,咱们能够很明显的看出刚刚上传的文件ks.cfg已经在/write目录下了,说明写入权限是没有问题的。
如今来测试只读权限,如今咱们仍是上传刚刚那个文件ks.cfg到readonly目录下。以下:
经过上图,咱们能够很明显的看出刚刚上传的文件ks.cfg没法上传到readonly目录,FlashFXP提示553错误,说明只读权限是没有问题的。
到此有关vsftpd单用户多目录的配置到此结束。