Linuxでchroot Jailについてたくさん聞いたり読んだりしましたが、試したことがありません(私は毎日Fedoraを使用しています)。それでは、chroot「刑務所」とは何ですか?いつ、なぜ使用/使用しない可能性があり、さらに知っておくべきことがありますか?どうやって作れますか?
答え1
Chroot Jail は、プロセスとそのサブプロセスをシステムの残りの部分から分離する方法です。 rootユーザーは簡単に脱獄できるため、rootとして実行されていないプロセスでのみ使用してください。
アイデアは、プロセスを実行するために必要なすべてのシステムファイルがコピーまたはリンクされるディレクトリツリーを作成することです。次に、chroot()
システムコールを使用してルートディレクトリを新しいツリーのルートディレクトリに変更し、chroot環境内で実行されるプロセスを開始します。変更されたルートディレクトリ外のパスを実際に参照できないため、その場所で悪意のある操作(読み取り/書き込みなど)を実行できません。
Linuxでは、バインドマウントを使用することがchrootツリーを埋めるのに最適な方法です。たとえば、これを使用すると、同じ/lib
フォルダをインポートできますが、/usr/lib
そうでないフォルダはインポートできます。/usr
目的のディレクトリツリーを刑務所ディレクトリで作成したディレクトリにバインドするだけです。
答え2
「chroot刑務所」は本当に消えなければならない間違った名前ですが、人々はまだそれを使用しています。chroot
ファイルシステムのディレクトリをファイルシステムのルートとしてエミュレートできるツールです。これは、次のフォルダ構造を持つことができることを意味します。
-- foo
-- bar
-- baz
-- bazz
chroot foo
これにより、次のようにls /
なります。
-- bar
-- baz
ls
(そして実行している他のツールまで)これはファイルシステムの唯一のディレクトリです。 「刑務所」が間違った名称である理由chroot
はそれのためではない。力エミュレートされたファイルシステムに残っているプログラム。自分がchroot "刑務所"にあることを知っているプログラムはかなり簡単にエスケープできるので、プログラムがchroot
エミュレートされたファイルシステム外のファイルを変更するのを防ぐためのセキュリティ対策として使用してはいけません。
答え3
デフォルトでは、環境のルートディレクトリのみを変更できます。だから
/
~になる
/some-jail/ (or whatever directory you want)
アプリケーションが/にアクセスすると、/some-jail/が得られます。また、アプリケーションは/some-jail/から離れることができないため、コンピュータの他のものにアクセスできないことがわかります。これは「ねえ、あなたは私が提供したものにのみアクセスでき、システムの他のものにもアクセスできません」と言う非常に簡単な方法です。
答え4
chroot は、より近代的な用語である仮想環境として容易に理解されます。プロセスは、パスの可視性を設定するために新しい仮想ルートディレクトリを取得します。これは、主にプロセスが参照できるファイルとライブラリを制御する簡単で簡単な方法です。これは、実際のファイルシステムでバージョンが異なる可能性がある項目を分離するのに非常に役立ちます。
ファイルシステムに表示される内容の一種のフィルタと考えることもできます。
予期しないファイルシステムの表示を防ぐために、chroot以降の現在の作業ディレクトリを変更することも考慮することが重要です。
誤解しやすいものの1つは「刑務所」という言葉です。 Chrootは、歴史的にFreeBSDが刑務所と呼ばれるものをシミュレートするために使用されました(他の人はこれをサンドボックスと呼ぶことがあります)。これを行うには、プロセスの権限を直接下げる必要があります。これは良いセキュリティモデルではありません。
一般的なユースケースは、システムが実際に持っているもののサブセットである特定のツールチェーン、またはライブラリ、ファイル、およびツールセットへの参照を必要とするソフトウェアをコンパイルすることです。