chroot의 마운트 지점

chroot의 마운트 지점

에 일부 장치(예: /dev/sda1)가 설치되어 있습니다 /home/user1. 나는 또한 내 아래에 완전한 Linux 시스템이 있고 /tmp/chroot디렉토리 /tmp/chroot/home에는 user2.

, mount 및 거기 (또는 ) chroot에서 명령을 실행 하면 여전히 mount 를 볼 수 있으며 디렉토리는 더 이상 (chroot에) 존재하지 않습니다./tmp/chroot/dev/sys/procmountcat /proc/mounts/dev/sda1/home/user1/home/user1

jchroot대신에 chroot(유사한 인터페이스를 가지고 있지만 새 마운트 네임스페이스와 새 PID 네임스페이스를 생성하는 프로그램 ) 를 사용해 보았지만 chroot결과는 동일합니다.

이것이 정상적인 행동입니까? chroot 외부의 마운트 지점에 대한 정보에 액세스할 수 있는데 이상하게 들립니다.
그것들을 사라지게 할 수 있는 방법이 있나요 /proc/mounts?

답변1

이는 chroot에서 예상되는 동작입니다. chroot는 실제로 프로세스에 표시된 파일 시스템 루트 디렉터리 "/"를 부팅 시 "/"로 마운트된 디렉터리와 다른 디렉터리로 변경합니다. 프로세스는 여전히 커널 자체에 대해 동일한 전역 액세스 권한을 갖고 있지만 "/" 파일 시스템에 대한 액세스 권한은 없습니다.

커널은 chroot 프로세스가 chroot가 "실제"라고 믿도록 만들기 위해 /proc 또는 장치를 수리하거나 에뮬레이션하지 않습니다. 이에 대한 부작용으로 chroot에서 수퍼유저로 실행되는 모든 프로세스는 여러 가지 방법으로 쉽게 chroot에서 벗어날 수 있습니다(예: /dev 마운트 및 실제 루트가 있는 /dev/sdaX 마운트 또는 mknod만 마운트). 새 장치가 들어와서 이를 사용하여 마운트됩니다. 커널은 상관하지 않습니다. chroot 프로세스는 장치 드라이버를 설치하고 원하는 모든 작업을 수행할 수도 있습니다.

프로세스가 현재 실행 중인 시스템과 다른 시스템에서 실행되고 있다고 생각하도록 "속이거나" 보안 계층을 제공하려는 경우 chroot는 아마도 잘못된 기술일 수 있으므로 사용자 모드 Linux를 살펴보는 것이 좋습니다. 또는 아마도 Linux 컨테이너

답변2

예, chroot 대신(또는 동시에) "unshare"를 사용해야 합니다. chroot는 프로세스의 루트 디렉터리만 변경합니다. 실제로 그보다 더 높은 것을 달성하는 것은 어렵지만 돌파할 수 있는 방법이 있습니다. 이곳은 감옥이 아닙니다.

이를 수행하는 도구는 "lxc"(Linux 컨테이너)와 같습니다.

관련 정보