如何正确设置 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
的一些设备节点。等等
换句话说,除非您的目标真的是限制对单个命令的访问,否则真的不值得付出努力。
在我的 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
的一些设备节点。等等
换句话说,除非您的目标真的是限制对单个命令的访问,否则真的不值得付出努力。