0

在我的 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?

4

1 回答 1

1

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

您可以将 shell 复制到/home/user1/bin/bash中,但您还需要复制任何所需的共享库。你可以通过运行得到这个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. 等等。

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

于 2015-08-13T14:18:41.460 回答