私は次のようにルートを指定した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