긱스포 직스

치루트 감옥이란?

유닉스 운영체제의 치루트는 현재 실행 중인 프로세스와 그 자식에 대한 명백한 루트 디렉토리를 변경하는 작업이다. 이 수정된 환경에서 실행되는 프로그램은 지정된 디렉터리 트리 외부의 파일에 액세스할 수 없습니다. 이것은 본질적으로 디렉토리 트리에 대한 액세스를 제한하므로”처트 감옥”이라는 이름을 얻습니다.

이 아이디어는 프로세스를 실행하는 데 필요한 모든 시스템 파일을 복사하거나 링크하는 디렉토리 트리를 만드는 것입니다. 그런 다음 루트 시스템 호출을 사용하여 루트 디렉터리를 이 새 트리의 기반이 되도록 변경하고 해당 루트 환경에서 실행되는 프로세스를 시작합니다. 실제로 수정 된 루트 외부의 경로를 참조 할 수 없으므로 악의적으로 해당 위치를 읽거나 쓸 수 없습니다.

왜 필요하며 가상 머신과 어떻게 다른가요?
이 가상화는 운영 체제 수준의 가상화이며 종종 가상 컴퓨터 대신 호스트 운영 체제의 여러 격리된 인스턴스를 만드는 데 사용됩니다. 이는 커널 수준 가상화이며 응용 프로그램 계층 가상화인 가상 머신에 비해 오버헤드가 거의 없으므로 동일한 하드웨어에 여러 개의 격리된 인스턴스를 만드는 데 매우 좋은 방법을 제공합니다. 가상 머신(가상 머신)은 컴퓨터의 소프트웨어 구현이며 종종 작동하는 운영 체제의 가상 이미지를 렌더링하기 위해 하드웨어 가상화로 알려진 것을 악용합니다.

어떻게 사용합니까?
처루트 감옥을 만드는 기본 명령은 다음과 같다:

 chroot /path/to/new/root command OR chroot /path/to/new/root /path/to/server OR chroot /path/to/new/root /path/to/server

참고: 루트/권한 있는 사용자만 루트 시스템 호출을 사용할 수 있습니다. 이 명령에 액세스 할 수있는 권한이없는 사용자는 처트 감옥을 우회 할 수 있습니다.

‘배쉬’와’엘’명령에 대한 미니 감옥을 만드는 단계

1. 명령의 루트 역할을 할 디렉토리를 만듭니다.

 $ mkdir jailed $ cd jailed

2. 운영 체제에 따라 필요한 디렉터리가 변경될 수 있습니다. 논리적으로,우리는 필요한 라이브러리의 복사본을 유지하기 위해 이러한 모든 디렉토리를 만듭니다. 필요한 모든 디렉터리를 확인하려면 4 단계를 참조하십시오.

 $ mkdir -p bin lib64/x86_64-linux-gnu lib/x86_64-linux-gnu

3.’어느’명령을 실행하십시오. 어떤 명령을 실행 한 후,우리 감옥의’빈’디렉토리에 그 바이너리를 복사합니다. 당신이 별칭 이러한 명령 중 하나를 가지고 있지 않은지 확인하십시오. 지금부터,우리는 편의를 위해’투옥’디렉토리로 우리의 디렉토리를 참조 할 것이다.

 $ unalias ls # Required only if you have aliased ls command $ unalias bash # Required only if you have aliased bash command $ cp $(which ls) ./bin/ $ cp $(which bash) ./bin/

4. 적절한 라이브러리/객체 복사:투옥 된 디렉토리의 실행 파일이 작동하려면 투옥 된 디렉토리의 적절한 라이브러리/객체를 복사해야합니다. 기본적으로 실행 파일은’/’로 시작하는 위치를 확인합니다. 종속성을 찾기 위해 우리는 명령을 사용’

$ ldd $(which bash) linux-vdso.so.1 => (0x00007ffc75dd4000) libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f6577768000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f6577564000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f657719a000) /lib64/ld-linux-x86-64.so.2 (0x000055979f3fd000)

다음 명령을 실행하여 적절한 디렉터리를 만듭니다.

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

,

