记一次配置多用户的vsftpd

时间: | 分类: 其他分类

笔者的服务器给几个可爱的小姐姐朋友搭建了多个web站点,由于wordpress需要ftp才能安装主题(权限问题,已解决)安装插件,而笔者不想开放shell权限,但是需要由笔者安装也比较麻烦,所以笔者打算开放ftp权限,然后将用户锁定在相应的网站目录底下,即可提供用户隔离的ftp。

环境:

centos 7 x64
nginx
php
网站目录: /var/www/html/www.example.com

注:PHP默认用户组是apache:apache,笔者已经将php的用户组修改为nginx。

过程:

首先安装vsftpd:

yum install vsftpd -y

然后修改ftp配置文件/etc/vsftpd/vsftpd.conf:

anonymous_enable=NO #禁用匿名用户
chroot_local_user=YES #禁止切换目录

之后新建一个ftp用户:

useradd ftpuser1 #新建一个用户
usermod -s /sbin/nologin ftpuser1 #不允许此用户登陆shell

修改用户的根目录(作为ftp登陆后的目录)

usermod -d /var/www/html/www.example.com ftpuser1 # 分配用户的目录
# 语法 usermod -d <目录> <用户>
# 注意:这里分配的目录会出现问题,下文详细说明

由于网页目录的权限是nginx:nginx,我们不能修改成用户的权限,那样nginx将无法访问此目录,除非给其他用户加上rwx
权限,但是显然这样不安全,所以我们需要将新用户移到nginx组内,然后给文件夹775权限,文件664权限,即可做到nginx可访问,用户可写入,其他人权限不变。

那么首先将用户添加到nginx权限组内:

# 语法:usermod -g <组名> <用户名> 设置用户的主要组,如果添加了其他组将会移除
usermod -g nginx ftpuser1 #将ftpuser1添加到nginx组内

然后修改目录权限为775

chmod 775 www.example.com

这时候登陆ftp,会发现提示500 OOPS: vsftpd: refusing to run with writable root inside chroot()

这是因为vsftpd要求用户的目录不能让其他用户有写权限,也就是要求根目录权限755,如果我们将网页目录设置以后,用户将无法上传文件(因为同一个组没有w权限),所以需要在外面套一层755权限的目录,再把网站目录放进去。

目录变成:/var/www/html/ftpuser1/www.example.com/
要自己修改nginx中的站点root位置,这里不再说明
然后给ftpuser1目录 权限设为755,用户组设为 nginx:nginx
www.example.com目录 设置为775,用户组也是nginx:nginx
之后重启nginx(应用新站点位置设置),重启vsftpd即可(不重启应该也没啥问题)。

注:如果在设置用户权限时不小心将nginx(用户)添加到了新用户的组中,可以使用usermod -g强制将nginx的组修改为nginx,虽然笔者看到有使用gpasswd -d删除的,但是测试后发现提示成功但是并无效果。


centos linux Nginx



白咲美绘瑠's blog