限制用户进入SFTP Plus设置Chrooted SSH / SFTP(Debian Squeeze)
本教程介绍如何在Debian Squeeze上为用户提供chroot SSH和/或chrooted SFTP访问。 通过此设置,您可以为用户提供shell访问,而不必担心他们可以看到整个系统。 您的用户将被关在特定目录中,这些目录将无法突破。 我还将展示如何限制用户进入SFTP,以免他们使用SSH(这部分是独立于本教程的chroot部分)。
我不会保证这将为您工作!
1初步说明
我将在这里使用用户falko
与home目录/ home / falko
。 用户falko属于组用户
。 我想将用户chroot到/ home
目录。
2安装OpenSSH
如果尚未安装OpenSSH,请按如下方式进行安装:
apt-get install ssh openssh-server
3启用Chrooted SFTP
启用SFTP非常简单。 打开/ etc / ssh / sshd_config
...
vi /etc/ssh/sshd_config
...并确保你有以下行:
[...] Subsystem sftp internal-sftp [...] |
然后在文件末尾添加以下节(为要chroot的每个用户添加这样一个节):
[...] Match User falko ChrootDirectory /home AllowTCPForwarding no X11Forwarding no ForceCommand internal-sftp |
而不是为每个用户添加节,您也可以chroot组,例如如下所示:
[...] Match Group users ChrootDirectory /home AllowTCPForwarding no X11Forwarding no ForceCommand internal-sftp |
这将使所有用户
组的成员都chroot到/ home
目录。 请注意,ChrootDirectory指令中路径名的所有
组件必须是其他用户或组不可写的根目录(请参阅
man 5 sshd_config
)。 这就是为什么我们不能指定/ home / falko
,例如,因为它不是用户和组root所有
。
重启OpenSSH:
/etc/init.d/ssh restart
如果您将多个用户chroot到同一目录,但不希望用户浏览其他用户的主目录,则可以按如下所示更改每个主目录的权限:
chmod 700 /home/falko
之后,您可以使用SFTP客户端登录,例如FileZilla或WinSCP 。
请注意,在此时您尚未设置chroot SSH(请参阅下一章),您在/ etc / ssh / sshd_config中指定
的用户/组仅具有SFTP访问权限。 SSH不能为这些用户工作,因为SSH chroot环境需要一些额外的文件才能工作(因为我们使用ForceCommand internal-sftp
)。
4启用Chroot SSH
启用chroot SSH更复杂一些,因为我们必须使用用户应该能够使用的所有程序/工具(例如/ bin / bash
, / bin / cp
等)来设置一个chroot环境。 这意味着我们还必须将这些程序所需的所有库都复制到chroot jail。 您可以使用cp
命令手动执行此操作,您可以使用ldd
命令来查找工具需要哪些库,例如
ldd /bin/bash
我们还必须使用mknod
命令在chroot jail内创建一些设备,如/ dev / null
, / dev / zero
, / dev / tty
和/ dev / urandom
。
但是,这可能是一个乏味的任务。 幸运的是,有一个脚本可以为我们做这个。
首先,我们需要安装一些先决条件:
apt-get install sudo debianutils coreutils
然后我们将make_chroot_jail.sh
下载到/ usr / local / sbin
,并使root用户可执行:
cd /usr/local/sbin
wget http://www.fuschlberger.net/programs/ssh-scp-sftp-chroot-jail/make_chroot_jail.sh
chmod 700 /usr/local/sbin/make_chroot_jail.sh
在我们使用脚本之前,您可能需要将一些程序(例如/ usr / bin / vi
)添加到该脚本中的发行版的APPS
行中,以便自动将这些工具添加到chroot jail:
vi /usr/local/sbin/make_chroot_jail.sh
[...] elif [ "$DISTRO" = DEBIAN ]; then APPS="/bin/bash /bin/cp /usr/bin/dircolors /bin/ls /bin/mkdir /bin/mv /bin/rm /bin/rmdir /bin/sh /bin/su /usr/bin/groups /usr/bin/id /usr/bin/rsync /usr/bin/ssh /usr/bin/scp /sbin/unix_chkpwd /usr/bin/vi" else [...] |
接下来我们添加一个指向/ home
的符号链接/ home
/ home
:
cd /home
ln -s . home
现在我们可以使用脚本了。 用法如下:
make_chroot_jail.sh username [/path/to/chroot-shell [/path/to/chroot]]
chroot-shell
是由脚本创建的特殊shell,用于chroot用户。 由于OpenSSH默认支持chrooting,因此我们不需要脚本创建一个特殊的shell; 相反,我们可以使用/ bin / bash
或/ bin / sh
。
用户是否已经存在并不重要。 如果他现在,他将被更新; 如果没有,他将被创造。
make_chroot_jail.sh falko /bin/bash /home
这将使用chroot jail / home
创建/更新用户falko
。
要更新chroot jail中的所有文件/库,请运行
make_chroot_jail.sh update /bin/bash /home
现在我们需要配置与SFTP配置相似的OpenSSH。 打开/ etc / ssh / sshd_config
...
vi /etc/ssh/sshd_config
...并在文件末尾添加以下节(为要chroot的每个用户添加此节):
[...] Match User falko ChrootDirectory /home AllowTCPForwarding no X11Forwarding no |
而不是为每个用户添加节,您也可以chroot组,例如如下所示:
[...] Match Group users ChrootDirectory /home AllowTCPForwarding no X11Forwarding no |
这将使所有用户
组的成员都chroot到/ home
目录。
与SFTP配置的区别在于,这一次,我们不能在Match
stanzas中使用ForceCommand internal-sftp
的行! 这使得用户仍然可以使用chroot的SFTP (前提是您还可以在/ etc / ssh / sshd_config
中配置Subsystem sftp internal-sftp
),还可以使用chroot SSH。
重启OpenSSH:
/etc/init.d/ssh restart
如果您将多个用户chroot到同一目录,但不希望用户浏览其他用户的主目录,则可以按如下所示更改每个主目录的权限:
chmod 700 /home/falko
之后,您可以使用SSH客户端(如PuTTY)登录。
5限制用户仅使用SFTP
本章独立于chroote,所以与第3章和第4章无关 - 这意味着您不必按第3章和第4章所述设置chrooting,才能将用户限制为SFTP(但如果您已经设置了chrooted的SFTP和SSH用户,并希望以后禁用SSH,此处显示的方法也是如此;如果您只设置了chroot的SFTP,而不是chroot的SSH,访问限制在SFTP,如第3章末尾所述)。
它显示了如何使用户只能使用SFTP,并禁止该用户使用SSH。 所有你需要做的是将用户的登录shell更改为/ usr / lib / openssh / sftp-server
,例如:
usermod -s /usr/lib/openssh/sftp-server falko
/ usr / lib / openssh / sftp-server
必须作为有效的登录shell在/ etc / shells
中列出,因此如果尚未列出,请将其添加到/ etc / shells中
,如下所示:
echo '/usr/lib/openssh/sftp-server' >> /etc/shells
这只能做一次,而不是每个想要限制SFTP的用户。