namespaces
- 커널 리소스를 분할하여 한 프로세스 집합은 한 리소스집합을, 다른 프로세스 집합은 다른 리소스 집합을 볼 수 있도록 하는 Linux커널의 기능
- 핵심 기능은 프로세스를 서로 격리하는 것
- 컨테이너의 기반이 되는 기술중 하나로, 리소스 분리를 강제하는데 사용됨
종류
user namespace
- 프로세스에 할당할 수 있는 고유한 사용자 ID 및 그룹 ID 집합이 존재함
- 프로세스가 다른 사용자 스페이스에 루트권한을 갖지 않고도, 해당 사용자 스페이스 내에서 루트 권한을 가질 수 있음
process ID (PID) namespace
- 다른 네임스페이스의 PID집합과 독릭접인 프로세스 집합을 프로세스에 할당함
- 새 네임스페이스에서 생성된 첫번째 프로세스는 PID 1을 가지며, 하위 프로세스는 후속 PID를 할당받음
- 자식 프로세스가 자체 PID 네임스페이스를 사용하여 생성된 경우, 해당 네임스페이스의 PID 1과 부모 프로세스의 네임프로세스에 있는 PID를 가짐
network namespce
- 독립적인 네트워스택을 가짐
- 자체 private routing table, IP 주소 집합, 소켓 목록(socket list), 연결 추적 테이블(connect tracking table), 방화벽 및 기타 네트워크 관련 리소스를 가짐
mount namespace
- 네임스페이스의 프로세스가 볼 수 있는 독립적인 mount point list가 존재함
- 호스트 파일 시스템에 영향을 주지 않고, mount namespace에서 파일 시스템을 마운트 및 마운트 해제할 수 있음
interprocess communication(IPC) namespace
- 자신만의 IPC 자원을 가짐
UNIX Time-Sharing(UTS) namespace
- 단일 시스템에서 서로다른 호스트 및 도메인 이름을 다른프로세스에서 사용하는 것처럼 보이게 할 수 있음
cgroup
- 프로세스 list들의 CPU, 메모리, 디스크I/O, 네트워크 등 리소스 사용량을 제한, 설명(account for) 격리하는 Linux 커널의 기능
- 프로세스 또는 프로세스 집합에서 특정 주요 리소스에 엑세스하거나 사용할 수 있는 양을 제어함
- 컨테이너에서 함께 제어해야 하는 에러 프로세스가 실행되는 경우가 많기에, cgroup은 컨테이너에서 핵심 구성요소임
Resource limits
- 하나의 프로세스가 특정한 자원을 얼마나 가능한지 제한할 수 있음
Prioritization
- 리소스가 경합이 있을때, 다른 cgroup의 프로세스에 비해 사용할 수 있는 자원의 양을 제한할 수 있음
Accounting
- cgroup level에서 자훤 제한을 모니터링하고 보고할 수 있음
Control
- 하나의 커맨드로 하나의 cgroup내의 모든 프로세스의 상태를 변경 가능함
V1 vs V2
v2의 가장 큰 변화는 간소화된 트리 아키텍처, cgroup 계층 구조의 새로은 기능 및 인터페이스, rootless 컨테이너의 더 나은 수용임
chroot(Change Root Directory)
- 루트 디렉토리를 변경하는 명령어
- 해당 프로세스는 지정한 루트 디렉토리 상위로 올라가지 못함
|
|
- 루트로 사용할 디렉토리명을 지정하고, 이 루트를 기반으로 실행할 프로세스의 경로를 지정
Linux capabilities
- root권한을 세밀하게 분할하여, 특정 권한만을 프로세스에 부여할 수 있게함
- ex) 네트워크 소켓을 열 수 있는권한, 시스템 시간을 변경할 수 있는 권한
- 사용자가 권한이 없더라도, 프로세스 실행 권한이 있다면, 해당 권한으로 프로세스를 실행 가능
ubuntu에서 테스트를 위해
apt install libcap2-bin
필요
Capability | 의미 |
---|---|
CAP_CHOWN | 사용자가 파일의 UID/GID를 임의로 변경할 수 있도록 허용 |
CAP_KILL | 다른 사용자에게 속한 프로세스에 신호를 보낼 수 있도록 허용 |
CAP_SETUID | UID를 변경할 수 있도록 허용 |
CAP_SETPCAP | 실행 중인 프로세스의 Capability를 설정할 수 있도록 허용 |
CAP_NET_ADMIN | 인터페이스 구성과 같은 다양한 네트워크 관련 작업을 허용 |
CAP_NET_RAM | RAW 와 PACKET 소켓의 사용을 허용 |
CAP_SYS_CHROOT | chroot 호출 허용 |
CAP_SYS_ADMIN | 파일 시스템 마운트를 포함한 시스템 관리 작업을 허용 |
CAP_SYS_PTRACE | strace를 사용하여 프로세스를 디버그할 수 있도록 허용 |
CAP_SYS_MODULE | 커널 모듈의 로딩을 허용 |
Union FileSystem
- 원본 소스를 수정하지 않고, 여러 디렉토리의 콘텐츠를 하나로 병합하는 것처럼 보이게하는 파일 시스템의 유형
- 참고
https://blog.nginx.org/blog/what-are-namespaces-cgroups-how-do-they-work
https://cumulus.tistory.com/154
https://blog.naver.com/alice_k106/221530340759