어떻게 데비안 10에서 chroot를 사용합니까

어떻게 데비안 10에서 chroot를 사용합니까

2022-06-03 last update

9 minutes reading Debian
테스트 환경에서, 우리는 통상적으로 일부 응용 프로그램에 대해 모래상자 처리를 해서 그것들이 시스템의 나머지 부분을 손상시키거나 정탐하는 것을 방지해야 한다.VirtualBox, VMware, Xen, KVM 등 샌드박스화 프로그램에 사용할 수 있는 다른 도구가 있습니다. 그러나 단일 또는 소수의 응용 프로그램에만 전체 운영체제를 샌드박스화하는 것은 실용적이지 않습니다.
Linux 운영체제에 대해chroot라고 할 수 있는 도구가 있는데, 이것은 더욱 간단하고 빠른 샌드박스화 응용 프로그램의 방법을 제공한다.chroot를 사용하면 시스템의 나머지 부분에 영향을 주지 않고 모든 프로그램을 설치하고 테스트할 수 있습니다.
본고는 Debian 10 Buster에서chroot를 어떻게 사용하는지 설명하고 예시를 제공할 것이다.설명을 편리하게 하기 위해서, 우리는bash와 일부 명령을 위한chroot 환경을 만들 것입니다. 예를 들어'ls','ip','pwd'명령을 만들 것입니다.

chroot가 뭐예요?


chroot 도구는 프로그램의 루트 디렉터리를 다른 디렉터리로 바꾸는 데 사용되는 Linux의 명령입니다.이 새 루트에서 실행되는 프로세스는 외부 파일에 접근할 수 없습니다.따라서 응용 프로그램의 운영과 시스템의 나머지 부분을 분리한다.

chroot는 어떻게 일합니까?


Chroot의 작업 방식은 응용 프로그램과 실행 가능한 모든 파일과 의존 항목을 대체 루트 디렉터리로 복사하는 것입니다.그리고 이 예비 루트 디렉터리에서 프로그램을 실행하여 프로그램이 원시 루트 디렉터리로 간주하도록 합니다.루트 디렉터리는 차원 구조에서 가장 높은 디렉터리로 어떤 응용 프로그램도 이 디렉터리보다 높은 디렉터리에 접근할 수 없기 때문에chroot는 이렇게 응용 프로그램과 시스템의 나머지 부분을 분리합니다.

