FreeBSD jail

jail 메커니즘은 FreeBSD의 운영체제 수준 가상화를 구현한 것으로, 시스템 관리자가 FreeBSD 기반 컴퓨터 시스템을 'jail'이라고 불리는 여러 개의 독립적인 미니 시스템으로 분할할 수 있게 해준다. 이 모든 jail은 동일한 커널을 공유하며, 오버헤드가 매우 적다. 이는 시스템 호출인 jail(2)과 사용자 공간 유틸리티인 jail(8), 그리고 시스템에 따라 필요한 몇 가지 다른 유틸리티 소프트웨어를 통해 구현된다. 이 기능은 호스팅 제공업체에서 일정 기간 실제 운영된 후 1999년 폴 헤닝 캄에 의해 FreeBSD에 커밋되었으며, FreeBSD 4.0과 함께 처음 공개되었다. 따라서 현재까지 DragonFly BSD를 포함한 다수의 FreeBSD 파생 시스템에서 지원되고 있다.

역사

FreeBSD jail의 필요성은 소규모 공유 환경 호스팅 업체(R&D Associates, Inc.의 소유주인 데릭 T. 울워스)가 자사의 서비스와 고객의 서비스를 엄격하고 명확하게 분리하고자 하는 열망에서 비롯되었으며, 주된 목적은 컴퓨터 보안과 관리의 용이성이었다(jail(8)). 폴 헤닝 캄이 채택한 해결책은 세밀한 구성 옵션 계층을 추가하는 대신, 적절한 사람에게만 적절한 구획에 대한 접근 권한을 부여하는 방식으로 시스템의 파일과 자원을 구획화하는 것이었다.

Jail은 2000년 3월 14일에 출시된 FreeBSD 4.0 버전에서 처음 도입되었다. 원래 기능 대부분은 DragonFly BSD에서 지원되며, 새로운 기능 중 일부도 이식되었다.

목표

FreeBSD jail은 주로 세 가지 목표를 지향한다.

  1. 가상화: 각 jail은 가상 환경으로서 호스트 머신에서 실행되며, 고유한 파일, 프로세스, 사용자 및 슈퍼유저 계정을 가진다. jail 내부의 프로세스 입장에서 그 환경은 실제 시스템과 거의 구별할 수 없다.
  2. 보안: 각 jail은 서로로부터 격리되어 있어 추가적인 보안 수준을 제공한다.
  3. 권한 위임의 용이성: jail은 범위가 제한되어 있어 시스템 관리자가 시스템에 대한 완전한 제어권을 넘겨주지 않고도 슈퍼유저 권한이 필요한 여러 작업을 위임할 수 있게 한다.

프로세스를 파일 시스템의 특정 뷰로만 제한하는 Chroot jail과 달리, FreeBSD jail 메커니즘은 jail 내부 프로세스의 활동을 시스템의 나머지 부분과 관련하여 제한한다. 사실상, jail에 갇힌 프로세스는 샌드박스 상태가 된다. 이들은 특정 IP 주소에 바인딩되며, jail 내부의 프로세스는 divert 소켓이나 라우팅 테이블에 접근할 수 없다. Raw 소켓 역시 기본적으로 비활성화되어 있지만, security.jail.allow_raw_sockets Sysctl 옵션을 설정하여 활성화할 수 있다. 추가로, 같은 jail에서 실행되지 않는 프로세스 간의 상호 작용도 제한된다.

jail(8) 유틸리티와 jail(2) 시스템 호출은 FreeBSD 4.0에서 처음 등장했다. jail 관리를 훨씬 쉽게 만들어주는 새로운 유틸리티(예: jail을 나열하는 jls(8))와 시스템 호출(예: 새로운 프로세스를 jail에 연결하는 jail_attach(2))이 FreeBSD 5.1에 추가되었다. jail 서브시스템은 FreeBSD 7.2에서 jail당 다중 IPv4 및 IPv6 주소를 지원하고 jail을 특정 중앙 처리 장치에 바인딩할 수 있게 하는 등 중요한 업데이트를 추가로 받았다.

가상화

jail을 사용하면 각각 고유한 유틸리티 세트가 설치되고 고유한 구성을 가진 환경을 생성할 수 있다. Jail을 사용하면 소프트웨어 패키지가 마치 해당 머신을 독점적으로 사용하는 것처럼 시스템을 인식하게 할 수 있다. Jail은 또한 독립적인, jail 내의 슈퍼유저를 가질 수 있다.

보안

FreeBSD jail은 jail 환경과 나머지 시스템(다른 jail 및 기본 시스템) 간의 분리 덕분에 서버의 보안을 강화하는 효과적인 방법이다.

FreeBSD jail은 다음과 같은 방식으로 제한된다.

  • jail 내 프로세스는 다른 jail이나 메인 호스트에 있는 프로세스와 상호 작용할 수 없다. 예를 들어, ps 명령어는 해당 jail 내에서 실행 중인 프로세스만 보여준다.
  • 직접적인 접근 및 모듈 로드를 통한 실행 중인 커널 수정이 금지된다. 대부분의 Sysctl 및 Securelevel 수정이 금지된다.
  • 인터페이스, 인터페이스 또는 IP 주소, 라우팅 테이블을 포함한 네트워크 구성 수정이 금지된다. divert 소켓 및 라우팅 소켓 접근도 금지된다. 추가로, raw 소켓은 기본적으로 비활성화된다. jail은 특정 IP 주소에만 바인딩되며 방화벽 규칙은 변경할 수 없다. 가상 네트워크 스택(VNET)의 도입으로, jail에 대해 vnet이 활성화된 경우 jail은 자신의 네트워크 구성(인터페이스, IP 주소 등 포함)을 자유롭게 수정할 수 있다.
  • 파일 시스템 마운트 및 마운트 해제가 금지된다. jail은 루트 디렉토리 상위의 파일에 접근할 수 없다(즉, jail은 chroot 상태이다).
  • jail 내 프로세스는 장치 파일을 생성할 수 없다.

같이 보기

각주

  1. ↑ Chisnall, David (2007년 6월 15일). “DragonFly BSD: UNIX for Clusters?”. 《InformIT》. Prentice Hall Professional. 2019년 3월 6일에 확인함.
  2. ↑ “jail(2) — create and manage system jails”. FreeBSD, DragonFly BSD.
  3. ↑ “jail(8) — manage system jails”. FreeBSD, DragonFly BSD.
  4. ↑ Kamp, Poul-Henning; Watson, Robert N.M. (2000). “Jails: Confining the Omnipotent Root” (PDF). 《PHKs Bikeshed》. 2026년 2월 9일에 확인함.
  5. ↑ “FreeBSD 4.0 Announcement”. FreeBSD Project. 2000년 3월 14일. 2019년 10월 3일에 확인함.
  6. 1 2 “Chapter 16. Jails”. 《FreeBSD Documentation Portal》. 2022년 12월 13일에 확인함.

더 읽어보기

외부 링크