Linux에서 루트 없이 사용자 공간 chroot의 효과를 얻는 방법은 무엇입니까?

Linux에서 루트 없이 사용자 공간 chroot의 효과를 얻는 방법은 무엇입니까?

목표는 호스트 Linux 시스템 내에서 이동된(재배치된) 배포판( /가 전역 /와 일치해서는 안 됨)에 프로그램을 설치하고 실행하는 것입니다. 이러한 프로그램은 다른 /를 사용하는 데 적합하지 않습니다.

fakechroot는 시스템 호출 수준에서 작동하는 대신 라이브러리 교체를 사용하므로 완전한 솔루션이 아닙니다(따라서 정적으로 링크된 바이너리에는 적합하지 않습니다).

답변1

솔루션은 ptrace 또는네임스페이스(공유 해제).

ptrace 기반 솔루션은 네임스페이스/비공유 기반 솔루션보다 효율성이 떨어질 수 있습니다(그러나 후자의 기술은 최첨단 기술이므로 아직 잘 탐색되지 않을 수 있습니다).

ptrace 기반

UMView

ptrced 기반 솔루션에 관해서는 아래 의견에 감사드립니다.https://stackoverflow.com/a/1019720/94687, UMView를 찾았습니다.

링크된 문서에서는 호스트 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다음과 같은 도움을 받아 평소처럼 수행 할 수 있습니다.unshareunshare를 사용하여 chroot 시뮬레이션:

unshare --user --map-root-user --mount-proc --pid --fork
chroot ......
su - user1

답변2

당신은 시도 할 수 있습니다사용자 모드 리눅스. 이러한 커널을 구축하기 위한 코드는 이제 주류 소스에 존재하며, 내가 링크한 페이지에서 (오래된) 미리 컴파일된 버전을 찾을 수 있습니다.

관련 정보