Linux에서 네임스페이스를 마운트하는 데 이상한 문제가 발생했습니다. Fedora 16에서 커널 3.2.3-2를 실행하는 X86_64라는 두 개의 시스템이 있습니다. tmpfs
다음을 사용하여 생성된 하위 네임스페이스에 파일 시스템을 마운트 하려고 합니다 unshare
.
unshare -m /bin/bash
매뉴얼 페이지에서:
mount namespace
mounting and unmounting filesystems will not affect rest of the
system (CLONE_NEWNS flag),
한 시스템에서는 예상대로 작동합니다. 즉, 이것으로 시작한다면:
# ls /mnt
file1 file2 file3
그런 다음 하위 네임스페이스에 파일 시스템을 마운트합니다 tmpfs
./mnt
# PS1="child# ' unshare -m /bin/bash
child# mount -t tmpfs tmpfs /mnt
의 내용은 /mnt
하위 네임스페이스에서 마스크됩니다.
child# ls /mnt
child#
그러나 상위 항목에는 계속 표시됩니다.
# ls /mnt
file1 file2 file3
두 번째 시스템에서는 정확히 동일한 명령 순서로 인해 상위 및 하위 네임스페이스 모두에서 마운트가 표시됩니다. 즉, 이 unshare
명령은 실제로 별도의 마운트 네임스페이스를 생성하지 않는 것 같습니다.
두 시스템 간의 실질적인 차이점은 모르겠습니다. 하나는 데스크탑 환경을 실행하고 있고 다른 하나는 그렇지 않습니다. SELinux는 두 시스템 모두에서 비활성화됩니다.
이러한 동작 차이의 원인이 무엇인지에 대한 제안 사항을 찾고 있습니다.
답변1
샌드박스 서비스가 실행 중인지 확인하세요.
systemctl status sandbox.service
그렇다면 종료하고 다시 시작한 후 다시 시도하십시오. 이것은 나에게 효과적입니다.
답변2
@John 답변을 얻었지만 두 시스템이 다르게 작동하는 이유를 반영하기 위해 여기에 몇 가지 추가 문서를 제공하고 싶었습니다.
스크립트 sandbox
()는 다음 명령을 실행하여 시스템의 모든 설치에 플래그를 반복적으로 설정합니다 /etc/rc.d/init.d/sandbox
.shared
mount --make-rshared /
스크립트의 주석은 sandbox
다음과 같습니다.
설명: pam_namespace를 사용하려는 샌드박스, xguest 및 기타 응용 프로그램은 시작 시 이 스크립트를 실행해야 합니다. 서비스 스크립트는 실제로 서비스를 실행하지 않고 별도의 네임스페이스를 시작하는 모든 애플리케이션에서 /를 공유하도록 설정합니다. sandbox, xguest 또는 pam_namespace를 사용하지 않는 경우 이 서비스를 끌 수 있습니다.
여기에 참조된 도구는 GUI 애플리케이션이므로 이 sandbox
스크립트는 실행 수준 5에서만 활성화됩니다. 제가 작업 중인 두 시스템 중 하나는 데스크탑입니다. 따라서 런레벨 5에서 부팅하고 sandbox
기본적으로 스크립트를 가져옵니다. 반면 다른 하나는 런레벨 3으로 부팅되는 헤드리스 서버입니다.
답변3
같은 문제가 계속 발생합니다. 하나 먹어봐
mount --make-private /mnt
전에
mount -t tmpfs tmpfs /mnt
또한 seunshare 명령의 소스 코드를 보고 명령이 어떻게 실행되는지 확인하세요.