原文来自我的博客,发表于2016/12/03,故文章中所提及的相对时间皆以此为原点。
鉴于信息技术类文章搬家计划,将其由主站移动至此。
一个半月前我曾为所在大学的英语课提供了网盘的镜像。博客上一篇文章便是记述配置网页程序与SSL的过程。如今,原先使用的360云盘不再允许上传文件,这个镜像或将成为主力……
这次配置是为达到以下目的
- 为教师提供单独用户,使教师能直接管理内容
- 教师用户不能访问或修改./USTB_English的上级目录及其中内容
这与虚拟主机提供商的需求十分相似——让一个用户只能通过FTP访问、修改自己的文件.
vsftpd所提供的chroot功能便可实现,官方对此功能给出了如下解释:
Place local users in a chroot() jail in their home directory after login
官方文档中与chroot有关的参数有三:chroot_local_user
、chroot_list_enable
和chroot_list_file
。其中chroot_list_file
定义chroot list所在路径。
而前二者共有四种组合,能实现如下功能
chroot_local_user=YES | chroot_local_user=NO | |
---|---|---|
chroot_list_enable=YES | 除chroot list中的用户,所有用户受限 | 仅chroot list中的用户受限 |
chroot_list_enable=NO | 所有用户受限 | 所有用户不受限 |
执行如下命令:
#添加名为teacher的用户,并使其不可登录Shell
useradd teacher -s /sbin/nologin
#为teacher设置密码
passwd teacher
#修改其主目录为课程内容所在目录
usermod teacher -d /var/www/hr98_tk/USTB_English
#将teacher设为该目录所有者
cd /var/www/hr98_tk
chown -R teacher ./USTB_English
#建立chroot_list
cd /etc
touch vsftpd.chroot_list
#将root用户添加至chroot_list
echo "root">>./vsftpd.chroot_list
并修改vsftpd配置文件:
# vim /etc/vsftpd.conf
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
重载vsFTPd配置文件:systemctl reload vsftpd
一切看似完成,问题却来了——使用root用户登录无任何问题,使用被chroot的teacher用户无法登录
500 OOPS: vsftpd: refusing to run with writable root inside chroot ()
问题原因是chroot根目录对被chroot用户可写。但该目录必须对用户teacher可写。
最终在Stack Overflow的一个问题中找到了解决方法——在配置文件中添加一行:
vim /etc/vsftpd.conf
allow_writeable_chroot=YES
重载vsFTPd配置文件systemctl reload vsftpd
后,用户teacher也可以正常登录并不能访问上一级目录,但可对所在目录进行写入操作.至此全部完成
尔后,我在vsFTPd官方文档里搜索allow_writeable_chroot
,没有任何结果。官方文档竟然完全没提到这个参数.