바인드 마운트가 마운트 네임 스페이스 외부에 보이는 이유는 무엇입니까?


12

그래서 나는 리눅스의 마운트 네임 스페이스가 어떻게 작동하는지 다루려고합니다. 그래서 나는 약간의 실험을하고 두 개의 터미널을 열고 다음을 실행했습니다.

터미널 1

root@goliath:~# mkdir a b
root@goliath:~# touch a/foo.txt
root@goliath:~# unshare --mount -- /bin/bash
root@goliath:~# mount --bind a b
root@goliath:~# ls b
foo.txt

터미널 2

root@goliath:~# ls b
foo.txt

터미널 2에서 마운트가 어떻게 보이나요? 마운트 네임 스페이스의 일부가 아니기 때문에 디렉토리가 비어있는 것으로 예상했습니다. 또한 옵션을 전달 -o shared=no하고 사용 하려고했지만 동일한 결과를 얻었습니다.--make-privatemount

내가 뭘 놓쳤으며 어떻게 실제로 비공개로 만들 수 있습니까?


마운트는 시스템 전체이며 쉘 환경에만 국한되지 않습니다. 공유, 노예, 개인 및 바인딩 불가능은 당신이 생각하는 것이 아닙니다. 읽습니다 man mount.
cas

3
@cas : 동의 --make-private하지 않습니다. 그러나 마운트 네임 스페이스의 요점이 (시스템 전체가 아닌) 네임 스페이스가 아닌가?
FatalError

답변:


11

util-linux버전이 2.27 미만인 시스템 기반 배포판을 사용하는 경우이 직관적이지 않은 동작이 나타납니다. 커널 설정에 따라 CLONE_NEWNS플래그를 전파 하기 때문 shared입니다. 이 설정은 일반적 private이지만 systemd는 이것을로 변경합니다 shared. 현재 util-linux2.27하는 패치되었다 의 기본 동작 변경이 unshare사용하는 명령을 private보다 직관적으로 같은 기본 전파 동작으로.

해결책

<2.27 util-linux인 시스템 시스템에있는 경우 다음 명령 실행 한 루트 파일 시스템 다시 마운트해야합니다 unshare.

# unshare --mount -- /bin/bash
# mount --make-private -o remount /

> = 2.27 util-linux인 시스템 시스템을 사용 하는 경우 다시 마운트 할 필요없이 질문에 그대로 사용한 예에서 예상대로 작동해야합니다. 그렇지 않은 경우 : 마운트 네임 스페이스 전파를 개인용으로 강제 실행 --propagation private하려면 unshare명령에 전달하십시오.


0

이것은 우분투 (15.04 및 14.04)에서 작동하지 않았습니다. 그것은 페도라에서 일했습니다. 페도라 필요 여부 --make-private, 여부 확인 가능

고양이 / proc / self / mountinfo | grep 공유

공유되는 경우 다른 네임 스페이스에서 여전히 해당 마운트를 볼 수 있음을 의미합니다. 그런 다음 시스템 관련 문제입니다. --make-private를 사용하여 작동시킬 수 있습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.