--fork를 `nsenter -t'로 사용할 때 `unshare`의 하위 ID를 얻는 방법`?

--fork를 `nsenter -t'로 사용할 때 `unshare`의 하위 ID를 얻는 방법`?

를 사용하는 경우 올바른 pid 네임스페이스를 얻으려면 pid 가 아닌 subpid에 명령을 추가해야 합니다 unshare --pid --fork.nsenterunshare

다음과 같이 unshare의 pid를 얻을 수 있습니다.

unshare --pid --mount --fork --mount-proc  bash & 
echo PID: $!
fg

unshare하지만 올바른 네임스페이스를 입력하려면 자식의 pid(2914003)가 필요합니다 .

ps wwfuax | grep -A1 unshare 
2914002 pts/4    S      0:00  |           \_ unshare --pid --mount --fork --mount-proc bash
2914003 pts/4    S+     0:00  |               \_ bash

이것은 작동합니다: nsenter -t 2914003 이것은 작동하지 않습니다:nsenter -t 2914002

옵션이 좀 있었으면 좋겠 unshare --show-child-pid는데 그게 없네요.

공유되지 않은 하위 프로세스의 pid를 얻는 신뢰할 수 있는 방법이 있습니까?

답변1

가장 좋은 해결책은 프로세스 ID에 의존하지 않는 것입니다.

unshare 명령을 사용하여 네임스페이스를 생성하면 파일 시스템의 바인드 마운트에서 참조되는 영구 네임스페이스가 생성됩니다. 매뉴얼 페이지의 예를 따르면 이를 설정할 수 있습니다 unshare(1).

먼저 전파를 사용하여 마운트 지점을 설정해야 합니다 private.

mkdir /tmp/ns
mount --bind /tmp/ns /tmp/ns
mount --make-private /tmp/ns

그런 다음 네임스페이스에 대상 파일을 마운트하고 PID를 지정해야 합니다.

touch /tmp/ns/{mnt,pid}

이제 다음 명령을 사용하여 네임스페이스를 만듭니다 unshare.

unshare --pid=/tmp/ns/pid --mount=/tmp/ns/mnt --fork --mount-proc  bash

이러한 참조 마운트 지점을 사용하면 프로세스 ID를 몰라도 네임스페이스에 들어갈 수 있습니다.

nsenter --mount=/tmp/ns/mnt --pid=/tmp/ns/pid

완료되면 정리하는 것을 잊지 마세요.

umount /tmp/ns/{mnt,pid}

관련 정보