나무모에 미러 (일반/어두운 화면)
최근 수정 시각 : 2026-08-08 09:00:19

chroot


chroot
원저자 Bill Joy 외(AT&T 벨 연구소)
최초 출시 1979년[1]
운영체제 Unix, Unix 계열, Plan 9, Inferno
플랫폼 크로스 플랫폼
종류 셸 명령어 / 시스템 콜

1. 개요2. 역사3. 동작 방식4. 활용 사례5. 보안 도구로서의 한계6. 현대 컨테이너 기술과의 관계7. 여담8. 관련 문서


1. 개요

chroot(change root)는 유닉스 및 유닉스 계열 운영체제에서, 현재 실행 중인 프로세스와 그 자식 프로세스들이 인식하는 루트 디렉터리를 다른 위치로 바꿔주는 셸 명령이자 시스템 콜이다. chroot로 지정된 환경 안에서 실행되는 프로그램은 지정된 디렉터리 트리 바깥에 있는 파일의 경로 자체를 지칭할 수 없게 되고, 그 결과 보통은 그 바깥 파일에 접근할 수도 없게 된다.

chroot라는 이름은 문맥에 따라 chroot(2) 시스템 콜 자체를 가리키기도 하고, chroot(8) 명령줄 유틸리티를 가리키기도 한다. 이렇게 수정된 실행 환경은 흔히 chroot 감옥(chroot jail)이라고 부른다.

2. 역사

chroot 시스템 콜1979년 Version 7 Unix(7th Edition Unix) 개발 과정에서 처음 도입되었다. 벨 연구소가 만든 V7 커널 소스 안에서 시스템 콜 61번으로 구현되었으며, 당시엔 슈퍼유저만 사용할 수 있는 기능이었다. 함께 제공된 chroot(1) 명령은 보통 `/etc` 아래에 위치했고, 사용자가 지정한 새 루트 디렉터리 안에서 명령이나 대화형 셸을 실행할 수 있게 해 주는 초창기 형태의 환경 격리 도구였다.

BSD 계열로의 도입 시점에 대해서는 한동안 혼선이 있었다. 초기 BSD 개발자인 Marshall Kirk McKusick은 소스 코드 관리 시스템(SCCS)의 로그를 근거로, 빌 조이1982년 3월 18일[4.2BSD] 에 4.2BSD의 테스트 빌드를 만들기 위해 chroot를 커널에 추가했다고 설명한 바 있다. 그러나 이후 Warner Losh는 chroot가 실제로는 1979년 벨 연구소의 7th Edition Unix에서 이미 도입되어 있었으며, BSD 커널 소스가 이후 재정리되는 과정에서 이 사실이 혼동을 낳았을 뿐이라고 정정했다. 다만 Bill Joy가 4.2BSD 빌드 디렉터리 안으로 chroot해서, 그 트리에 포함된 파일만을 이용해 시스템을 빌드해 보려는 목적으로 BSD 쪽 chroot 활용을 개척한 것은 사실로 여겨진다.

이후 chroot에 "감옥(jail)"이라는 표현을 적용한 초기 사례로는, 1991년 AT&T 연구원 Bill Cheswick이 시스템에 침입한 해커의 행동을 감시하기 위한 허니팟(honeypot)을 만들면서 이를 "chroot jail"이라 부른 것이 꼽힌다. 이후 chroot의 보안적 취약성 및 이를 우회하는 기법을 다루는 논의가 1990년대 후반부터 여러 보안 칼럼을 통해 본격적으로 다뤄지기 시작했다.

2000년에는 FreeBSD 4.0이 chroot 개념을 대폭 확장한 jail 기능을 도입했고, 2002년경에는 리눅스에서도 유사한 격리 환경을 구성하는 방법이 소개되는 등, chroot는 이후 등장하는 다양한 운영체제 수준 가상화·격리 기술들의 개념적 출발점 역할을 했다.

3. 동작 방식

chroot는 프로세스가 파일 경로를 해석할 때 기준으로 삼는 루트(`/`)를 지정된 디렉터리로 바꿔치기하는 방식으로 작동한다. 예를 들어 `/opt/fake-root`라는 디렉터리를 대상으로 chroot를 실행하면, 이후 해당 프로세스 입장에서는 `/opt/fake-root`가 곧 자기 세계의 `/`가 되고, 그 바깥에 있는 실제 파일시스템의 나머지 부분은 아예 존재하지 않는 것처럼 보이게 된다. 다만 이는 어디까지나 경로 해석 방식을 바꾸는 것일 뿐이라, chroot 대상 디렉터리 안에는 프로세스가 정상 작동하는 데 필요한 라이브러리·바이너리·설정 파일 등을 미리 갖춰 둬야 한다.

4. 활용 사례

5. 보안 도구로서의 한계

chroot는 파일시스템 경로만 격리할 뿐, 프로세스·네트워크·자원 사용량에 대한 격리는 전혀 제공하지 않는다. 더 근본적인 문제는, chroot로 만든 "감옥"이 root 권한으로 실행 중인 프로세스에는 사실상 무력하다는 점이다. 루트 권한을 가진 프로세스는 비교적 간단한 기법으로 chroot 감옥을 탈출할 수 있는데, 이런 상황을 가리켜 탈옥(jailbreak)이라 부른다. 대표적인 탈출 기법으로는, 감옥에 갇히기 전에 미리 실제 루트 디렉터리에 대한 파일 디스크립터를 열어 뒀다가, chroot로 더 깊은 디렉터리에 들어간 뒤 그 파일 디스크립터로 되돌아가(`fchdir`) 상위 디렉터리로 반복해서 이동(`chdir("..")`)하며 실제 루트까지 빠져나오는 방식이 알려져 있다.

이 때문에 오늘날 chroot는 엄밀한 의미의 보안 경계로는 취급되지 않으며, 오용을 막기 위한 최소한의 장벽 정도로 이해하는 것이 안전하다는 평가가 일반적이다.

6. 현대 컨테이너 기술과의 관계

Docker를 비롯한 현대적인 컨테이너 기술은 chroot의 개념적 후예로 종종 소개되지만, 실제 구현 방식과 제공하는 격리 수준에는 뚜렷한 차이가 있다.

7. 여담

8. 관련 문서


[1] Version 7 Unix 개발 중 시스템 콜로 도입[4.2BSD] 출시보다 약 1.5년 앞선 시점

분류