사용자 프로세스의 경우 디렉토리를 다른 곳에 마운트하고 싶지만 루트 권한이 없는 사용자 공간에 마운트하고 싶습니다. mount --bind /origin /dest와 비슷하지만 vfs 래퍼가 있습니다. 사용자 모드에서 미세 조정된 chroot와 같습니다.
프로그램은 필요한 경로를 "대체"하기 위해 시스템 호출을 파일로 래핑합니다. 다음 명령줄을 사용하여 호출할 수 있습니다.
바인딩vfs /fake-home:/home ls /home
나는 이것이 이미 존재한다고 확신합니다! :)
답변1
당신은 그것을 사용할 수 있습니다프로트귀하의 예와 거의 같은 방식입니다.
proot -b /fake-home:/home ls /home
BindFS/FUSE와 달리 PRoot는 사용자에게 속하지 않은 파일과 디렉터리를 바인딩할 수 있습니다.
답변2
이것앵무새프로그램은 사용자가 요청한 작업을 수행할 수 있습니다. 시스템 호출을 가로채고 특정 경로를 리디렉션합니다(예를 들어 /anonftp
FTP를 통해 원격 파일에 투명하게 액세스하기 위해 로 시작하는 모든 경로가 다시 매핑됩니다). 또한 완전히 사용자 공간에서 실행됩니다.
그러나 일반적이고 흔하지 않은 네트워크 프로토콜의 인상적인 배열에도 불구하고 parrot
귀하가 요구하는 것처럼 간단한 파일 시스템->파일 시스템 재작성을 수행하는 모듈은 없습니다. C 프로그래밍을 알고 있다면 추가하는 것이 매우 간단할 것입니다.
또는,파일 시스템 바인딩(계속 달린다퓨즈)은
mount --bind
사용자 공간에서처럼 작동합니다. (그러나 이것은 귀하의 질문에서 언급한 리디렉션과 반대입니다 /home
.)/fake-home
답변3
VFS는 이미 파일 시스템의 루트가 아닌 마운트를 허용합니다. fstab 항목에 또는 옵션 을 user
추가 하고 .users
vfs.usermount=1
/etc/sysctl
그러나 이들 중 어느 것도 chroot와 같은 제어 기능을 제공하지 않습니다. 이 bind
옵션은 권한을 변경하거나 동일한 파일 시스템 및 콘텐츠에 대한 두 번째 mtab 항목인 "대체" 액세스를 허용하지 않습니다. 번들 설치의 수정 사항은 원래 설치에 영향을 줍니다.
더 나아가기 전에 최종 목표를 명확히 하도록 하겠습니다.
답변4
mount --bind
mount_namespaces를 사용하면 다른 프로세스에서 사용자를 볼 수 없습니다 . 그러나 일반적 mount --bind
으로 루트 사용자에게만 해당됩니다(보안상의 이유로). 따라서 루트가 아닌 사용자에게 mount_namespaces를 유용하게 만들려면 먼저 다음을 사용해야 합니다.사용자 네임스페이스새 네임스페이스에서 "로컬 루트"가 되면 이 작업이 허용됩니다.
다음과 같이 셸에서 사용할 수 있습니다. 이 예에서는 chroot 디렉터리를 준비할 때 사용자 및 마운트 공간의 사용을 구체적으로 보여줍니다(이 chroot
작업은 일반적으로 권한이 부여됩니다).
unshare --user --map-root-user --mount-proc --pid --fork
mkdir -p newroot/dev
mount --rbind /dev newroot/dev
....other chroot preparation....
chroot newroot
su - user1
mount --rbind
디렉토리에 다른 마운트 지점이 포함되어 있는 경우(내 경우에는 그렇습니다) mount --bind
새 user&mount 네임스페이스에만 적용되기 때문에 (대신) 을 사용하고 있습니다 ./dev/
아마도 이에 대한 설명은 사용자가 일반적으로 권한이 없는 사용자가 볼 수 없는 것, 즉 "하위 설치"에 의해 숨겨진 하위 디렉토리를 볼 수 있는 방법이 없어야 한다는 것입니다. 베이스는 벗기지 마시고, --rbind
허용만 해주세요.