在 64 位元 CentOS 主機上我使用腳本make_chroot_jail.sh
將使用者關進監獄,不允許其看到其家中的任何內容/home/jail/home/user1
。
我是這樣輸入的:
sudo ./make_chroot_jail.sh user1
之後,當嘗試首先連接到 user1 時,我收到以下錯誤:
/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/
但現在,當嘗試連接到 user1su user1
並輸入密碼時,我收到此錯誤:
could not open session
那麼問題是這種情況下如何連接到user1呢?
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
經過一些修改後,我設法連接到 user1,但會話立即關閉!我猜這是 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
.對於該作業系統,我必須在監獄中新增一個空的 /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