Debian
chroot 監獄中的文件所有權不正確
我在 /home/chroot 中為使用者 chroottest 設置了一個 chroot 監獄
重現步驟:
root@pc# mkdir /home/chroot root@pc# mkdir /home/chroot/dev root@pc# mkdir /home/chroot/etc root@pc# mkdir /home/chroot/bin root@pc# mkdir /home/chroot/usr root@pc# mkdir /home/chroot/usr/bin root@pc# mkdir /home/chroot/usr/lib root@pc# mkdir /home/chroot/usr/lib/terminfo root@pc# mkdir /home/chroot/lib root@pc# mkdir /home/chroot/lib/x86_64-linux-gnu root@pc# mkdir /home/chroot/lib64 root@pc# root@pc# mknod -m 666 null c 1 3 root@pc# mknod -m 666 tty c 5 0 root@pc# mknod -m 666 zero c 1 5 root@pc# mknod -m 666 random c 1 8 root@pc# root@pc# cp /bin/bash /home/chroot/bin root@pc# cp /usr/bin/ls /home/chroot/usr/bin root@pc# cp /usr/bin/getent /home/chroot/usr/bin root@pc# cp -av /usr/lib/terminfo /home/chroot/usr/lib/terminfo root@pc# root@pc# cp /lib/x86_64-linux-gnu/libtinfo.so.6 /home/chroot/lib/x86_64-linux-gnu/ root@pc# cp /lib/x86_64-linux-gnu/libdl.so.2 /home/chroot/lib/x86_64-linux-gnu/ root@pc# cp /lib/x86_64-linux-gnu/libc.so.6 /home/chroot/lib/x86_64-linux-gnu/ root@pc# cp /lib/x86_64-linux-gnu/libpthread.so.0 /home/chroot/lib/x86_64-linux-gnu/ root@pc# cp /lib/x86_64-linux-gnu/libselinux.so.1 /home/chroot/lib/x86_64-linux-gnu/ root@pc# cp /lib/x86_64-linux-gnu/libpcre2-8.so.0 /home/chroot/lib/x86_64-linux-gnu/ root@pc# cp /lib64/ld-linux-x86-64.so.2 /home/chroot/lib64/ root@pc# root@pc# useradd chroottest -s /bin/bash root@pc# passwd chroottest root@pc# root@pc# cp /etc/passwd /home/chroot/etc/ root@pc# cp /etc/group /home/chroot/etc/ root@pc# cp /etc/nsswitch.conf /home/chroot/etc/ root@pc# root@pc# echo -e "Match User chroottest\n\tChrootDirectory /home/chroot" >> /etc/ssh/sshd_config root@pc# systemctl reload sshd
當我以使用者 chroottest 的身份通過 ssh 連接時,我得到了正確的 chroot,但“ls -lh”的預期輸出將是
chroottest@pc# ls -lh total 24K drwxr-xr-x 2 root root 4.0K Nov 8 20:36 bin drwxr-xr-x 2 root root 4.0K Nov 8 20:35 dev drwxr-xr-x 2 root root 4.0K Nov 8 20:41 etc drwxr-xr-x 3 root root 4.0K Nov 8 20:37 lib drwxr-xr-x 2 root root 4.0K Nov 8 20:38 lib64 drwxr-xr-x 5 root root 4.0K Nov 8 21:00 usr
但它是
drwxr-xr-x 2 0 0 4.0K Nov 5 13:52 bin drwxr-xr-x 2 0 0 4.0K Oct 22 05:47 dev drwxr-xr-x 2 0 0 4.0K Nov 5 14:02 etc drwxr-xr-x 4 0 0 4.0K Nov 5 13:57 lib drwxr-xr-x 2 0 0 4.0K Oct 22 05:51 lib64 drwxr-xr-x 3 0 0 4.0K Nov 5 13:54 usr
我只看到 ID 而不是使用者名和組。文件系統權限不可能以這種方式管理……
nsswitch.conf 的內容為:
root@pc# cat /home/chroot/etc/nsswitch.conf passwd: files systemd group: files systemd shadow: files gshadow: files hosts: files dns networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: nis
getent 似乎無法在 chroot 環境中獲取任何資訊:
chroottest@pc# getent passwd chroottest@pc# getent passwd chroottest chroottest@pc#
關於可能是什麼問題的任何想法?
謝謝,邁克
Ferenc Wágner 和 Totor 的評論結合起來給了我答案:
您還必須將 /etc/nsswitch.conf 和 libnss.files.so.2 庫複製到 chroot 環境,系統才能從 passwd 和組文件中解釋使用者和組。