나는 다음과 같이 루트를 지정한 Linux 커널을 가지고 있습니다 /var/chroot
.
bash
다음과 같이 종속성을 추가했습니다 .
ldd /bin/bash
linux-vdso.so.1 => (0x00007fff9a373000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f24d57af000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f24d55ab000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f24d51eb000)
/lib64/ld-linux-x86-64.so.2 (0x00007f24d59f8000)
그런 다음 나는 다음을 수행했습니다.
# cd /var/chroot/
# mkdir bin/ lib64/ lib/
# cp /lib/x86_64-linux-gnu/libtinfo.so.5 lib/
# cp /lib/x86_64-linux-gnu/libdl.so.2 lib/
# cp /lib/x86_64-linux-gnu/libc.so.6 lib/
# cp /lib64/ld-linux-x86-64.so.2 lib64/
# cp /bin/bash bin/
이후:
# chroot /var/chroot
그 후에 복사했는데 /bin/ls
실행 ldd ls
하면 ls
다음과 같은 오류가 발생합니다.
ls: error while loading shared libraries: libpthread.so.0: wrong ELF class: ELFCLASS32
답변1
분명히 bash를 시작할 수 있으므로 기본 사항을 올바르게 이해한 것입니다. 나열된 모든 라이브러리를 ldd /bin/command
다음 위치에 복사해야 합니다.라이브러리 로드 경로/lib64/ld-linux-x86-64.so.2
, 실행 파일의 하드 코딩된 위치에 있어야 하는 로더 자체( ).
오류가 발생하는 경우
error while loading shared libraries: libc.so.6: cannot open shared object file
그러면 여기서 지적한 라이브러리가 누락되었습니다. 올바른 이름으로 올바른 디렉토리에 배치되었는지 확인하십시오. 심볼릭 링크뿐만 아니라 라이브러리 파일도 복사했는지 확인하세요.
오류가 발생하는 경우
ls: error while loading shared libraries: libpthread.so.0: wrong ELF class: ELFCLASS32
그런 다음 잘못된 아키텍처에 대한 라이브러리를 복사했습니다. 32비트 라이브러리를 복사해야 했지만 libpthread.so.0
64비트 라이브러리를 실행하고 있었습니다.
다른 문제가 있는 경우 로더가 라이브러리를 찾으려고 하는 위치를 정확히 찾는 것이 도움이 될 수 있습니다. 하나 넣어strace
바이너리(정적으로 컴파일된 바이너리 또는 동적으로 컴파일된 바이너리와 필요한 모든 라이브러리)를 chroot한 다음 실행 chroot ls
하고 정확히 무엇이 실패하는지 확인하세요. 또는 chroot 외부에서 바이너리를 strace chroot ls
사용하려면 실행하세요.strace
답변2
주의 깊은. 공유 라이브러리 파일은 일반적으로 심볼릭 링크됩니다. 이렇게 하면 현재 버전이 변경되며 설치된 모든 응용 프로그램은 계속해서 이를 찾을 수 있습니다. 예를 들어 내 시스템에서는 다음과 같습니다.
ls -l /usr/lib/libc.so.6
lrwxrwxrwx 1 root root 12 dec 27 03:13 /usr/lib/libc.so.6 -> libc-2.20.so*
따라서 libc.so.6
실제로 현재 libc 버전을 가리키면 시스템을 업데이트할 때 그것이 무엇이든 새 버전을 가리킬 것입니다. 종종 여러 수준의 연결이 있습니다.
링크뿐만 아니라 실제 라이브러리를 복사해야 합니다.
답변3
노력하다
mkdir lib/x86_64-linux-gnu
cp /lib/x86_64-linux-gnu/libtinfo.so.5 /lib/x86_64-linux-gnu/libdl.so.2 /lib/x86_64-linux-gnu/libc.so.6 lib/x86_64-linux-gnu
ls와 같은 명령을 사용하려면 ldd /bin/ls
라이브러리 파일도 복사해야 합니다.
그런데 cp
심볼릭 링크의 내용이 복사됩니다.