우분투 chroot 명령어 실무 가이드: 파일시스템 격리와 시스템 복구

개요

리눅스 환경에서 루트 디렉터리를 일시적으로 변경하는 chroot 명령어의 개념과 핵심 원리를 살펴봅니다. 미니 샌드박스 환경 구축부터 Live CD를 활용한 시스템 응급 복구, SFTP 디렉터리 격리까지 실무에서 즉시 활용할 수 있는 실전 예제를 단계별로 다룹니다.

chroot 기본 원리와 BusyBox 기반 최소 샌드박스 구축

외부 의존성 라이브러리 없이 독립적으로 실행 가능한 최소 환경을 구성하기 위해 sudo apt-get update -qq && sudo apt-get install -y busybox-static 명령어로 정적 바이너리 패키지를 설치합니다.

sudo apt-get update -qq && sudo apt-get install -y busybox-static

chroot 환경의 새로운 루트 디렉터리와 실행 파일 저장을 위한 경로를 생성하기 위해 sudo mkdir -p /opt/mini-jail/bin 명령어를 실행합니다.

sudo mkdir -p /opt/mini-jail/bin

격리된 공간 내부에서 기본 셸과 유틸리티 명령어를 실행할 수 있도록 sudo cp /bin/busybox /opt/mini-jail/bin/ 명령어로 바이너리를 복사합니다.

sudo cp /bin/busybox /opt/mini-jail/bin/

chroot 명령어는 실행 프로세스가 바라보는 루트 디렉터리(/)의 위치를 지정한 경로로 변경하여 호스트 시스템과의 접근을 차단합니다.
명령어를 실행하면 /opt/mini-jail이 최상위 루트로 인식되어 호스트 파일시스템과 격리된 상태에서 내부 파일 목록이 정상 출력되는 것을 확인할 수 있습니다.
⚙️ [주요 옵션]

--userspec=USER:GROUP : 격리 환경 내부에서 실행할 사용자와 그룹을 지정합니다.
--groups=G_LIST : 격리 환경에서 사용할 보조 그룹 목록을 쉼표로 구분하여 지정합니다.
--skip-chdir : 새로운 루트 디렉터리로 작업 디렉터리를 이동하지 않고 현재 작업 위치를 유지합니다.

sudo chroot /opt/mini-jail /bin/busybox sh -c “echo ‘Inside chroot jail:’; /bin/busybox ls -l /”

의존성 라이브러리(ldd)를 포함한 독립 Bash 셸 격리 환경 구성

Bash 셸과 필수 공유 라이브러리를 배치할 격리 디렉터리 구조를 생성하기 위해 sudo mkdir -p /opt/bash-jail/{bin,lib,lib64} 명령어를 실행합니다.

sudo mkdir -p /opt/bash-jail/{bin,lib,lib64}

격리 환경 내부에서 표준 Bash 셸과 디렉터리 조회 명령어를 실행할 수 있도록 sudo cp /bin/bash /bin/ls /opt/bash-jail/bin/ 명령어로 바이너리를 복사합니다.

sudo cp /bin/bash /bin/ls /opt/bash-jail/bin/

동적 링크 방식으로 빌드된 bash와 ls 실행에 필요한 공유 라이브러리들을 격리 환경으로 가져오기 위해 sudo cp -a /lib/x86_64-linux-gnu /opt/bash-jail/lib/ 명령어를 실행합니다.

sudo cp -a /lib/x86_64-linux-gnu /opt/bash-jail/lib/

