리눅스

리눅스 chroot

@xftg77g 2022. 9. 29. 13:32

기본 개념

유닉스 운영체제에서 chroot는 현재 실행 중인 프로세스와 차일드 프로세스 그룹에서 루트 디렉터리를 변경하는 작업입니다.

 

이렇게 수정된 환경에서 실행되는 프로세스는 지정된 루트 디렉터리 밖의 파일들에 접근할 수 없으므로 (즉, 일반적으로는 접근이 불가능하므로) chroot 감옥이라고 부릅니다.

 

사용 목적

chroot는 다음의 목적에 유용하게 쓰일 수 있습니다.

  • 테스트 및 개발
  • 의존성 제어
  • 호환성
  • 복구
  • 권한 분리

예시로

bash를 사용하는 어떤 프로세스를 chroot로 격리하고자 합니다. 격리된 환경에서는 밖의 파일들에 접근할 수 없으므로 해당 격리 환경에 bash를 사용하기 위한 의존성을 주입해주어야 합니다.

 

먼저 ldd 명령어를 사용하여 /bin/bash의 의존성을 확인합니다.

$ ldd /bin/bash
	linux-vdso.so.1 (0x00007ffca10be000)
	libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007fb65218c000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fb652186000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb651f94000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fb6522ed000)

해당 파일들을 격리 환경에 넣어주기 위해서 격리 환경에 폴더를 생성합니다. 격리 환경 경로는 /home/test 라고 하겠습니다.

$ cd /home
$ mkdir -p test/bin 
$ mkdir -p test/lib/x86_64-linux-gnu 
$ mkdir -p test/lib64

의존성을 주입합니다.

$ cp /bin/bash test/bin
$ cp /lib/x86_64-linux-gnu/libtinfo.so.6 test/lib/x86_64-linux-gnu
$ cp /lib/x86_64-linux-gnu/libdl.so.2 test/lib/x86_64-linux-gnu
$ cp /lib/x86_64-linux-gnu/libc.so.6 test/lib/x86_64-linux-gnu
$ cp /lib64/ld-linux-x86-64.so.2 test/lib64

chroot로 격리시킴과 동시에 bash를 실행해 줍니다. pwd로 현재 경로를 출력하면 / 디렉터리가 표시되는 것을 볼 수 있습니다.

$ sudo chroot test /bin/bash
bash-5.0$ pwd
/

만약 ls와 같은 기능도 필요하다면 동일한 방법으로 의존성을 주입해주면 됩니다.