상세 컨텐츠

본문 제목

PID 네임스페이스

운영 체제(OS)/리눅스(Linux)

by Pyidros 2024. 3. 11. 18:17

본문

PID 네임스페이스와 Mount 네임스페이스의 차이점

  • PID 네임스페이스프로세스 식별 번호(PID)의 격리에 초점을 맞춥니다. 각각의 네임스페이스에서는 PID가 1부터 시작하여 독립적인 프로세스 ID 공간을 가집니다. 이를 통해 여러 개의 격리된 프로세스 그룹을 운영할 수 있으며, 컨테이너와 같은 기술에서 중요하게 사용됩니다.
  • Mount 네임스페이스파일 시스템 마운트 포인트의 격리에 초점을 맞춥니다. 이를 통해 각 네임스페이스는 독립적인 파일 시스템 뷰를 가질 수 있으며, 마운트 및 언마운트 작업이 다른 네임스페이스에 영향을 주지 않습니다.

장점과 단점

  • PID 네임스페이스의 장점:
    • 프로세스 격리: 각 컨테이너 또는 격리된 환경에서 독립적인 프로세스 관리가 가능합니다.
    • 보안 강화: 공격자가 시스템의 다른 부분에 영향을 미치기 어렵게 만듭니다.
    • 자원 관리: 특정 네임스페이스 내에서 프로세스를 관리하고 제어할 수 있습니다.
  • PID 네임스페이스의 단점:
    • 복잡성 증가: 네임스페이스를 관리하고 구성하는 것은 복잡할 수 있으며, 시스템의 이해도를 요구합니다.
    • 호환성 문제: 일부 기존 애플리케이션은 PID 네임스페이스 격리 환경에서 예상대로 작동하지 않을 수 있습니다.

 

설정과 생성 과정

unshare -pmif 

unshare -pmif 명령어에 사용된 각 옵션의 의미는 다음과 같습니다:

-p: PID (Process ID) 네임스페이스를 생성합니다. 이 옵션을 사용하면 새로운 프로세스 ID 네임스페이스가 만들어지며, 
이 네임스페이스 안에서 생성된 프로세스들은 고유한 PID 공간을 가집니다. 따라서 같은 PID를 가지는 프로세스가 다른 네임스페이스에서 동시에 존재할 수 있습니다.

-m: 마운트(Mount) 네임스페이스를 생성합니다. 이를 통해 파일 시스템 마운트 포인트의 격리가 가능해지며, 네임스페이스 
내부에서 수행된 마운트 작업은 다른 네임스페이스에 영향을 미치지 않습니다.

-i: IPC (Inter-Process Communication) 네임스페이스를 생성합니다. IPC 네임스페이스는 프로세스 간 통신 
리소스(예: 메시지 큐, 세마포어, 공유 메모리 등)를 격리합니다.

-f: unshare 명령어 실행 후 새로운 프로세스(일반적으로 쉘)를 fork 합니다. 이 옵션이 없으면 unshare는 새 네임스페이스를 
생성한 후에도 현재 프로세스(unshare 명령어를 실행한 쉘 또는 스크립트) 내에서 계속 실행됩니다. -f 옵션을 사용하면, 
새 네임스페이스 내에서 새로운 프로세스가 시작되고, 이 프로세스가 새 네임스페이스의 "root" 프로세스가 됩니다.

결론적으로, unshare -pmif 명령어는 새 PID 네임스페이스, 마운트 네임스페이스, IPC 네임스페이스를 동시에 생성하고, 
이 세 가지 네임스페이스가 적용된 새로운 프로세스(보통 새 쉘)를 fork하여 실행하는 것을 의미합니다. 
이를 통해 격리된 환경에서 프로세스를 실행할 수 있으며, 컨테이너와 같은 기술의 기반 기능 중 하나로 사용됩니다.

 

그리고 나서 

PID가 1로 주어진것을 확인 할 수 있습니다.

'unshare'로 인해 생성된 새로운 PID 네임스페이스에서 이 PID는 다를 수 있습니다.

 

ps aux | head -n5

 

시스템에서 실행 중인 프로세스 목록의 상위 5개를 출력합니다. 새로운 네임스페이스에서는 볼 수 있는 프로세스가 제한될 수 있습니다.

 

ls /proc

 

/proc 디렉토리의 내용을 나열합니다. /proc은 시스템 정보와 실행 중인 프로세스에 대한 정보를 포함하는 가상 파일 시스템입니다.

 

mount -t proc none /proc

 

새로운 네임스페이스에 맞게 /proc 파일 시스템을 새롭게 마운트합니다. 이렇게 함으로써 새로운 PID 네임스페이스에서 실행 중인 프로세스만 /proc을 통해 볼 수 있습니다.

 

ps aux | head -n5 (후속 단계)

 

/proc을 새롭게 마운트한 후에 실행 중인 프로세스 목록의 상위 5개를 다시 출력합니다. 이제 이 목록은 새로운 PID 네임스페이스 내의 프로세스만 보여줍니다.

 

이 과정을 통해, 사용자는 리눅스의 네임스페이스 기능을 이용해 시스템의 나머지 부분과 독립적으로 동작하는 격리된 환경을 만들고, 이 환경 내에서 실험하거나 특정 작업을 수행할 수 있습니다. 이는 컨테이너와 같은 가상화 기술의 기반 메커니즘 중 하나입니다.

관련글 더보기