리눅스 LXC vs FreeBSD 감옥


62

보안, 안정성 및 성능 측면에서 LXC (Linux 컨테이너)FreeBSD의 감옥 사이에 눈에 띄는 차이점이 있습니까?

처음에는 두 가지 접근 방식이 매우 비슷합니다.


1
LXC는 다소 새로운 기술이므로 감옥에서 더 나은 보안과 안정성을 기대할 수 있습니다. 성능에 대한 추측조차도 아닙니다. 예를 들어 selinux를 사용하여 완화 할 수있는 LXC의 알려진 보안 문제가 있습니다. 그래도 개인적으로 LXC를 좋아합니다.
Pavel Šimerda

1
@ PavelŠimerda 오늘 방금 LXC에 대해 들었지만 Heroku와 아마도 Google App Engine이 이미 LXC를 사용하고 있다는 사실을 알게 되었기 때문에 놀랐습니다.
Philipp Claßen

3
LXC에 부딪쳤다면 보닛 아래에서 LXC를 사용하는 Docker를 살펴보십시오. docker.io/the_whole_story
Kev

1
Docker는 더 이상 lxc를 사용하지 않습니다.

1
@nwildner 더 이상 liblxc를 사용하지 않지만 정확히 동일한 개념 인 커널 네임 스페이스를 사용합니다.
0xC0000022L

답변:


101

여기에 사용 된 이름에 관계없이 두 가지 모두 특정 문제에 대한 해결책 입니다. 기존 Unix chroot 보다 더 나은 분리 솔루션 입니다. 운영 체제 수준의 가상화, 컨테이너, 영역 또는 "스테로이드가있는 chroot"는 사용자 공간 분리 개념은 동일하지만 기능이 다른 이름 또는 상업용 제목입니다.

Chroot는 설치 및 빌드 시스템을 테스트하는 도구로 1982 년 3 월 18 일 4.2 BSD 릴리스 몇 달 전에 소개 되었지만 오늘날에도 여전히 결함이 있습니다. chroot의 첫 번째 목표는 새로운 루트 경로 만 제공하는 것이 었으므로 분리 또는 제어해야하는 시스템의 다른 측면 (네트워크, 프로세스 뷰, I / O 처리량)이 밝혀졌습니다. 첫 번째 컨테이너 (사용자 수준 가상화)가 나타납니다.

두 기술 (FreeBSD Jails 및 LXC)은 사용자 공간 격리를 사용하여 또 다른 보안 계층을 제공합니다. 이 구획화는 결정된 프로세스가 동일한 호스트의 동일한 컨테이너에있는 다른 프로세스와 만 통신하고 "외부"통신을 달성하기 위해 네트워크 자원을 사용하는 경우이 컨테이너가 할당 한 인터페이스 / 채널로 모두 전달됩니다. 있다.

풍모

FreeBSD 감옥 :

  • 4.0 이후 FreeBSD의 기능이기 때문에 안정적인 기술로 간주됩니다.
  • 감옥을 복제하고 감옥 템플릿 을 만들어 더 많은 감옥을 쉽게 배치 할 수있는 시점에서 ZFS 파일 시스템을 최대한 활용 합니다. 좀 더 ZFS 광기 ;
  • 잘 문서화 되고 진화하는 ;
  • 계층 적 감옥을 사용하면 감옥 안에 감옥을 만들 수 있습니다 (우리는 더 깊이 가야합니다!). allow.mount.zfs더 많은 힘을 얻기 위해 결합하고 children.max최대 어린이 감옥을 정의하는 것과 같은 다른 변수 .
  • rctl (8) 은 감옥 (메모리, CPU, 디스크 등)의 자원 제한을 처리합니다.
  • FreeBSD 교도소는 Linux 사용자 공간을 처리합니다 .
  • 와 함께 네트워크 격리 vnet, 각 교도소는 자체 네트워크 스택, 인터페이스, 주소 지정 및 라우팅 테이블을 가질 수 있습니다;
  • nullfs 실제 서버에있는 폴더와 감옥 내부에 폴더를 연결하는 데 도움이됩니다.
  • 대량 배치 및 교도소 관리를 돕는 ezjail 유틸리티;
  • 많은 커널 튜너 블 ( sysctl). security.jail.allow.*매개 변수는 해당 감옥의 루트 사용자의 조치를 제한합니다.
  • 아마도 FreeBSD 교도소는 가까운 시일 내에 라이브 마이그레이션 과 같은 VPS 프로젝트 기능 중 일부를 확장 할 것입니다.
  • ZFS 및 Docker 통합을 실행하는 데 약간의 노력이 있습니다 . 아직 실험 중입니다.
  • FreeBSD 12 는 감옥 내부의 bhyve와 감옥 내부의 pf를 지원하여 해당 도구에 대한 추가 격리를 만듭니다.
  • 지난 몇 년 동안 많은 흥미로운 도구가 개발되었습니다. 그들 중 일부는 이 블로그 게시물 에 색인되어 있습니다.
  • 대안 : FreeBSD VPS 프로젝트

