創建 chroot 監獄後無法 su

創建 chroot 監獄後無法 su

在 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

相關內容