创建 chroot jail 后 su 失败

创建 chroot jail 后 su 失败

在 64 位 CentOS 主机上我使用脚本make_chroot_jail.sh把用户关进监狱,不允许其看到除了自己家以外的任何东西/home/jail/home/user1

我输入的是这个:

sudo ./make_chroot_jail.sh user1

之后,当我尝试首先连接到用户 1 时,我收到如下错误:

/bin/su: user guest does not exist

我已经通过复制一些错过的库解决了这个问题:

sudo cp /lib64/libnss_compat.so.2 /lib64/libnss_files.so.2 /lib64/libnss_dns.so.2 /lib64/libxcrypt.so.2 /home/jail/lib64/
sudo cp -r /lib64/security/ /home/jail/lib64/

但是现在,当我尝试连接到用户 1su user1并输入其密码时,我收到此错误:

could not open session

那么问题是,在这种情况下如何连接到用户1?

PS 以下是一些文件的权限,这可能有助于提供解决方案:

-rwsr-xr-x 1 root root /home/jail/bin/su
drwxr-xr-x 4 root root /home/jail/etc
-rw-r--r-- 1 root root /home/jail/etc/pam.d/su
-rw-r--r-- 1 root root /home/jail/etc/passwd
-rw------- 1 root root /home/jail/etc/shadow

更新1

经过一些修改后,我设法连接到用户 1,但会话立即关闭!我猜这是一个 PAM 问题,但是找不到解决方法。

以下是关闭操作的日志条目/val/log/secure

Oct  6 15:19:42 localhost su: pam_unix(su:session): session closed for user user1

是什么导致会话启动后立即退出?

答案1

要修复此could not open session问题,无需完全放弃 make_chroot_jail.sh,您还需要复制/usr/lib/libcrack*库。编辑脚本,其中有:

# If you are using a 64 bit system and have strange problems with login comment
# the following lines in, perhaps it will work (motto: if you can't find the
# needed library just copy all of them)
#
# cp /lib/*.* ${JAILPATH}/lib/
# cp /lib/lib64/*.* ${JAILPATH}/lib/lib64/

改成:

cp /lib/*.* ${JAILPATH}/lib/
cp /lib64/*.* ${JAILPATH}/lib64/
cp -rp /lib64/security ${JAILPATH}/lib64/
cp /usr/lib64/libcrack* ${JAILPATH}/usr/lib64/

只是一个简短的补充,上面的内容解决了 64 位 SuSE - SLES 11 sp2 的这个问题。我还将 重命名为$JAILPATH/lib$JAILPATH/lib64对于该操作系统,我必须在 jail 中添加一个空的 /etc/profile 文件(您可以使用它来输入 PS1 提示)。

答案2

我找到了解决办法。

首先你应该忘记 make_chroot_jail.sh 并使用监狱工具

我在使用它时遇到了一些问题,但最终一切都正常了。

以下是我使用 Jailkit 以及如何解决出现的问题的步骤:

A../configure; make; make install按照 处描述的方式进行操作INSTALL.txt

B.如果尚不存在,则/usr/sbin添加。$PATH

C. 这样做:

jk_init -v -j /home/jail basicshell editors extendedshell netutils ssh sftp scp

这可能会失败并显示如下错误消息:

`ERROR: configfile /usr/jk_init.ini does not exist`

要修复此问题,请将/usr/sbin/jk_init更改INIPREFIX='/usr'INIPREFIX='/etc/jailkit' 并重试。

D. 这样做:

jk_jailuser -v -m -j /home/jail customer01

这可能会失败并显示如下错误消息:

invalid shell, /home/jail/usr/sbin/jk_lsh does not exist

要修复,请执行以下操作:

jk_init -v -j /home/jail jk_lsh

然后重试。您也可以jk_lsh在步骤 C 中添加列表。

E.现在尝试连接到 customer01 时,连接可能会在启动后立即退出。要修复此问题,请/home/jail/etc/passwd更改 customer01 的 shell 并将其设置为 bash,如下所示:

customer01:x:518:601::/home/customer01:/bin/bash

而不是这样:

customer01:x:518:601::/home/customer01:/usr/sbin/jk_lsh

相关内容