Linuxカーネルがあり、/var/chroot
で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
明らかにbashを起動できたので、基本的な権利があります。ldd /bin/command
によってリストされたすべてのライブラリを library load path 上のディレクトリに加えて、ローダー自体( /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ビットのライブラリを実行しています。
さらに問題が発生している場合は、ローダーがライブラリを見つけようとしている場所を正確に見つけることが役立つ場合があります。 chrootに strace
バイナリ(静的にコンパイルされたもの、または動的にコンパイルされたものと必要なすべてのライブラリ)を配置し、chroot ls
を実行して、正確には何が失敗しています。または、strace chroot ls
を実行して、chrootの外部にあるstrace
バイナリを使用します。
試す
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
はシンボリックリンクの内容をコピーします。