烂泥:vsftpd单用户多目录配置
本文由ilanniweb提供友情赞助,首发于烂泥行天下
想要获得更多的文章,可以关注我的微信ilanniweb。
一、实际问题
在使用vsftpd过程中,我们会经常发现vsftpd在默认情况下一个用户(无论是系统用户还是虚拟用户)只能拥有一个目录,一般是根目录。
如果此时再要向该用户添加其它目录的话,比如系统的其他目录也需要此用户访问,那么就无法直接添加了。
vsftpd不像FileZilla_Server等类似的ftp服务器软件一样可以直接给用户添加多目录,如下:

所以我们只能借助其他方式实现这个功能,在此我们使用的是mount --bind命令。
注意:mount --bind命令存在linux内核2.4版本以后的linux系统中。
二、解决方法
要想把vsftpd一个用户添加多个目录的话,我们可以通过mount --bind命令来达到要求。
mount --bind命令其实就是一个挂载命令,它的主要作用是将一个目录中的内容挂载到另一个目录上。
有关mount --bind命令的使用,我们可以通过查看mount的帮助文档获得。如下:
man mount

根据权限的不同,我们把vsftpd的这个要求分为可读写和只读这两种情况,下面分别介绍下。
PS:以下实验环境均是基于《烂泥:ubuntu下vsftpd虚拟用户配置》这篇文章的环境进行。
当然这个vsftpd单用户多目录的功能在ubuntu和centos均是可以使用的。
vsftpd的虚拟用户为ailanni,其对应的系统用户为wangxy。
2.1 可读写挂载
现在要求新建一个目录/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/

2.2 只读挂载
现在要求新建一个目录/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对各个目录的权限,下面开始对读写和只读权限分别进行测试。
3.1 测试读写权限
使用FlashFXP连接vsftpd服务器,如下:

随便上传一个文件到write目录,如下:

通过上图,我们可以很明显的看出。我们现在上传了一个ks.cfg文件到write目录下了。
现在我们在登陆vsftpd服务器切换到/write目录下,看看刚刚上传的文件ks.cfg是否在此目录下。如下:

通过上图,我们可以很明显的看出刚刚上传的文件ks.cfg已经在/write目录下了,说明写入权限是没有问题的。
3.2 测试只读权限
现在来测试只读权限,现在我们还是上传刚刚那个文件ks.cfg到readonly目录下。如下:

