기본 개념
유닉스 운영체제에서 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와 같은 기능도 필요하다면 동일한 방법으로 의존성을 주입해주면 됩니다.
'리눅스' 카테고리의 다른 글
리눅스 namespace (1) | 2022.09.30 |
---|---|
리눅스 Cgroup (0) | 2022.09.30 |
리눅스 하드웨어 용량 확인 및 swap 메모리 확보 (0) | 2022.08.19 |
표준 입출력 변경과 2>&1 (0) | 2022.08.12 |
i-node 그리고 하드 링크 파일 vs 소프트 링크 파일(심볼릭 링크 파일) (0) | 2022.08.11 |