如何正确设置 sshd 服务的 chroot 监狱?

How to set chroot jail for sshd service properly?

在我的 debian8 服务器端,命令是 运行 :

adduser --home /home/user1 user1
nano /etc/ssh/sshd_config
Match User user1
ChrootDirectory /home/user1   #two lines were  added

service sshd restart

在客户端,

ssh user@192.168.1.105
user@192.168.1.105's password: 
Write failed: Broken pipe

为什么不能在 /home/user1 上设置 chroot jail?

可能发生的事情是 sshd 发出 chroot() 系统调用,但是当系统尝试启动您的 shell (这可能类似于 /bin/bash), 它不存在...因为你已经 chroot 了,所以没有 /bin 目录。

您可以将 shell 复制到 /home/user1/bin/bash,但您还需要复制任何所需的共享库。你可以通过 运行ning ldd /bin/bash:

得到这个
# ldd /bin/bash
linux-vdso.so.1 =>  (0x00007ffc3eff5000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f21ceb47000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f21ce943000)
libc.so.6 => /lib64/libc.so.6 (0x00007f21ce586000)
/lib64/ld-linux-x86-64.so.2 (0x00007f21ced71000)

您可以将每个 这些 复制到 chroot 环境中的适当位置,但是如果您想 运行 任何其他命令,您将需要重复以上过程。

而且您可能会发现一些库是动态加载的,您也需要复制它们。

以及来自 /etc 的任何必需的配置文件。可能还有来自 /dev 的一些设备节点。等等

换句话说,除非您的目标真的是限制对单个命令的访问,否则真的不值得付出努力。