내가 이루고 싶은 것
권한이 없는 사용자로 프로세스를 실행하고 싶지만 프로세스에 의해 변경된 모든 파일은 섀도우 폴더에서만 변경되어야 합니다. 또한 필요한 경우 네트워크 기능을 비활성화하고 싶습니다.
내가 시도한 것
- lowerdir 및 upperdir을 사용하여
/
오버레이 설치/temp/fakeroot
,,unshare -rn
chroot /temp/overlay
- 문제: 마운트하려면 루트가 필요하며 오버레이는 중첩된 마운트(내 홈 디렉터리)를 무시합니다.
unshare -rmn
, lowerdir 및 upperdir을 사용하여/
오버레이를 설치합니다 ./temp/fakeroot
/tmp
문제: 다음 폴더의 하위 폴더이기 때문에 설치하는 동안 오류가 발생했습니다./
fuse-overlayfs
,unshare -rn
,chroot
- 문제: 5.16 이상의 커널에서만 중첩 설치가 읽을 수는 있지만 쓸 수는 없습니다.
- 참고: 커널 제한을 견딜 수 있지만 중첩 설치로 인해 사용할 수 없습니다.
대안이 존재한다는 것을 알고 있지만 유망해 보이지는 않습니다.
- Overlayroot: 시작 시 마운트해야 하며 변경 증분을 저장하지 않습니다.
overlayroot-chroot
: 위의 내용을 바탕으로 작성되었습니다.- mergefs는 모든 파일 시스템을 하나로 병합하는 데 사용됩니다. 이것이 어떻게 수행되는지 알 수 없습니다
- Docker 사용: 루트가 필요하며 변경 델타를 저장하지 않습니다.
이 작업을 수행하는 방법을 아는 사람이 있나요?
답변1
위의 여러 명령을 결합한 솔루션을 찾았습니다.
mkdir -p /tmp/overlay-test/{upper,workdir,mount}
unshare -- map-root-user --net --mount
또는 짧다unshare -rnm
mount.mergerfs / /tmp/overlay-test/view -o use_ino,posix_acl=true
(옵션은 선택사항입니다)mount -t overlay overlay -o lowerdir=/tmp/overlay-test/view,upperdir=/tmp/overlay-test/upper,workdir=/tmp/overlay-test/workdir /tmp/overlay-test/mount
mount --rbind /dev /tmp/overlay-test/mount/dev
그리고mount --rbind /proc /tmp/overlay-test/mount/proc
chroot /tmp/overlay-test/mount /bin/bash
일반적인 아이디어는 unshare
루트가 아닌 사용자가 파일 시스템을 마운트할 수 있는 환경을 만드는 것입니다. 그런 다음 mergefs를 사용하여 모든 하위 설치(예: 많은 배포판의 home)를 단일 폴더로 병합합니다. 이 단일 폴더는 오버레이의 하위 디렉터리로 사용될 수 있습니다. 명령을 실행하려면 오버레이 폴더에 매핑 dev
해야 합니다 . proc
어쨌든 사용자는 이러한 폴더에 쓸 수 없으므로 이는 중요하지 않습니다. 마지막으로 chroot
overlayed-merged-rootfs로 전환할 수 있습니다. 모든 변경 사항은 하나의 디렉토리에서만 수행됩니다 upper
. 완료되면 모든 설치를 제거하여 정리하는 것을 잊지 마십시오.