一時ルート刑務所を作成するために、テスト目的でchrootコマンドを使用してみましたが、成功しませんでした。プラットフォームはCentOS 6.4です。今回を除いてこれまで何度もやってきました。私は次の順序でプログラムを実行しました。
bin
、、、etc
およびディレクトリhome
を作成します。lib
var
ldd /bin/bash
lib
上記のディレクトリ内のすべてのライブラリをコピーしてください。/bin/bash
bin
これにより、実行が
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」も使えば本当に素敵です。読み取り可能なレイヤーの上に書き込み可能なレイヤーを配置できます。これにより、コピーして読み取り専用にバインドマウントする必要はありませんが、それでも書き込み可能になり、すべての書き込みが一部のプレースホルダに保存されます。もう一度試すもう1つの方法は、「cp -l」リンクコピーを使用することです。次に、記録中のコピーを意味する「牛」があります。それがすることは、まずコピーを作成することです。ただし、すべてのディレクトリエントリはディスク上の同じノードを指します。コピーのように見えますが、すべて接続されています。シンボリックリンクではなくハードリンクです。牛はファイルに書き込もうとすると、ファイルの実際の内容が最初にコピーされ、次に変更されます。