사용 사례

  • 테스트 환경 설정
  • 64비트 시스템
  • 에서 32비트 프로그램 실행
  • 최신 운영 체제 버전
  • 에서 이전 버전 실행
  • 암호 복구
  • 문법


    다음은 chroot 명령의 기본 구문입니다.
    $ chroot  command
    다음 절차에 따라 Debian에서 chroot 명령을 사용하여 chroot 환경을 설정합니다.

    1. 대체 루트 만들기


    우선,chroot 환경에 사용할 대체 루트 디렉터리를 만듭니다.
    $ sudo mkdir ~/new_root
    위 명령은 홈 디렉터리에 새\u 루트 디렉터리를 만듭니다. 이 디렉터리는chroot 환경의 루트 디렉터리로 사용됩니다.

    2. 기본 디렉토리 추가


    ~/new\u 루트 디렉터리에서 "bin", "lib"및 "lib64"디렉터리를 만듭니다.
    $ sudo mkdir -p ~/new_root/{bin,lib,lib64}

    3. 복제 프로그램 바이너리 파일


    chroot 환경에서 프로그램을 실행하는 데 필요한 모든 내용은 예비 루트 디렉터리에 있어야 합니다.본고에서, 우리는bash와 일부 명령을 위한chroot 환경을 만들 것입니다. "ls", "ip", "pwd"명령을 포함합니다.따라서 우리는 바이너리 파일을/bin 디렉터리에서 예비 ~/new\u root/bin 디렉터리로 복사합니다.명령의 바이너리 파일을 찾으려면 which 명령을 사용합니다.
    $ which bash ls ip pwd

    다음은 명령의 바이너리 파일을 ~/new\u root/bin 디렉터리로 복사합니다.
    $ sudo cp -v /bin/{bash,ls,ip,pwd}  ~/new_root/bin

    4. 복제 프로그램 의존 항목


    우리는 또 우리의 프로그램이 어떤 의존항을 필요로 하는지 찾아야 한다.우선, 이 의존항들이 무엇인지 찾아서 ~/new\u 루트/lib 디렉터리로 복사해야 합니다.

    bash 의존 항목 복사


    우선, bash 프로그램의 의존 항목을 찾아냅니다.
    $ ldd /bin/bash

    그리고 이 의존 항목을 ~/new\u 루트/lib 디렉터리로 복사합니다.
    $ cp -v /lib/x86_64-linux-gnu/{libtinfo.so.6,libdl.so.2,libc.so.6} ~/new_root/lib
    /lib64 파일의 경우 ~/new\u root/lib64 디렉터리로 복사합니다.
    $ cp –v /lib64/ld-linux-x86-64.so.2 ~/new_root/lib64

    ls 명령의 의존 항목 복사


    우선, ls 명령의 의존 관계를 찾아냅니다.
    $ ldd /bin/ls

    그리고 이 의존 항목을 ~/new\u 루트/lib 디렉터리로 복사합니다.
    $ sudo cp -v /lib/x86_64-linux-gnu/{libselinux.so.1,libc.so.6,libpcre.so.3,
    libdl.so.2,libpthread.so.0} /lib64/ld-linux-x86-64.so.2 ~/new_root/lib
    /lib64 파일의 경우 ~/new\u root/lib64 디렉터리로 복사합니다.
    $ sudo cp –v /lib64/ld-linux-x86-64.so.2 ~/new_root/lib64

    IP 명령 복사 의존 항목


    우선, IP 명령의 의존 항목을 찾아냅니다.
    $ ldd /bin/ip

    그리고 이 의존 항목을 ~/new\u 루트/lib 디렉터리로 복사합니다.
    $ cp -v /lib/x86_64-linux
    gnu/{libselinux.so.1,libelf.so.1,libmnl.so.0,libcap.so.2,libdl.so.2,libc.so.6,
    libpcre.so.3,libz.so.1,libpthread.so.0} ~/new_root/lib
    /lib64 파일의 경우 ~/new\u root/lib64 디렉터리로 복사합니다.
    $ sudo cp –v /lib64/ld-linux-x86-64.so.2 ~/new_root/lib64

    pwd 명령 복사 의존 항목


    우선, pwd 명령의 의존 항목을 찾아냅니다.
    $ ldd /bin/pwd

    그리고 이 의존 항목을 ~/new\u 루트/lib 디렉터리로 복사합니다.
    $ sudo cp -v /lib/x86_64-linux-gnu/libc.so.6  ~/new_root/lib
    /lib64 파일의 경우 ~/new\u root/lib64 디렉터리로 복사합니다.
    $ sudo cp –v /lib64/ld-linux-x86-64.so.2 ~/new_root/lib64
    대체 루트의 모든 디렉토리를 보려면 다음 명령을 사용합니다.
    $ ls -R

    5, 대체 루트로 전환


    이제, 우리는 마침내 새로운chroot 환경으로 전환할 준비가 되었다.루트 디렉토리를 변경하려면 루트 권한이 있는 셸에서 다음 명령을 실행합니다.
    $ sudo chroot ~/new_root /bin/bash
    그 중에서 ~/new\u 루트는 우리의 예비 루트 디렉터리이고,/bin/bash는 우리가chroot 환경을 설정하는 응용 프로그램입니다.
    상기 명령을 실행하면 bash 알림부호가 bash-x.y로 변경된 것을 볼 수 있습니다. 이 예에서는 bash-5.0 (그중 5.0은 bash 버전 번호) 입니다.
    참고: chroot 명령을 실행하면 다음과 같은 오류가 발생할 수 있습니다.

    이 오류가 발생하면 필요한 프로그램과 관련된 모든 라이브러리와 실행 가능한 파일을 새 루트 디렉터리에 추가했는지 확인하십시오.
    chroot 환경에 들어가면 파일에만 접근할 수 있습니다.chroot 환경에 설정된 명령을 실행하십시오. 내장된 명령을 포함합니다.셸에서 help 명령을 실행하면 내장 명령을 찾을 수 있습니다.

    보시다시피 우리는 이미 "ls", "pw", "ip"명령을 시도했습니다. 모든 명령이 성공했습니다.이 세 개의 명령과 내장 명령을 제외한 명령을 실행하면 이 명령은chroot 환경에 설정하지 않았기 때문에 실패합니다.아래 화면 캡처에서 보듯이 "touch", "ping", "clear"명령을 실행하려고 했지만 실패했습니다.

    6. chroot 종료


    chroot 환경을 종료하려면 exit 명령을 사용하십시오.

    결론


    본고에서, 당신은 chroot가 무엇인지, 그리고 Linux에서의 작업 방식을 이해했습니다.본고는 Debian 10 Buster에서chroot를 사용하여 bash와 다른 명령으로chroot 환경을 만드는 방법을 점차적으로 소개한다.현재,chroot 명령을 사용하여 프로세스와 하위 프로세스의 루트 디렉터리를 쉽게 변경하고, 시스템의 나머지 부분과 분리할 수 있습니다.