리눅스 컨테이너 (LXC) :

  • 새로운 "커널"기술이지만 큰 기술 (특히 Canonical)에 의해 승인되고 있습니다.
  • LXC 1.0부터 권한이없는 컨테이너는 컨테이너 내부의 보안을 강화합니다.
  • 컨테이너 내부의 UID 및 GID 매핑;
  • IPC, 마운트, pid, 네트워크 및 사용자를 분리하기위한 커널 네임 스페이스 이러한 네임 스페이스는 분리 된 방식으로 처리 할 수 ​​있으며 다른 네트워크 네임 스페이스 를 사용하는 프로세스가 스토리지와 같은 다른 측면에서 반드시 분리 될 필요는 없습니다.
  • 자원을 관리하고 그룹화하기위한 제어 그룹 (cgroup). CGManager 가이를 달성하는 사람입니다.
  • 컨테이너가 액세스 할 수있는 커널 기능을보다 효과적으로 적용하기위한 Apparmor / SELinux 프로파일 및 커널 기능. Seccomp는 lxc 컨테이너에서도 사용 가능하여 시스템 호출을 필터링합니다. 다른 보안 측면은 여기에 있습니다 .
  • 라이브 마이그레이션 기능 개발 중 docker / lxc는 사용자 공간 프로세스 일시 중지, 스냅 샷, 마이그레이션 및 통합 -ref1 , ref2 를 처리해야하기 때문에 언제 프로덕션에 사용할 준비가되었는지 말하기가 어렵습니다 .실시간 마이그레이션 기본 컨테이너 (복잡한 네트워크 서비스 나 특수 스토리지 구성을 통한 장치 통과 없음)와 함께 작동 합니다.
  • python3 및 2, lua, Go, Ruby 및 Haskell에서 개발할 수있는 API 바인딩
  • 중앙 집중화 된 "새로운 기능"영역. 일부 버그가 수정되었거나 새로운 기능이 커밋되었는지 확인해야 할 때마다 매우 유용합니다. 여기에 .
  • 흥미로운 대안은 lxd 일 수 있습니다 . 후드에서 lxc와 함께 작동하지만 REST api, OpenStack 통합 등과 같은 멋진 기능이 있습니다.
  • 또 다른 흥미로운 점은 Ubuntu가 zfs를 16.04의 컨테이너에 대한 기본 파일 시스템으로 제공하는 것 같습니다 . lxd는 프로젝트를 정렬하기 위해 2.0 버전을 출시했으며 일부 기능은 zfs 관련 기능 입니다.
  • 대안 : OpenVZ , Docker
  • 도커 . Docker는 네임 스페이스를 사용하고 cgroup은 "앱별"/ "소프트웨어 당"격리를 생성합니다. 주요 차이점은 여기 입니다. LXC는 여러 프로세스로 컨테이너를 생성하지만 Docker는 컨테이너를 가능한 한 단일 프로세스로 줄이고 Docker를 통해 컨테이너를 관리합니다.
  • Docker와 SELinux를 통합하고 컨테이너 내부의 기능을 줄여 더 안전하게 만드는 노력 -Docker 및 SELinux, Dan Walsh
  • Docker, LXD 및 LXC의 차이점은 무엇입니까

Docker는 더 이상 lxc를 사용하지 않습니다. 이제 저수준 커널 네임 스페이스 및 cgroup 기능과의 통합을 처리하는 libcontainer 라는 특정 lib가 있습니다.

두 기술 모두 보안 만병 통치약은 아니지만 운영 체제 인프라가 혼합되어 전체 가상화가 필요하지 않은 환경을 격리하는 좋은 방법입니다. 커널 튜너 블, MAC 및 해당 OS 레벨 virt가 제공하는 격리에 대한 많은 문서 읽기 및 구현 후에 보안이 제공됩니다.

또한보십시오:


1
lxc는 적절한 게스트 격리를 제공하기 위해 노력할 필요가 없습니다. 그러나 lxd 는 BSD jails 또는 Solaris zone과 같은 격리를 제공하려고 시도합니다.
allquixotic

lxd는 LXC의 "더 나은 경험"으로 그 위에 다른 기능을 추가했습니다. 그러나

@allquixotic 템플릿에서 생성 된 변경되지 않은 구성을 사용한다면? LXC 1.x와 함께 사용 가능하지만 권한이없는 (사용자가 사용할 수있는) 컨테이너는 실제로 사용 가능했으며 시스템을 소유 한 경우 root(시스템 전체의 컨테이너 위치에있는 경우) 시스템 부팅시 자동 시작될 수도 있습니다 .
0xC0000022L
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.