두 개의 네트워크 네임스페이스(ns1 및 ns2)를 성공적으로 생성하고 veth 연결을 통해 연결했습니다. 그들은 서로 잘 핑할 수 있고 SSH를 통해 서로 연결할 수도 있습니다(Sshd가 시작된 경우).
지금 내가 원하는 것은 ns1(vi라고 합시다) 내에서 볼 수 없거나 적어도 ns2에서 수정/종료할 수 없는 일부 프로세스를 시작하는 것입니다. 그게 가능합니까?
나는 사용하려고
unshare -p vi
ns1에서는 여전히 ns2에서는 종료됩니다. 전역/기본 네트워크 네임스페이스에서 파생되었기 때문에 전역/기본 네트워크 네임스페이스에서 종료할 수 있다는 점을 이해할 수 있지만 ns2는 ns1 내의 프로세스를 종료할 수 없어야 합니다. 적어도 그것이 내가 달성하려는 것입니다. 어떤 도움이라도 대단히 감사하겠습니다.
답변1
Linux 네임스페이스에 대해 알아야 할 몇 가지 사항이 있습니다.
- 각 네임스페이스 유형은 특정 항목 하나만 격리합니다. 예를 들어 네트워크 네임스페이스는 네트워크만 격리합니다.
- 많은 네임스페이스 유형에는 일종의 상속 관계가 있습니다(네트워크 네임스페이스가 완전히 격리되는 것은 일반적이지 않습니다).
사용자 프로세스가 서로 보지 못하도록 하려면 작업 도구는 "pid 네임스페이스"입니다.
격리된 환경을 생성하기 위해 cgroup과 함께 다양한 네임스페이스 유형을 사용하는 lxc와 같은 것을 고려해 보는 것이 좋습니다.
답변2
Linux 네트워크 네임스페이스는 Linux PID 네임스페이스와 다르며 완전히 다른 시스템/운영 체제 리소스 집합을 격리하기 때문에 이를 명확하게 구분해야 합니다.
지금은 그 과정을 말한다.가입하다또는재연결특정 네트워크 네임스페이스 및 다른 특정 PID 네임스페이스와 같은 네임스페이스가 있습니다. 프로세스는 항상 많은 네임스페이스와 연결되지만 각 유형(네트워크, 마운트, PID, 사용자...) 중 하나만 연결됩니다.
"프로세스 종료"에 관해 이야기할 때 이는 네트워크 네임스페이스에는 전혀 적용되지 않습니다.네트워크 네임스페이스는 IP 스택, 네트워크 인터페이스, 주소 구성, 라우팅 구성 등의 격리를 제공합니다..
프로세스를 "보고" 죽이는 것은 액세스 권한과 PID 공간의 문제이므로 이는 다음과 관련이 있습니다.PID 네임스페이스대신에. "See"는 다음과도 관련이 있을 수 있습니다.마운트 네임스페이스그들을 볼 때 /proc
.