我一直在考虑如何限制用户访问他们自己的目录,而不是允许他们浏览自己的用户目录。
我正在使用SFTP,并且不想安装普通的FTP,因为引入了所有额外的安全问题。
rbash听起来像一个好主意,减去它禁用cd的事实。 我希望用户能够在其主目录中创build目录,并浏览他们自己的文件夹。
一个chroot监狱听起来就像它有自己的一套问题,听起来更像是头疼而不值得。
所以,我的问题是,是否有更简单的方法来限制用户只能够浏览他们的用户目录,而不是他们的用户目录之上的任何东西?
如果你可以限制他们只是SFTP,而不允许他们通过SSHlogin,那么你可以使用内置到openssh的chroot设施。 这里是一个很好的文章解释如何
所以,按照Stew指出的那个链接和指示,我能够得到这个工作。 不过,为了让SSH密钥正常工作,我不得不做一些修改,所以我想我会发布一个我做了什么的清单,供其他人阅读。
chroot用户访问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下行添加到/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
validation刚刚创build的脚本所在的目录是否属于用户和组根,并设置为755权限。
更改用户的主目录: usermod -m -d /home/chrootdir/home username
禁用用户的shell: chsh -s /bin/false username
将用户的文件复制到新目录(.ssh文件夹,.profile等)
编辑sshdconfiguration文件: 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