我一直在考虑如何限制用户访问他们自己的目录,不允许他们在他们自己的用户目录之上导航。
我正在使用 SFTP,并且不想安装常规 FTP,因为它会引入所有额外的安全问题。
rbash
听起来是个好主意,除了它会禁用cd
。我希望用户能够在他们的主目录中创建目录,并浏览他们自己的文件夹。
监狱chroot
听起来有它自己的一系列问题,听起来比它本身带来的麻烦还要多。
所以,我的问题是,有没有更简单的方法来限制用户只能浏览他们的用户目录,而不能浏览其用户目录以上的任何内容?
答案1
如果您可以将它们限制为仅使用 SFTP 并且不允许它们通过 ssh 登录,那么您可以使用 openssh 内置的 chroot 功能。这里有一篇很好的文章解释了如何
答案2
因此,按照 Stew 指向的链接和说明,我能够让这个工作正常进行。不过,为了让 SSH 密钥正常工作,我必须进行一些更改,因此我想发布一份详细的更改列表,供其他人阅读。
对于chroot
仅使用 SSH 进行 SFTP 访问的用户:
从 Debian Squeeze 6.0.5 和 OpenSSH 5.5p1 开始
添加用户:
adduser username
添加一个组来分配用户,该组适用于您想要 chroot 的用户:
addgroup sftponly
<-- 组名其实不重要,只要你在下面所有地方都更改它就可以了添加用户到组:
usermod -G groupname username
安装 libpam-chroot:
apt-get install libpam-chroot
将以下行添加到
/etc/pam.d/login
session required pam_chroot.so debug
去:
/usr/share/doc/libpam-chroot/examples
然后:
chmod 744 setup-chrootdir-shell.sh
这样你就可以运行脚本了运行脚本,在脚本后指定目录:
./setup-chrootdir-shell.sh /path/to/userdir
验证刚刚创建的脚本的目录是否存在、是否由用户和组 root 拥有,并设置为 755 权限。
更改用户的主目录:
usermod -m -d /home/chrootdir/home username
禁用用户的shell:
chsh -s /bin/false username
将用户的文件复制到新目录(.ssh 文件夹、.profile 等)
编辑 sshd 配置文件:
vi /etc/ssh/sshd_config
# %h/.ssh/authorized_keys is the default
AuthorizedKeysFile /home/%u/.ssh/authorized_keys
# Subsystem for chroot jail
# Default is Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
# Chroot jail config
Match group sftponly
ChrootDirectory /home/chrootdir/home/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
Match
如果您正在使用
AllowUsers
,请将该用户添加到其中。AllowUsers username
编辑
/etc/passwd
并更改用户的用户目录位置vi /etc/passwd
例如:
username:x:1001:1002:/home/chrootdir/home:/bin/false
重启ssh:
/etc/init.d/ssh restart