Linux에서 마운트 네임스페이스 보기/조작

Linux에서 마운트 네임스페이스 보기/조작

임의 프로세스의 마운트 네임스페이스를 보거나 조작할 수 있는 방법이 있습니까?

예를 들어 실행 중인 Docker 컨테이너에는 NFS 서버에 대한 로컬 마운트가 있습니다. 컨테이너 내부에서는 볼 수 있지만 외부에서는 호스트가 이에 대해 아무것도 모릅니다. 네트워크 네임스페이스의 경우 이는 작동합니다. 예를 들어배관

그러나 마운트 네임스페이스의 경우 이에 대해 아무것도 표시되지 않습니다. 이러한 설치를 보고 새 설치를 조작하거나 생성할 수 있는 노출된 API 또는 sysfs 계층이 있습니까?

답변1

예. 당신은 그것을 보거나 스위치를 /proc/$PID/mountinfo사용할 수 있습니다 . 그것에 대해 말하는 내용은 다음과 같습니다.findmnt -Nfindmnt --help

  • -N, --task <tid>
    • 대체 네임스페이스( /proc/<tid>/mountinfo파일) 사용

findmntPROPAGATION또한 이 정보를 정확하게 보고하는 필드 인 플래그 도 추적됩니다 mountinfo. 이는 프로세스가 어떤 설치를 공유하는지를 나타냅니다.

nsenter또한 올바른 권한이 있는 경우 언제든지 원하는 모든 종류의 네임스페이스를 사용할 수 있습니다 .

 nsenter --help
Usage:
 nsenter [options] <program> [args...]

Options:
 -t, --target <pid>     target process to get namespaces from
 -m, --mount [=<file>]  enter mount namespace
 -u, --uts   [=<file>]  enter UTS namespace (hostname etc)
 -i, --ipc   [=<file>]  enter System V IPC namespace
 -n, --net   [=<file>]  enter network namespace
 -p, --pid   [=<file>]  enter pid namespace
 -U, --user  [=<file>]  enter user namespace
 -S, --setuid <uid>     set uid in user namespace
 -G, --setgid <gid>     set gid in user namespace
 -r, --root  [=<dir>]   set the root directory
 -w, --wd    [=<dir>]   set the working directory
 -F, --no-fork          do not fork before exec'ing <program>

 -h, --help     display this help and exit
 -V, --version  output version information and exit

For more details see nsenter(1).

답변2

커널은 또한 pid/tid가 지정된 마운트 네임스페이스의 특정 경우에 대한 간단한 직접 액세스를 제공합니다./proc/<pid>/root/.

이는 모든 마운트 지점을 포함하는 프로세스의 루트( ) 디렉터리에 대한 링크입니다 /(심볼릭 링크로 표시되지만 실제로 는 삭제된 파일에 대한 심볼릭 링크와 마찬가지로 /프로세스'로 확인됩니다 ).//proc/<pid>/fd/

예를 들어 호스트 및/또는 컨테이너에 사용할 수 있는 환경 및 명령이 없는 경우(예: 셸 없음) 호스트 및/또는 컨테이너 간에 파일을 복사하는 것이 편리합니다. 를 사용할 때는 nsenter적어도 나중에 포크/실행에 의존하지 않는 특수 소프트웨어 없이는 불가능합니다 .

관련 정보