루트의 Jail/Sandbox 프로세스를 재정의하고 변경 사항을 추적합니다.

루트의 Jail/Sandbox 프로세스를 재정의하고 변경 사항을 추적합니다.

내가 이루고 싶은 것

권한이 없는 사용자로 프로세스를 실행하고 싶지만 프로세스에 의해 변경된 모든 파일은 섀도우 폴더에서만 변경되어야 합니다. 또한 필요한 경우 네트워크 기능을 비활성화하고 싶습니다.

내가 시도한 것

  • lowerdir 및 upperdir을 사용하여 /오버레이 설치 /temp/fakeroot,,unshare -rnchroot /temp/overlay
    • 문제: 마운트하려면 루트가 필요하며 오버레이는 중첩된 마운트(내 홈 디렉터리)를 무시합니다.
  • unshare -rmn, lowerdir 및 upperdir을 사용하여 /오버레이를 설치합니다 ./temp/fakeroot
    • /tmp문제: 다음 폴더의 하위 폴더이기 때문에 설치하는 동안 오류가 발생했습니다./
  • fuse-overlayfs, unshare -rn,chroot
    • 문제: 5.16 이상의 커널에서만 중첩 설치가 읽을 수는 있지만 쓸 수는 없습니다.
    • 참고: 커널 제한을 견딜 수 있지만 중첩 설치로 인해 사용할 수 없습니다.

대안이 존재한다는 것을 알고 있지만 유망해 보이지는 않습니다.

  • Overlayroot: 시작 시 마운트해야 하며 변경 증분을 저장하지 않습니다.
  • overlayroot-chroot: 위의 내용을 바탕으로 작성되었습니다.
  • mergefs는 모든 파일 시스템을 하나로 병합하는 데 사용됩니다. 이것이 어떻게 수행되는지 알 수 없습니다
  • Docker 사용: 루트가 필요하며 변경 델타를 저장하지 않습니다.

이 작업을 수행하는 방법을 아는 사람이 있나요?

답변1

위의 여러 명령을 결합한 솔루션을 찾았습니다.

  1. mkdir -p /tmp/overlay-test/{upper,workdir,mount}
  2. unshare -- map-root-user --net --mount또는 짧다unshare -rnm
  3. mount.mergerfs / /tmp/overlay-test/view -o use_ino,posix_acl=true(옵션은 선택사항입니다)
  4. mount -t overlay overlay -o lowerdir=/tmp/overlay-test/view,upperdir=/tmp/overlay-test/upper,workdir=/tmp/overlay-test/workdir /tmp/overlay-test/mount
  5. mount --rbind /dev /tmp/overlay-test/mount/dev그리고mount --rbind /proc /tmp/overlay-test/mount/proc
  6. chroot /tmp/overlay-test/mount /bin/bash

일반적인 아이디어는 unshare루트가 아닌 사용자가 파일 시스템을 마운트할 수 있는 환경을 만드는 것입니다. 그런 다음 mergefs를 사용하여 모든 하위 설치(예: 많은 배포판의 home)를 단일 폴더로 병합합니다. 이 단일 폴더는 오버레이의 하위 디렉터리로 사용될 수 있습니다. 명령을 실행하려면 오버레이 폴더에 매핑 dev해야 합니다 . proc어쨌든 사용자는 이러한 폴더에 쓸 수 없으므로 이는 중요하지 않습니다. 마지막으로 chrootoverlayed-merged-rootfs로 전환할 수 있습니다. 모든 변경 사항은 하나의 디렉토리에서만 수행됩니다 upper. 완료되면 모든 설치를 제거하여 정리하는 것을 잊지 마십시오.

관련 정보