chroot刑務所は、実際のファイルシステムと相互作用のない他の世界のようです。したがって、環境全体はchroot内に複製する必要があり、これは完全なシステムインストールを意味します。
しかし、chroot Jailにネイティブファイルシステムへの読み取りアクセスを許可する方法はありますか?また、chrootが独自のファイルの優先順位を指定したいと思います。たとえば、/usr/bin/wget
そのファイルが存在する場合、システムの/usr/bin/wget
。
(実際に私は次のようなものを探しています。砂箱.)
上記の内容は可能ですか?
答え1
次のコマンドを使用して、ディレクトリをchrootディレクトリにバインドマウントできます。
mount -o bind /x/y /chroot/x/y
(望むよりman mount
、「バンドルのインストール」セクション)。これ以降、すべてのアクセスは/chroot/x/y
アクセスと同じです/x/y
(同じファイルのリスト、同じコンテンツ、同じinode)。
ただし、これはディレクトリ全体をそのまま残すことに注意してください。 chroot内のプロセスはディレクトリに書き込むことができます。「実際の」ディレクトリに書き込むことができます。外部。 chroot内でマウントを読み取り専用にするには、バインド後に明示的に読み取り専用に再マウントする必要があります。
mount -o remount,ro /chroot/x/y
元の/ x / yは読み取り/書き込みのままですが、コピーは読み取り専用になりました。
ファイルの内部コピーを好む。、または元のファイルやディレクトリに影響を与えずに既存のファイルやディレクトリへの書き込みを許可するには、次のようにします。連合ファイルシステム。これにより、複数のディレクトリツリーを重ね合わせて書き込みが行われる場所と、読み出しが解析される順序を指定できます。 Linux用の共通統合ファイルシステムは次のとおりです。オブ、連合ファイルシステムとUnionFS ヒューズ。最初の2つはカーネルモジュールで、最後の1つはカーネルモジュールを使用します。ヒューズユーザー空間でファイルシステムを実行します。カーネルモジュールは通常より高速ですが、chrootで外部ユーザースペースツールを使用したくない場合でも、FUSEバージョンは設定が簡単です。必要な統合ファイルシステムを準備し、そのシステムにchrootできます。
それぞれの場合、基本的なアプローチは同じです。たとえば、次のようになります。
unionfs-fuse -o cow /jail/bin:/other/bin:/bin /chroot/bin
/chroot/bin
これにより、ファイルが/jail/bin
存在する場合は優先順位が与えられ、次に試行される統合マウントが作成され/other/bin/
、それ以外のファイルが表示されます/bin
。-o cow
記録中にコピーしてください。たとえば、書き込み試行がコピーされ、修正/chroot/bin/foo
が/bin/foo
保存/jail/bin/foo
されます。この動作を望まない場合は、このオプションを無視してください。他のファイルシステムは構成が少し異なりますが、原則は同じです。
どのように設定しても、次のことができます。
chroot /chroot
そして、すべてが好きなように機能するようにしてください。
答え2
mount -o binはディレクトリ全体に対してこれを行う必要があります。
mount -o bind /bin /chroot/bin
chroot /chroot
chrootにsystem / binのコピーが作成されます。
bashのコピーを/chroot/bin/bashに置き換えて、現在と同じように処理するには、/chroot/usr/local/binに入れて、それに応じてPATHを設定します。