通过上图,我们可以很明显的看出刚刚上传的文件ks.cfg无法上传到readonly目录,FlashFXP提示553错误,说明只读权限是没有问题的。
到此有关vsftpd单用户多目录的配置到此结束。
烂泥:vsftpd单用户多目录配置的更多相关文章
- ubuntu server vsftpd 虚拟用户及目录
ubuntu server vsftpd 虚拟用户及目录 一:需求场景: 在ubuntu server上开设一个虚拟网站,在网站目录建立一个ftp目录,允许用户通过ftp上传网站文件到网站目录: 同时 ...
- hive单用户多点模式配置
简介 单用户多点模式也称远程服务模式,用户非java客户端访问元数据库,在服务端启动MetaStoreServer,客户端利用Thrift协议通过MetaStoreServer访问元数据库. mysq ...
- ahjesus配置vsftpd虚拟用户在Ubuntu
网上搜索了很多资料,过时,不全,货不对版 已下步骤亲测有效,不包含匿名用户登录 1.新建/home/loguser.txt 并填充内容,格式如下 用户名密码用户名密码用户名密码 2.生成db文件用于用 ...
- centos7: vsftpd安装及启动: ftp配置(以虚拟用户为例)
centos7: vsftpd安装及启动: ftp配置 1安装: yum -y install vsftpd /bin/systemctl start vsftpd.service #启动 /bin/ ...
- 在wdcp环境下架设VSFTPD虚拟用户只上传功能服务器
检查系统是否已安装vsftp rpm -q vsftpd package vsftpd is not installed #说明系统没有安装vsftpd 如果生成虚拟用户数据文件的时候出现以下错误 u ...
- Linux怎样创建FTP服务器--修改用户默认目录
在创建FTP服务器之有先命令: ps -ef |grep vsftpd 查一下系统有没有安装vsftpd这个服务器,如果出现如下图所示的界面说明没有安装. 然后再执行:yum install ...
- Linux怎样创建FTP服务器--修改用户默认目录-完美解决 - 费元星
在创建FTP服务器之有先命令: ps -ef |grep vsftpd 查一下系统有没有安装vsftpd这个服务器,如果出现如下图所示的界面说明没有安装. 然后再执行:yum install vs ...
- SpringSecurity 3.2入门(3)单用户登录
1.增加web.xml文件配置如下 <!-- 获取Spring Security session的生命周期,这个监听器会在 session 创建和销毁的时候通知 Spring Security ...
- 烂泥:ubuntu下vsftpd虚拟用户配置
本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我微信ilanniweb. 以前搭建vsftpd都是在centos下,本以为在ubuntu按照以前的步骤搭建即可.可 ...
随机推荐
- 调优Java virtual machine常见问题汇总整理
数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型.基本类型的变量保存原始值,即:他代表的值就是数值本身:而引用类型的变量保存引用值.“引用值”代表了某个对象的引用,而不是对象本身, ...
- PHP 批量生成静态文件目录代码
<?php /** * @author:jiangzaixing 20160314 * 获取静态文件方法 */ class StaticFile { const MAP_FILE_NAME = ...
- spring mvc+ELK从头开始搭建日志平台
最近由于之前协助前公司做了点力所能及的事情,居然收到了一份贵重的端午礼物,是给我女儿的一个乐高积木,整个有7大包物件,我花了接近一天的时间一砖一瓦的组织起来,虽然很辛苦但是能够从过程中体验到乐趣.这次 ...
- 过去几个月出炉的30款最喜欢的 jQuery 插件
在这篇文章中,我们收集了一些在过去的几个月里最喜欢的 jQuery 插件.为了使您更容易搜索到自己喜欢的 jQuery 插件,我们已经对插件进行了分类: 页面布局插件,图片和视频插件,滑块和画廊,排版 ...
- T3 - 构建大型 Web 应用的 JavaScript 框架
T3 是一个用于构建大型 Web 应用程序的客户端 JavaScript 框架.T3 和大多数的 JavaScript 框架不同.它的意思是一小部分的整体架构,它允许你建立可扩展的客户端代码.T3 应 ...
- javascript --- 实时监听输入框值的变化
实时监听文本框值变化是非常常见的功能,通常最简单的办法就是用keyup,keydown来实现,但是这种方法有两个问题,一个是当直接复制粘贴的时候没法监听到事件,另外一个问题是在移动端,使用删除键删除输 ...
- 深入源码分析使用jQuery连续发起jsonp请求失败的原因
jQuery的 jsonp 大家应该是十分熟悉了.曾遇到过这样的需求1.希望请求几个相似的内容添加到页面2.请求的内容一定时间内是固定不变的,希望做个缓存. 于是脑子一拍写下了类似这样的代码 for( ...
- Failed to connect to JobMonApp on port 13491
今天为了解决别的问题,把/etc/hosts文件里的 127.0.0.1 localhost改成了 127.0.0.1 DSETL ,结果运行作业的时候就报这个错:Failed to connect ...
- 国内最全最详细的hadoop2.2.0集群的HA高可靠的最简单配置
简介 hadoop中的NameNode好比是人的心脏,非常重要,绝对不可以停止工作.在hadoop1时代,只有一个NameNode.如果该NameNode数据丢失或者不能工作,那么整个集群就不能恢复了 ...
- spring理解
Struts与Hibernate可以做什么事? Struts,Mvc中控制层解决方案,可以进行请求数据自动封装.类型转换.文件上传.效验… Hibernate,持久层的解决方案:可以做到,把对象保存到 ...