CentOS 6.9文件服务器:如何将staff组用户锁定至/home/sharedfolder
刚好我之前处理过类似的需求,咱们一步步来配置,确保既锁死用户在指定目录,又让他们能完全读写里面的子目录:
1. 先搞定目录权限与归属
chroot的要求有点严格,必须保证根目录(这里就是/home/sharedfolder)的属主是root,且权限不能高于755(否则sshd会拒绝chroot)。然后我们再给staff组开放子目录的完全权限:
# 设置主目录属主和权限 chown root:root /home/sharedfolder chmod 755 /home/sharedfolder # 给staff组赋予该目录下所有子目录/文件的完整权限(包括未来新建的) # 先设置现有文件的权限 chgrp -R staff /home/sharedfolder/* chmod -R 775 /home/sharedfolder/* # 设置setgid位,让新建的文件/目录自动继承staff组权限 find /home/sharedfolder -type d -exec chmod g+s {} \;
2. 配置SSH服务(/etc/ssh/sshd_config)
我们需要用internal-sftp模块来实现chroot,同时限制staff组用户的访问:
先打开配置文件:
vi /etc/ssh/sshd_config
找到原来的Subsystem sftp行,替换成:
Subsystem sftp internal-sftp
然后在文件末尾添加以下配置,专门针对staff组:
Match Group staff ChrootDirectory /home/sharedfolder ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no
ChrootDirectory:指定用户登录后被锁定的根目录(系统层面的路径)ForceCommand:强制用户使用sftp,禁止shell登录(如果不需要shell的话,这样更安全)- 禁用端口转发和X11转发,进一步限制权限
3. 调整用户账户配置(/etc/passwd)
因为chroot后,用户的“/”对应系统的/home/sharedfolder,所以需要把staff组用户的家目录改成/,shell改成/sbin/nologin(禁止shell登录,只允许sftp):
比如修改用户john的配置:
usermod -d / -s /sbin/nologin john
或者直接编辑/etc/passwd,找到对应行,把原来的/home/john改成/,shell改成/sbin/nologin。
同时确保所有需要访问的用户都属于staff组:
usermod -aG staff john
4. 验证配置并重启服务
先检查sshd配置是否合法:
sshd -t
如果没有报错,重启sshd服务:
service sshd restart
现在可以用一个staff组用户测试sftp登录,比如:
sftp john@your-server-ip
登录后你会发现用户只能在/home/sharedfolder下操作,无法跳转到系统的/home或其他目录,而且对里面的子目录拥有完整的读写权限。
注意事项
- 如果你需要允许用户使用shell登录(不只是sftp),那配置会复杂一些,需要在chroot目录下搭建完整的shell环境(比如/bin/bash、/etc/passwd、/etc/group等文件),但一般文件服务器用sftp足够了。
- 确保
/home/sharedfolder下没有任何属于普通用户的文件/目录在根层级,否则chroot会失败,根目录必须完全由root控制。
内容的提问来源于stack exchange,提问作者Gray Loon
相关产品推荐
相关产品推荐