64비트 바이너리 실행에 필수적인 동적 링커 및 핵심 라이브러리를 격리 경로에 배치하기 위해 sudo cp -a /lib64/* /opt/bash-jail/lib64/ 명령어를 실행합니다.

sudo cp -a /lib64/* /opt/bash-jail/lib64/

sudo chroot /opt/bash-jail /bin/bash -c "ls -la /" 명령어를 실행하여 구성한 격리 환경에서 Bash 셸을 구동하고 루트 경로의 파일 목록을 조회합니다.
실행 결과 호스트 시스템의 파일 대신 격리 환경에 복사해 둔 bin, lib, lib64 디렉터리만 최상위 루트(/)로 인식되어, 공유 라이브러리 의존성을 갖춘 독립 셸 환경이 정상 동작함을 확인할 수 있습니다.

sudo chroot /opt/bash-jail /bin/bash -c “ls -la /”

시스템 장애 복구를 위한 가상 파일시스템 바인드 마운트와 chroot

복구 대상 시스템의 파일시스템을 연결할 마운트 포인트를 생성하기 위해 sudo mkdir -p /mnt/sysroot 명령어를 실행합니다.

sudo mkdir -p /mnt/sysroot

복구 대상 디스크의 루트 파일시스템을 지정한 마운트 디렉터리에 연결하기 위해 sudo mount --bind / /mnt/sysroot 명령어를 실행합니다.

sudo mount –bind / /mnt/sysroot

격리된 복구 환경 내부에서 디스크 파티션과 하드웨어 장치 노드에 정상적으로 접근할 수 있도록 호스트의 /dev 디렉터리를 바인드 마운트합니다.

sudo mount –bind /dev /mnt/sysroot/dev

커널 상태와 실행 중인 프로세스 정보를 참조하는 시스템 복구 도구들이 정상 작동할 수 있도록 호스트의 /proc 가상 파일시스템을 바인드 마운트합니다.

sudo mount –bind /proc /mnt/sysroot/proc

커널의 하드웨어 장치 제어 및 시스템 드라이버 정보를 격리 환경에 그대로 전달하기 위해 호스트의 /sys 가상 파일시스템을 바인드 마운트합니다.

sudo mount –bind /sys /mnt/sysroot/sys

sudo chroot /mnt/sysroot /bin/bash -c "uname -a && df -h /" 명령어를 실행하여 필수 가상 파일시스템이 바인드 마운트된 환경에서 커널 정보와 루트 파일시스템 용량을 확인합니다.
실행 결과 호스트의 커널 정보가 정상 인식되고 마운트된 대상 경로가 최상위 루트(/)로 작동하여 부팅 복구나 패키지 재설치 작업을 즉시 수행할 수 있는 상태임을 확인할 수 있습니다.

sudo chroot /mnt/sysroot /bin/bash -c “uname -a && df -h /”

복구 및 점검 작업을 마친 후 마운트된 파일시스템이 손상되지 않도록 하위 가상 파일시스템부터 대상 루트 디렉터리까지 역순으로 안전하게 마운트 해제합니다.

sudo umount /mnt/sysroot/sys /mnt/sysroot/proc /mnt/sysroot/dev /mnt/sysroot

보안 강화를 위한 SFTP 전용 chroot 디렉터리 권한 설정

대화형 셸 로그인을 차단하고 SFTP 전용 격리 환경에서 사용할 계정을 생성하기 위해 sudo id -u jailuser &>/dev/null || sudo useradd -m -d /home/jailuser -s /bin/false jailuser 명령어를 실행합니다.

sudo id -u jailuser &>/dev/null || sudo useradd -m -d /home/jailuser -s /bin/false jailuser

격리된 사용자가 파일을 안전하게 전송할 수 있는 작업 공간을 마련하기 위해 sudo mkdir -p /home/jailuser/uploads 명령어로 업로드 디렉터리를 생성합니다.

sudo mkdir -p /home/jailuser/uploads

OpenSSH의 chroot 탈출 방지 보안 요건을 충족하기 위해 최상위 격리 디렉터리의 소유권을 root로 변경하고 권한을 755로 설정합니다.

sudo chown root:root /home/jailuser && sudo chmod 755 /home/jailuser

격리된 계정이 실제 파일 업로드 및 수정 작업을 수행할 수 있도록 하위 디렉터리의 소유권을 jailuser로 지정하기 위해 sudo chown jailuser:jailuser /home/jailuser/uploads 명령어를 실행합니다.

sudo chown jailuser:jailuser /home/jailuser/uploads

ls -ld /home/jailuser /home/jailuser/uploads 명령어를 실행하여 최상위 격리 경로와 하위 작업 디렉터리의 소유권 및 접근 권한을 확인합니다.
실행 결과 상위 디렉터리는 root:root 소유와 drwxr-xr-x 권한으로 보호되고, 내부 uploads 디렉터리는 jailuser:jailuser 소유로 분리되어 안전한 SFTP chroot 권한 규칙이 완성되었음을 확인할 수 있습니다.

ls -ld /home/jailuser /home/jailuser/uploads

지금까지 우분투에서 chroot 명령어를 활용한 파일시스템 격리 방법과 긴급 시스템 복구 과정을 간단하게 살펴보았습니다.
안전한 테스트 환경 구축이나 시스템 장애 복구가 필요한 실무 상황에서 유용하게 활용해 보시기 바랍니다.