$ ldd $(which ls) linux-vdso.so.1 => (0x00007fff4f05d000) libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f9a2fd07000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9a2f93e000) libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f9a2f6cd000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9a2f4c9000) /lib64/ld-liux-x86-64.so.2 (0x000055e836c69000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9a2f2ac000)
$ cp /lib/x86_64-linux-gnu/libselinux.so.1 lib/x86_64-linux-gnu/$ cp /lib/x86_64-linux-gnu/libc.so.6 lib/x86_64-linux-gnu/$ cp /lib/x86_64-linux-gnu/libpcre.so.3 lib/x86_64-linux-gnu/$ cp /lib/x86_64-linux-gnu/libdl.so.2 lib/x86_64-linux-gnu/$ cp /lib64/ld-linux-x86-64.so.2 lib64/$ cp /lib/x86_64-linux-gnu/libpthread.so.0 lib/x86_64-linux-gnu/

최종 디렉터리 구조는 다음과 비슷해야 합니다.

5. 이 명령을 실행하여 루트를 쉘 경로와 함께 투옥 된 디렉토리로 변경하십시오. 기본적으로는’/빈/쉬’쉘을로드하려고합니다.

 $ cd .. $ sudo chroot jailed /bin/bash

루트 명령을 실행하는 동안 이 오류가 발생할 수 있습니다.,

chroot: failed to run command `/bin/bash': No such file or directory

이는 파일이 존재하지 않거나(명백한)로드 라이브러리가 실패하거나 사용할 수없는 두 가지 이유 때문일 수 있습니다. 라이브러리가 올바른 위치에 있는지 다시 확인하십시오.

6. 새로운 쉘이 팝업해야합니다:그것의 우리의 투옥 배쉬. 우리는 현재 2 개의 명령 만 설치되어 있습니다. 이 프로그램은 자바 바이트코드 프로그램의 갯수를 카운트하고,스크립트의 메인 형식을 합계냅니다,그리고 확인되지 않은 실행 텍스트 파일을 찾습니다..

디렉토리를 돌아 다니며 액세스 해보십시오..’또는 비슷한. 감옥을 깰 시도,아마 당신은 할 수 없습니다. 9784>

감옥 탈출,

 $ exit

가장 중요하고 흥미로운 부분은,당신이 실행할 때,

 $ ps aux

그리고 과정을 찾아,당신은 하나의 프로세스가 있다는 것을 알 수 있습니다,

root 24958 … 03:21 0:00 /usr/bin/sudo -E chroot jailed/ /bin/bash

흥미롭게도,투옥 된 쉘의 프로세스는이 쉘의 간단한 자식 프로세스로 실행됩니다. 수감 된 환경 내부의 모든 프로세스는 호스트 운영 체제에서 단순한 사용자 수준의 프로세스이며 커널에서 제공하는 네임 스페이스에 의해 격리되므로 최소한의 오버 헤드가 있으며 추가 혜택으로 격리됩니다.

여기에 설명 된 투옥 된 배쉬 디렉토리 사본은 여기에서 다운로드 할 수 있습니다.

마찬가지로 가상 투옥 환경에 명령을 더 추가할 수 있습니다. 더 복잡한 프로그램을 추가하려면’/프록’및’/개발자’와 같은 더 많은 디렉토리를 만들어야 할 수 있습니다. 이러한 프로세스의 복잡성을 증가. 바라건대 우리는 우리의 목적을 위해 그것을 필요로하지 않습니다.

이것은 당신이 치루트와 디렉토리의 감옥에 대해 알아야 할 모든 것입니다. 우리의 궁극적 인 목표는 컨테이너가 무엇인지,그리고 아마존 웹 서비스,구글 클라우드 및 도커와 같은 서비스가 주문형 운영 체제의 많은 가상 인스턴스를 제공 할 수있는 방법을 이해하는 것입니다. 또한 시스템 관리자는 단일 물리적 시스템에서 여러 도메인에 대해 여러 웹 서버를 어떻게 실행합니까? 이것은 그것을 이해하기위한 한 단계였습니다🙂

  • https://help.ubuntu.com/community/DebootstrapChroot
  • https://wiki.archlinux.org/index.php/Install_from_existing_Linux
  • http://serverfault.com/questions/162362/chroot-fails-cannot-run-command-bin-bash-no-such-file-or-directory
  • https://wiki.archlinux.org/index.php/change_root

저자 소개:
핀케시 바자티야는 하이데라바드에서 왔습니다. 그는 찾고 가치가 충분한 프로젝트와 마음에 괴짜입니다. 그의 프로젝트 작업은 여기에서 볼 수 있습니다.

또한 여기에 블로그를 전시하고자하는 경우,긱스 포지 크에 게스트 블로그 작성에 대한 지블로그를 참조하십시오.

답글 남기기

이메일 주소는 공개되지 않습니다.