Chrooted SSH / SFTP教程(Debian Lenny)
版本1.0
作者:Falko Timme
自版本4.8起,OpenSSH支持chrooting(请参阅http://openssh.org/txt/release-4.8 ),因此不再需要任何补丁。 本教程介绍如何给用户chroot SSH访问。 通过此设置,您可以为用户提供shell访问,而不必担心他们可以看到整个系统。 您的用户将被关在特定目录中,这些目录将无法突破。 我还将展示如何使用chroot的SFTP。
我不会保证这将为您工作!
1初步说明
Debian Lenny的OpenSSH版本是5.1p1,因此支持chrooting。
我将在这里使用用户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 /usr/lib/openssh/sftp-server [...] |
然后在文件末尾添加以下节(为要chroot的每个用户添加这样一个节):
[...] Match User falko ChrootDirectory /home AllowTCPForwarding no X11Forwarding no ForceCommand /usr/lib/openssh/sftp-server |
而不是为每个用户添加节,您也可以chroot组,例如如下所示:
[...] Match Group users ChrootDirectory /home AllowTCPForwarding no X11Forwarding no ForceCommand /usr/lib/openssh/sftp-server |
这将使所有用户
组的成员都chroot到/ home
目录。
重启OpenSSH:
/etc/init.d/ssh restart
如果您将多个用户chroot到同一目录,但不希望用户浏览其他用户的主目录,则可以按如下所示更改每个主目录的权限:
chmod 700 /home/falko
之后,您可以使用SFTP客户端登录,例如FileZilla或WinSCP 。
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 / usr / lib / openssh / sftp-server
的行! 这使得用户仍然可以使用chroot的SFTP (如果您还在/ etc / ssh / sshd_config中
也有Subsystem sftp / usr / lib / openssh / sftp-server
),还有chroot的SSH。
重启OpenSSH:
/etc/init.d/ssh restart
如果您将多个用户chroot到同一目录,但不希望用户浏览其他用户的主目录,则可以按如下所示更改每个主目录的权限:
chmod 700 /home/falko
之后,您可以使用SSH客户端(如PuTTY)登录。