Jail 이란?

This entry is part 9 of 48 in the series FreeNAS 서버 만들기

Jail 소개

FreeBSD jail 또는 jail 이라고 알려져 있는 이 기술은 FreeBSD 의 OS 레벨 가상화입니다. OS 레벨 가상화는 OS 의 커널이 격리 된 사용자 공간을 만들어 가상화 하는 것을 말합니다. 흔히 OS 레벨 가상화라 하면 윈도우의 Hyper-V 와 같은 가상화 솔루션과 착각하는 경우가 많은데, Hyper-V의 경우 윈도우에 탑재된 하이퍼 바이저 가상 머신 솔류션입니다. OS 레벨 가상화의 대표적인 예는 Docker 입니다. 흔히 컨테이너라 불리는 그것입니다.

Jail 특징

jail은 몇가지 특징이 있습니다.

  • chroot 된 파일 시스템과 프로세스
    • jail은 샌드박싱 됩니다. 그래서 다른 jail에 접근할 수 없으며, jail에 할당되지 않은 외부의 파일과 리소스에 접근할 수 없습니다.
  • 독립된 권한
    • jail은 독립된 권한 (root 를 포함) 을 가집니다.
  • 낮은 오버헤드
    • OS 의 커널을 공유하기 때문에 가상화보다 월등히 속도가 빠릅니다. FreeBSD jail 의 경우는 Linux 의 Docker 보다도 오버헤드가 적습니다.
  • 중첩 가능
    • Jail은 자식 Jail을 가질 수 있습니다. 자식 Jail 또한 하위 Jail을 가질 수 있습니다. 계층적으로 쌓인 Jail은 더 다양한 구성을 가능하게 해 줍니다.
  • 제한된 네트워크
    • 모든 jail은 네트워크 기능이 일부 제한되어 있습니다. 예를 들어, jail은 라우팅 소켓이나 원시 소켓에 대한 접근이 기본적으로 비활성화 되어 있습니다. 즉, 네트워크 구성을 수정하는 것이 금지되어 있습니다. 당연히 방화벽 규칙도 수정할 수 없습니다.
      (jail 내부의 방화벽은 수정할 수 있습니다. jail외부의 네트워크를 수정할수 없다는 의미입니다.)
    • 모든 jail은 특정 IP 주소를 가집니다.
  • 커널에 대한 접근 제한
    • jail은 커널을 수정할수 없도록 제한되어 있습니다. jail 내부에서는 sysctls 와 보안 레벨 등을 수정할 수 없습니다.
  • 장치에 대한 접근 제한
    • jail의 프로세스는 장치 파일을 만들 수 없습니다.
  • 실제 시스템과 구분이 힘듬
    • jail 내부는 클린 FreeBSD 시스템과 동일합니다. 그래서 프로그램과 사용자의 관점에서 실제 시스템과 구분하기 힘듭니다.

즉 정리하자면 jail 은 FreeBSD 의 OS 레벨 가상화로 FreeBSD 의 커널을 공유하는 샌드박스 된 환경입니다.

Jail 을 사용함으로서 생기는 이점

  • chroot 되었다는 특징 때문에 jail 내부에서 어떤 변경이 일어나던 간에 Host 에는 아무런 영향이 가지 않습니다. 그래서 jail 내부에서 어떤 문제가 발생하였거나, jail 내부의 시스템이 손상된다 할지라도 Host 에는 아무런 영향이 가지 않습니다. 극단적인 예를 들어보자면, jail 내부에서 rm -rf /* 명령을 내린다 할지라도 Host에는 아무런 영향이 가지 않습니다.
  • chroot 되었기 때문에 여러 개의 서버나 실험용 서버를 운용하는 것 처럼 사용할 수 있습니다. 각각의 jail은 서로 독립적이고 영향을 미치지 않기 때문에 프로그램의 여러 가지 버전을 사용할 수도 있습니다. 예를 들어, 어떤 jail은 php5.1 버전을 다른 jail은 php7.2 버전을 사용할 수 있습니다.
  • jail을 복사하거나 스냅샷을 찍는 등의 작업을 할 수 있습니다. 그래서 jail 이 손상되었다 할지라도 백업본이나 스냅샷을 통해 손상되기 이전으로 되돌릴 수 있습니다.
  • 독립된 권한을 가지기 때문에 특정 권한이 필요한 작업을 jail안에서 수행하기 용이합니다. 예를 들어, root 권한이 필요한 어떤 작업이 있다고 가정하였을 때, 이것을 HOST에서 수행하도록 위임하는 것은 위험한 행위이지만 jail 안에서 수행하도록 한다면 전체 시스템에 대한 보안을 확보할 수 있습니다.
  • 오버헤드가 낮기 때문에 여러 개의 jail을 운용하더라도 시스템에 걸리는 부하가 낮습니다. 그래서 다수의 jail을 운용하기 편리합니다.
  • jail은 각각 특정 ip 주소를 가지기 때문에 여러 개의 서버를 운용하는 것 처럼 다룰 수 있습니다. 예를 들어, 하나의 서버에 여러 개의 jail 을 만들고 각각 ip 주소를 할당받아 웹 서버를 만들면 여러 개의 웹 서버를 운용하는 것과 동일하게 운용할수 있습니다.
  • jail 내부는 실제 시스템과 구분하기 힘듭니다. 그래서 어떠한 작업을 하거나 서비스를 구축할 때 실제 시스템을 구축하는 것과 거의 동일하게 행할 수 있습니다.
  • jail은 커널이나 보안 레벨을 수정할 수 없고, 네트워크가 제한되어 있는 등의 특징 덕분에 보안상 상당한 이점을 가집니다.

마치면서

앞서 설명했듯이 FreeNAS 는 어플라이언스입니다. 그래서 어떠한 변경도 행해서는 안됩니다. 그래서 FreeNAS 에서 제공하는 서비스가 아닌 다른 서비스 (예를 들어 PLEX) 는 모두 jail에 설치됩니다. 앞으로 작성할 모든 포스팅에서 서비스를 설치하는 것은 전부 jail 내에서 이루어질 것입니다.

시리즈 네비게이션<< ZFS 용어 정리FreeNAS WebUI 둘러보기 >>

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다