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은 주로 세 가지 목표를 지향한다.
프로세스를 파일 시스템의 특정 뷰로만 제한하는 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은 다음과 같은 방식으로 제한된다.