chroot 감옥은 실제 파일 시스템과 상호 작용이 없는 다른 세계인 것 같습니다. 따라서 전체 환경은 chroot 내에 복제되어야 하며 이는 그 안에 완전한 시스템 설치를 의미합니다.
그러나 chroot Jail에 기본 파일 시스템에 대한 읽기 액세스 권한을 부여할 수 있는 방법이 있습니까? 또한 chroot가 자체 파일의 우선순위를 지정하고 싶습니다. 예를 들어, /usr/bin/wget
해당 파일이 존재하는 경우 시스템의 /usr/bin/wget
.
(실제로 나는 다음과 같은 것을 찾고 있습니다.모래 상자.)
위의 내용이 가능한가요?
답변1
다음 명령을 사용하여 디렉토리를 chroot 디렉토리에 바인드 마운트할 수 있습니다:
mount -o bind /x/y /chroot/x/y
(바라보다man mount
, "번들 설치" 섹션). 이제부터 모든 액세스는 /chroot/x/y
액세스와 동일합니다 /x/y
(동일한 파일 목록, 동일한 콘텐츠, 동일한 inode).
그러나 이는 전체 디렉토리를 그대로 유지한다는 점에 유의하십시오. chroot 내의 프로세스는 디렉토리에 쓸 수 있습니다."실제" 디렉터리에 쓸 수 있습니다.외부. chroot 내부에서 마운트를 읽기 전용으로 만들려면 바인딩 후 명시적으로 읽기 전용으로 다시 마운트해야 합니다.
mount -o remount,ro /chroot/x/y
원본 /x/y는 읽기/쓰기 상태로 유지되지만 복사본은 이제 읽기 전용이 됩니다.
파일의 내부 복사본을 선호합니다., 또는 원본 파일이나 디렉터리에 영향을 주지 않고 일부 기존 파일이나 디렉터리에 쓰기를 허용하려면 다음을 사용할 수 있습니다.연합 파일 시스템. 이를 통해 여러 디렉터리 트리를 서로 겹쳐서 쓰기가 이루어지는 위치와 읽기가 구문 분석되는 순서를 지정할 수 있습니다. Linux용 공통 통합 파일 시스템은 다음과 같습니다.오브,연합 파일 시스템, 그리고UnionFS 퓨즈. 처음 두 개는 커널 모듈이고 마지막 하나는 커널 모듈을 사용합니다.퓨즈사용자 공간에서 파일 시스템을 실행합니다. 커널 모듈은 일반적으로 더 빠르지만 chroot에서 외부 사용자 공간 도구를 사용하지 않으려는 경우에도 FUSE 버전이 설정하기 더 쉬울 수 있습니다. 필요한 통합 파일 시스템을 준비한 다음 해당 시스템으로 chroot할 수 있습니다.
각 경우에 기본 접근 방식은 동일합니다. 예를 들면 다음과 같습니다.
unionfs-fuse -o cow /jail/bin:/other/bin:/bin /chroot/bin
/chroot/bin
이렇게 하면 파일이 /jail/bin
존재하면 우선순위가 부여된 다음 시도되는 통합 마운트가 생성되고 /other/bin/
, 그렇지 않으면 의 파일이 표시됩니다 /bin
. -o cow
기록 중 복사로 만드세요. 예를 들어 쓰기 시도가 /chroot/bin/foo
복사되어 /bin/foo
수정 /jail/bin/foo
사항이 저장됩니다. 이 동작을 원하지 않으면 이 옵션을 무시하십시오. 다른 파일 시스템은 구성이 약간 다르지만 원칙은 동일합니다.
어떻게 설정하든 다음을 수행할 수 있습니다.
chroot /chroot
그리고 모든 것이 원하는 대로 작동하도록 하세요.
답변2
mount -o bin은 전체 디렉토리에 대해 이 작업을 수행해야 합니다.
mount -o bind /bin /chroot/bin
chroot /chroot
chroot에 system/bin의 복사본이 생성됩니다.
bash 사본을 /chroot/bin/bash로 대체하고 현재와 같은 방식으로 처리하려면 /chroot/usr/local/bin에 넣고 그에 따라 PATH를 설정하십시오.