在 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