chroot 감옥의 잘못된 파일 소유권

chroot 감옥의 잘못된 파일 소유권

chroottest 사용자를 위해 /home/chroot에 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#

문제가 무엇인지 아시나요?

고마워요, 마이크

답변1

Ferenc Wágner와 Totor의 의견을 종합하면 다음과 같은 답을 얻을 수 있습니다.

또한 시스템이 passwd 및 그룹 파일에서 사용자와 그룹을 해석할 수 있도록 /etc/nsswitch.conf 및 libnss.files.so.2 라이브러리를 chroot 환경에 복사해야 합니다.

관련 정보