created : Sat, 02 Jul 2022 03:27:34 +0900
modified : Sat, 02 Jul 2022 04:49:19 +0900
LXC 란
- 원문
- 2008년부터 개발 시작
- 분리된 커널을 돌리고 모든 하드웨어를 시뮬레이팅하는 것을 오버헤드 없이 하는 것을 목표로 함.
- Unprivileged containers 는 어떠한 권한 없이 돌아가는 컨테이너를 의미.:
- UID와 GID를 격리
- 이를 위해서 서로 다른 범위를 사용. host의 100000번 이후를 0으로 내부적으로 매핑
- 이러한 것들은 몇가지 제약을 가져왔고 아래 3가지 setuid code를 이용해 이를 극복:
- lxc-user-nic
- newuidmap
- newgidmap
- 일반적으로 LXC의 목표는 커널상의 모든 보안 기능을 사용 가능하게 하는데에 있음. 이를 통해서 LXC는 그들의 요구에 따라 복잡하게 튜닝할수 있게 함.
- LXC는 모든 권한 없이도 잘 돌아가지만 일반적으로 몇가지 유용한 것들은 꽤나 제한적임. 대표적인 2가지 문제는 Network와 Usernamespaces 임.:
- Network : host의 network namespace는 격리 수준을 낮추고 attack vector를 증가시킴. host와 container가 똑같은 network namespace를 사용한다는 것은 sysfs mount가 거부될수 있음을 의미함.
- user namespaces는 보안 증가에는 효율적이지만 privileged helper에 의하지 않고 unprivileged 유저가 container에 그들의 uid를 매핑하는 게 허락되있음. POSIX 시스템에서는 65536 UIDs와 GIDs 로도 모든 기능을 사용 가능한게 보장되어 있음.
lxc가 namespace와 cgroup 을 어떻게 사용하는가:
Docker는 LXC를 사용하는가?