目前我正在创建一个 chroot 监狱。因此我读了一些文章,一切似乎都很清楚,除了一件事:chroot监狱shell
在一个来源中,他们创建了以下设置(当然设置要大得多,但这是我有问题的部分):
监狱设置了一些程序和库。
chroot 监狱文件夹是/jail/
.
现在我们要创建用户监狱在我们的新监狱里。
因此,我们打开该文件/etc/sudoers
并在其中写入以下行:
prison ALL=NOPASSWD: /usr/bin/chroot, /bin/su - prison
然后,我们在监狱中创建该文件/bin/chroot-shell
作为用户在连接 ssh 时必须使用的 shell。内容是:
#!/bin/bash
/usr/bin/sudo /usr/bin/chroot /jail/ /bin/su - $USER "@"
有趣的部分是,既没有/usr/bin/sudo
也没有/bin/chroot
被复制到/jail/
.
链接预期:当用户尝试使用 sftp(例如 WinSCP)登录时,它可以工作。但是,当他尝试在 SSH 上使用终端(例如使用 Putty)时,它会失败并显示以下行:
sudo: unknown uid 1001: who are you?
所以我的问题是:
- 这种配置 chroot 监狱的方法不是一种不安全的方法吗?将一个被监禁的人放入 sudo 配置文件对我来说似乎没有意义。那么它背后的想法是什么?为什么不直接复制
/bin/bash
到监狱并让用户使用它而不是自己的bin/chroot-shell
和 sudo 条目呢? - 如果这种方式比使用更安全
/bin/bash
,那么我怎样才能让它工作呢?我认为第一步是复制/usr/bin/sudo
并/usr/bin/chroot
到监狱目录,对吧?但下一步怎么办? sudo 不认识用户...
感谢您的帮助,并对我的英语不好表示歉意。
问候,
克里斯
解决方案
到目前为止,我不知道为什么我读到的文章的作者想要创建一个自己的 shell 并为监狱中的用户提供某些命令的 sudo 权限。
但这篇文章是 2008 年的,所以有点过时了。
我现在将/bin/bash
Shell 作为被监禁用户的默认 shell(使用命令chsh
)。另外,我必须确保库/lib/libdl.so.2 /lib/libc.so.6 /lib/ld-linux.so.2
(在我的例子中是 32 位和 64 位)都在监狱中,因此被监禁的用户有一个正确的用户名。因为如果没有这些,就没有正确的方法从文件中的用户 ID 中获取用户名paswd
。
之后,用户可以使用工作 shell 打开正确的 ssh 连接,并且命令行知道他们是谁(行开头的 präfix 名称以及命令whoami
)。
就是这样,现在一切都正常了^^