커널: 네임스페이스 지원

커널: 네임스페이스 지원

Linux 커널의 "네임스페이스 지원" 기능이 정확히 무엇을 의미하는지 알고 싶습니다. 저는 커널 3.11.1(현재 최신 안정 커널)을 사용하고 있습니다.

비활성화하기로 결정하면 시스템에 변경 사항이 표시됩니까?

누군가 네임스페이스를 사용하기로 결정한 경우 NAMESPACES=Y커널에서 컴파일하는 것만으로도 충분합니까, 아니면 사용자 공간 도구도 필요합니까?

답변1

즉, 네임스페이스는 더 큰 Linux 시스템 내에 가상 Linux 시스템을 구축하는 방법을 제공합니다. 이는 권한이 없는 프로세스로 실행되는 가상 머신을 실행하는 것과 다릅니다. 즉, 가상 머신은 호스트에 단일 프로세스로 표시되는 반면, 네임스페이스 내에서 실행되는 프로세스는 여전히 호스트 시스템에서 실행됩니다.

더 큰 시스템 내에서 실행되는 가상 시스템을 호출합니다.컨테이너. 컨테이너의 개념은 컨테이너 내부에서 실행되는 프로세스가 자신이 시스템의 유일한 프로세스라고 생각한다는 것입니다. 특히, 컨테이너 내부의 루트 사용자는 컨테이너 외부의 루트 권한이 없습니다(이는 충분히 새로운 커널 버전에서만 해당됩니다).

네임스페이스는 한 번에 하나의 기능을 가상화합니다. 네임스페이스 유형의 몇 가지 예는 다음과 같습니다.

  • 사용자 네임스페이스- 이를 통해 프로세스는 네임스페이스 내부와 외부에서 다른 사용자로 실행되는 것처럼 동작할 수 있습니다. 특히 네임스페이스 내에서 UID 0으로 실행되는 프로세스는 동일한 네임스페이스에서 실행되는 프로세스에 대해서만 슈퍼유저 권한을 갖습니다.
    Linux 커널 3.8부터 권한이 없는 사용자가 사용자 네임스페이스를 생성할 수 있습니다. 이를 통해 일반 사용자는 루트에 예약된 기능(예: 라우팅 테이블 변경 또는 기능 설정)을 사용할 수 있습니다.
  • PID 네임스페이스— PID 네임스페이스 내의 프로세스는 네임스페이스 외부의 프로세스를 종료하거나 추적할 수 없습니다.
  • 마운트 네임스페이스--이를 통해 프로세스는 파일 시스템에 대한 자체 보기를 가질 수 있습니다. 보기는 파일 시스템의 특정 부분을 숨기고 특정 부분을 재구성하여 디렉토리 트리가 다른 위치에 표시되도록 하는 부분 보기일 수 있습니다. 마운트 네임스페이스는 기존 Unix 기능을 요약합니다.chroot, 프로세스를 특정 하위 트리로 제한할 수 있습니다.
  • 네트워크 네임스페이스— 네트워크 리소스(네트워크 장치)를 분리하여 프로세스 격리를 강화합니다.

네임스페이스는 커널을 사용하여 네임스페이스 간의 격리를 제공합니다. 이 문제를 해결하는 것은 매우 복잡하므로 보안 허점이 여전히 존재할 수 있습니다. 이 기능을 활성화하지 않는 주된 이유는 보안 취약점의 위험 때문입니다. 이를 활성화하지 않는 또 다른 이유는 임베디드 장치용 작은 커널을 만드는 경우입니다. 일반적인 서버나 워크스테이션에 설치된 일반 커널에서는 다른 완전한 커널 기능과 마찬가지로 네임스페이스를 활성화해야 합니다.

네임스페이스를 사용하는 애플리케이션은 아직 거의 없습니다. 다음은 일부입니다:

  • LXC완벽해요. 그것은에 달려있다cgroup용기를 제공하세요.
  • 가상 샌드박스업데이트된 샌드박스 프로젝트입니다.
  • 최신 버전크롬가능한 경우 샌드박스에 네임스페이스를 사용할 수도 있습니다.
  • 이것uWSGI클러스터 애플리케이션 프레임워크네임스페이스 사용샌드박스를 개선하는 데 사용됩니다.

바라보다Michael Kerrisk의 LWN 기사 시리즈더 많은 정보를 알고 싶습니다.

답변2

Linux 커널 네임스페이스는 시스템 리소스에 액세스하기 위해 프로세스 그룹을 다른 프로세스로부터 격리하는 데 사용되는 개념입니다. 예를 들어 두 개의 서로 다른 PID 네임스페이스에는 PID는 동일하지만 프로세스 이미지가 완전히 다른 프로세스가 포함될 수 있습니다. 일반적으로 단일 코어가 다양한 운영 체제를 동시에 실행하는 OS 수준 가상화에 사용됩니다. 모든 운영 체제는 모두 Linux 기반이어야 하지만(분명히 커널을 공유하므로) 배포판과 버전이 다를 수 있습니다. 예시 보기LXC.

systemd가 네임스페이스를 사용할 수 있으므로 systemd 기반 시스템에서 이를 비활성화하는 것을 볼 수 있습니다.컨테이너 속성. 따라서 사용 중인 배포판과 시스템으로 수행할 작업에 따라 많은 것이 달라집니다.

거의 모든 커널 기능과 마찬가지로 일종의 사용자 공간 프로그램이 필요합니다. 특수 파일을 통해 커널과 통신하더라도(가능한지는 잘 모르겠습니다) 일반적으로 다음과 같은 특수 도구에 의존하는 것이 더 좋습니다. 프런트엔드 친화적인 API를 제공합니다.

답변3

SELinux가 활성화된 시스템(MLS 또는 Strict)에서 네임스페이스 사용의 예를 들어보세요. 네임스페이스는 /tmp각 사용자에 대해 별도의 디렉터리 및/또는 디렉터리를 만드는 데 사용되는 경우가 많습니다 . /home이러한 디렉토리는 사용자, 동일한 레이블을 가진 사용자, 커널 및 액세스 권한이 있는 사용자에게만 표시됩니다. 네임스페이스 /tmp디렉터리에는 사용자의 SELinux-MLS 레이블과 일치하도록 SELinux-MLS 레이블이 지정됩니다. 이 경우 /tmp, 사용자가 보는 디렉토리는 실제로 /tmp( ) /var/user-tmp가 아닌 다른 곳에 마운트되어 있을 수 있습니다. 그러나 사용자는 /tmp사용자 활동의 결과로 생성된 파일만 볼 수 있습니다. 사용자는 /tmp다른 사용자가 만든 파일을 절대 볼 수 없습니다 .

관련 정보