루트 감옥을 생성할 수 없습니다

루트 감옥을 생성할 수 없습니다

임시 루트 감옥을 만들기 위해 테스트 목적으로 chroot 명령을 사용해 보았지만 성공하지 못했습니다. 플랫폼은 CentOS 6.4입니다. 이번을 제외하고 지금까지 여러 번 해왔습니다. 저는 다음 순서로 프로그램을 실행했습니다.

  1. bin, etc, 및 디렉토리 home를 생성합니다 .libvar
  2. ldd /bin/bash
  3. lib위 디렉토리의 모든 라이브러리를 복사 하고 ./bin/bashbin
  4. 그러면 실행이 chroot /path/to/the/jail다음과 같이 나타납니다.

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

이 오류가 어디서 발생하는지 알 수 없으며 이전에는 이와 같은 문제가 발생한 적이 없습니다. Ubuntu 서버에서도 동일한 프로세스가 잘 작동합니다. 문제는 이 특정 서버에서만 발생합니다.

아래 설명을 바탕으로 디버그 명령의 일부 출력은 다음과 같습니다.

[root@localhost chroot]# find -printf '%M %p\n'
 drwxr-xr-x.
 drwxr-xr-x ./bin
 -rwxr-xr-x ./bin/bash
 drwxr-xr-x ./var
 drwxr-xr-x ./var/var
 drwxr-xr-x ./home
 drwxr-xr-x ./lib
 -rwxr-xr-x ./lib/libdl.so.2
 -rwxr-xr-x ./lib/libc.so.6
 -rwxr-xr-x ./lib/libtinfo.so.5
 -rwxr-xr-x ./lib/ld-linux-x86-64.so.2
 drwxr-xr-x ./etc.
[root@localhost bin]# ldd /mnt/proba1/chroot/bin/bash
 linux-vdso.so.1 => (0x00007fff6fe00000)
 libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f12cdd40000)
 libdl.so.2 => /lib64/libdl.so.2 (0x00007f12cdb38000)
 libc.so.6 => /lib64/libc.so.6 (0x00007f12cd7a0000)
 /lib64/ld-linux-x86-64.so.2 (0x00007f12cdf70000)

답변1

출력은 해당 라이브러리가 가 아닌 에서 발견될 것으로 예상한다는 것을 ldd보여줍니다 . 또한 이는 해당 라이브러리를 복사해야 함을 의미합니다.bash/lib64/lib~에서 /lib64감옥 내에서 해당 디렉토리를 입력하십시오. 에서 발견된 동일한 파일은 /lib작동하지 않습니다.

답변2

내가 한 것은 이를 위해 "mount --bind"를 사용하는 것이었습니다. 읽기 전용으로 설정할 수도 있습니다. 예를 들어:

mkdir test
cd test
mkdir bin sbin usr etc
mount --bind -o ro /bin bin
mount --bind -o ro /sbin sbin
mount --bind -o ro /usr usr
mount --bind -o ro /etc etc
chroot .

거기까지는 아니지만 요점을 알 수 있습니다. "aufs"도 사용하면 정말 멋질 것입니다. 읽기 가능한 레이어 위에 쓰기 가능한 레이어를 배치할 수 있습니다. 이렇게 하면 복사하고 읽기 전용으로 바인드 마운트할 필요가 없지만 여전히 쓰기 가능하게 만들고 모든 쓰기가 일부 자리 표시자에 저장됩니다. 시도해 볼 또 다른 방법은 "cp -l" 링크 복사를 사용하는 것입니다. 그 다음에는 기록 중 복사를 의미하는 "소"가 있습니다. 그것이 하는 일은 먼저 복사본을 만드는 것입니다. 그러나 모든 디렉터리 항목은 디스크의 동일한 노드를 가리킵니다. 복사본처럼 보이지만 모두 연결되어 있습니다. 심볼릭 링크가 아니라 하드 링크입니다. 암소는 파일에 쓰려고 할 때 파일의 실제 내용이 먼저 복사된 다음 수정됩니다.

관련 정보