목표는 호스트 Linux 시스템 내에서 이동된(재배치된) 배포판( /가 전역 /와 일치해서는 안 됨)에 프로그램을 설치하고 실행하는 것입니다. 이러한 프로그램은 다른 /를 사용하는 데 적합하지 않습니다.
fakechroot는 시스템 호출 수준에서 작동하는 대신 라이브러리 교체를 사용하므로 완전한 솔루션이 아닙니다(따라서 정적으로 링크된 바이너리에는 적합하지 않습니다).
답변1
솔루션은 ptrace 또는네임스페이스(공유 해제).
ptrace 기반 솔루션은 네임스페이스/비공유 기반 솔루션보다 효율성이 떨어질 수 있습니다(그러나 후자의 기술은 최첨단 기술이므로 아직 잘 탐색되지 않을 수 있습니다).
ptrace 기반
UMView
ptrced 기반 솔루션에 관해서는 아래 의견에 감사드립니다.https://stackoverflow.com/a/1019720/94687, UMView를 찾았습니다.
- http://wiki.virtualsquare.org/wiki/index.php/ViewFS
- http://wiki.virtualsquare.org/wiki/index.php/Virtual_installation_of_software
링크된 문서에서는 호스트 fs의 "기록 중 복사 보기"를 얻는 방법을 설명합니다. 이는 chroot를 수행하는 것과 정확히 동일하지 않습니다. umview에서 구현/교체하는 방법에 대한 정확한 지침은 내 질문에 대한 답변에 잘 설명되어 있습니다(이 방법을 알고 있다면 작성해 주세요!).
umview는 Ubuntu 및 Debian에 포함되어 있으므로 오픈 소스여야 합니다.http://packages.ubuntu.com/lucid/umview.
"제한된 계획"
또 다른 구현은 다음에 설명되어 있습니다.http://www.cs.vu.nl/~rutger/publications/jailer.pdf,http://www.cs.vu.nl/~guido/mansion/publications/ps/secrypt07.pdf.
chroot와 유사한 효과가 있는 변경 루트 정책 규칙 CHRDIR이 있습니다. ("감금 정책" 섹션)
그러나 소스 코드를 공개하지 않았을 수도 있습니다(부분적으로 수정된 strace를 기반으로 함).http://www.liacs.nl/~wichert/strace/-- "구현" 섹션)...
조르디
조디(http://www.eelis.net/geordi/,https://github.com/Eelis/geordi)은 감옥에 갇힌 프로그램에서 시스템 호출의 파일 매개변수를 필수로 무시할 수 있도록 수정될 수 있습니다.
뿌리
프로트기성품 ptrace 기반 도구입니다.http://proot.me/:
chroot에 해당
특정 Linux 배포판에서 명령을 실행하려면 게스트 rootfs에 대한 경로와 함께 proot를 제공하고 그 뒤에 필요한 명령을 입력하면 됩니다. 다음 예에서는 cat 프로그램을 실행하여 파일 내용을 인쇄합니다.
proot -r /mnt/slackware-8.0/ cat /etc/motd Welcome to Slackware Linux 8.0
지정하지 않으면 기본 명령은 /bin/sh입니다. 따라서 대화형 셸과 해당 서브루틴을 모두 제한하는 가장 짧은 방법은 다음과 같습니다.
proot -r /mnt/slackware-8.0/ $ cat /etc/motd Welcome to Slackware Linux 8.0
공유 취소를 기반으로
Linux 커널에서 user_namespaces 지원이 질문을 받은 이후로 훨씬 더 성숙해졌습니다. 이제 chroot
다음과 같은 도움을 받아 평소처럼 수행 할 수 있습니다.unshare
unshare를 사용하여 chroot 시뮬레이션:
unshare --user --map-root-user --mount-proc --pid --fork
chroot ......
su - user1
답변2
당신은 시도 할 수 있습니다사용자 모드 리눅스. 이러한 커널을 구축하기 위한 코드는 이제 주류 소스에 존재하며, 내가 링크한 페이지에서 (오래된) 미리 컴파일된 버전을 찾을 수 있습니다.