제
4
장
컨테이너 격리
64
제
3
장에서 다룬
cgroups
이다. 이 구성 요소들을 잘 이해하면 컨테이너 안에서 실행되는 응용
프로그램들이 어느 정도나 잘 보호되는지 감을 잡을 수 있다.
이런 구성 요소들의 일반적인 개념은 상당히 간단하지만, 이들이 리눅스 커널의 다른 기능
들과 함께 연동되는 방식은 꽤 복잡할 수 있다. 이름공간과 몇 가지 리눅스 능력(
capability
)
들, 그리고 파일 시스템들의 상호작용을 교묘하게 악용해서 컨테이너에서 탈출할 수 있는 취약
점들이 보고된 바 있다 (이를테면
runc
와
LXC
모두에서 발견된 심각한 취약점인
CVE
-
2019
-
5736
(
https
://
oreil
.
ly
/
NtcRv
) 등 ).
4.1
리눅스 이름공간
cgroups
가 프로세스가 사용할 수 있는 자원을 제한한다면,
이름공간
(
namespace
)은 프로세
스가 “볼(
see
)” 수 있는 것들을 제한한다. 프로세스를 어떤 이름공간에 넣으면 프로세스는 그
이름공간이 허용하는 것들만 볼 수 있게 된다.
이름공간의 기원은
Plan
9
(
https
://
oreil
.
ly
/
BCi9W
) 운영체제로 거슬러 올라간다. 그 운영
체제가 나왔을 당시 대부분의 운영체제에서 모든 파일은 하나의 ‘이름 공간(
name
space
)’에
속했다. 유닉스
Unix
시스템들은 파일 시스템 마운팅을 지원했지만, 모든 파일 시스템은 시스템
의 모든 파일 이름으로 이루어진 동일한 시스템 전역 뷰에 마운팅되었다.
Plan
9
에서 각 프로
세스는 고유한 ‘이름 공간’ 추상을 가진 한 프로세스 그룹에 ...