커널 : 네임 스페이스 지원


15

Linux 커널의 "네임 스페이스 지원"기능이 정확히 무엇을 의미하는지 궁금합니다. 커널 3.11.1 (현재 가장 안정적인 커널)을 사용하고 있습니다.

비활성화하기로 결정한 경우 시스템에 변경 사항이 있습니까?

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


5
네임 스페이스는 여기에 상당히 잘 설명되어 있습니다 : lwn.net/Articles/531114 (답변은 아닙니다. 왜냐하면 당신의 질문에 실제로 대답하지 않기 때문입니다 – 나는 당신에게 텍스트를 가리키고 있습니다)
derobert

답변:


21

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

더 큰 시스템에서 실행되는 가상 시스템을 컨테이너 라고합니다 . 컨테이너의 개념은 컨테이너 내부에서 실행되는 프로세스가 시스템의 유일한 프로세스라고 믿습니다. 특히, 컨테이너 내부의 루트 사용자에게는 컨테이너 외부의 루트 권한이 없습니다 (최근 충분한 버전의 커널에서만 적용됨).

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

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

네임 스페이스는 커널을 사용하여 네임 스페이스를 격리시킵니다. 이 작업은 매우 복잡하므로 보안 버그가 여전히있을 수 있습니다. 보안 버그의 위험은이 기능을 사용하지 않는 주된 이유입니다. 임베디드 장치를 위해 작은 커널을 만들 때이를 활성화하지 않는 또 다른 이유가 있습니다. 일반적인 서버 나 워크 스테이션에 설치하는 범용 커널에서 다른 성숙한 커널 기능과 마찬가지로 네임 스페이스를 활성화해야합니다.

네임 스페이스를 사용하는 애플리케이션은 여전히 ​​적습니다. 몇 가지가 있습니다 :

  • LXC 는 잘 정립되어 있습니다. 컨테이너를 제공하기 위해 cgroup 에 의존합니다 .
  • virt-sandbox 는 최신 샌드 박싱 프로젝트입니다.
  • 최신 버전의 Chromium 은 사용 가능한 경우 샌드 박싱에 네임 스페이스를 사용합니다.
  • uWSGI의 클러스터 응용 프로그램 프레임 워크 사용하는 네임 스페이스 개선 샌드 박싱합니다.

자세한 내용 은 Michael Kerrisk의 LWN 기사 시리즈 를 참조하십시오.


6

Linux 커널 네임 스페이스는 시스템 자원에 대한 액세스와 관련하여 다른 프로세스 그룹을 분리하는 데 사용되는 개념입니다. 예를 들어 두 개의 다른 PID 네임 스페이스에는 동일한 PID를 갖지만 완전히 다른 프로세스 이미지를 가진 프로세스가 포함될 수 있습니다. OS 수준 가상화에서 단일 커널이 동시에 여러 운영 체제를 실행하는 경우에 사용됩니다. 커널을 공유하기 때문에 모두 Linux 기반이어야하지만 배포 및 버전이 다를 수 있습니다. 예를 들어 LXC를 참조하십시오 .

systemd는 컨테이너 기능에 네임 스페이스를 사용할 수 있으므로 예를 들어 systemd 기반 시스템에서이를 비활성화 할 수 있습니다 . 따라서 사용중인 배포 및 시스템으로 수행하려는 작업에 따라 달라집니다.

거의 모든 커널 기능과 마찬가지로 일종의 사용자 공간 프로그램이 필요합니다. 특별한 파일을 통해 커널과 대화를 했더라도 (가능하지는 않지만) 특수 도구를 사용하는 것이 훨씬 좋습니다. 친숙한 API를 제공하십시오.


1

SELinux (MLS 또는 Strict) 사용 시스템에서 네임 스페이스 사용의 예를 제공합니다. 네임 스페이스는 일반적으로 각 사용자의 개인 /tmp및 / 또는 /home디렉토리 를 만드는 데 사용됩니다 . 이러한 디렉토리는 사용자, 동일한 레이블을 가진 사용자, 커널 및 특권 액세스 권한을 가진 사용자에게만 표시됩니다. 네임 스페이스가있는 /tmp디렉토리는 사용자의 SELinux-MLS 레이블과 일치하도록 SELinux-MLS로 레이블이 지정됩니다. 이 시나리오에서 /tmp사용자에게 표시 되는 디렉토리는 실제로 /tmp( /var/user-tmp) 이외의 위치에 마운트 될 수 있습니다 . 그러나 사용자 /tmp는 사용자의 활동으로 인해 생성 된 파일 만 볼 수 있습니다. 사용자는 /tmp다른 사용자의 제품인 파일을 볼 수 없습니다 .

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