
Linux の chroot jail についてはよく聞いたり読んだりしていますが、まだ使用したことはありません (日常的には Fedora を使用しています)。chroot "jail" とは何でしょうか? いつ、なぜ使用したり使用しないのでしょうか。また、他に知っておくべきことはありますか? どのように作成すればよいのでしょうか?
答え1
chroot jail は、プロセスとその子プロセスをシステムの他の部分から分離する方法です。root ユーザーは jail から簡単に抜け出すことができるため、これは root として実行されないプロセスにのみ使用する必要があります。
アイデアとしては、プロセスの実行に必要なすべてのシステム ファイルをコピーまたはリンクするディレクトリ ツリーを作成します。次に、システムchroot()
コールを使用してルート ディレクトリをこの新しいツリーのベースに変更し、その chroot 環境でプロセスの実行を開始します。変更されたルートの外部のパスを実際に参照することはできないため、それらの場所で悪意のある操作 (読み取り/書き込みなど) を実行することはできません。
Linux では、バインド マウントを使用すると、chroot ツリーを作成するのに最適です。これを使用すると、たとえば、 や などのフォルダーをプルインしながら、 をプルインしないようにすることができます/lib
。/usr/lib
必要/usr
なディレクトリ ツリーを、jail ディレクトリに作成したディレクトリにバインドするだけです。
答え2
「chroot jail」は、本当に消え去るべき誤った名称ですが、人々はそれを使い続けています。chroot
は、ファイルシステム上のディレクトリをファイルシステムのルートとしてシミュレートできるツールです。つまり、次のようなフォルダ構造を持つことができます。
-- foo
-- bar
-- baz
-- bazz
chroot foo
と を実行するとls /
、次のようになります。
-- bar
-- baz
(そしてあなたが実行する他のツールに関して言えば)それらはファイルシステム上の唯一のディレクトリです。「jail」が誤った名称でls
ある理由は、chroot
力プログラムはシミュレートされたファイルシステム内に留まる必要があります。chroot「監獄」内にいることを知っているプログラムは簡単に脱出できるため、chroot
シミュレートされたファイルシステム外のファイルをプログラムが変更するのを防ぐセキュリティ対策として使用すべきではありません。
答え3
基本的には、環境のルートディレクトリを変更するだけです。
/
なる
/some-jail/ (or whatever directory you want)
アプリケーションが / にアクセスすると、/some-jail/ を取得します。また、アプリケーションは /some-jail/ から抜け出すことができないため、マシン上の他のものにアクセスできないことがわかります。これは、「私が提供したものにのみアクセスでき、システム上の他のものにはアクセスできません」と伝える非常に簡単な方法です。
答え4
chroot は、より現代的な用語である仮想環境として簡単に理解できます。プロセスは、パスの可視性を確立するために、新しい仮想ルート ディレクトリを取得します。これは主に、プロセスが参照できるファイルとライブラリを制御するための便利で簡単な方法です。実際のファイル システムで利用可能なバージョンが異なる可能性があるものから分離するのに非常に役立ちます。
また、これはファイル システム内で表示される内容に対する一種のフィルターと考えることもできます。
ファイル システムの予期しない表示を回避するために、chroot 後に現在の作業ディレクトリを変更することも検討することが重要です。
誤解を招くのは、jail という用語です。歴史的には、FreeBSD が jail と呼んでいるもの (他の人はサンドボックスと呼ぶかもしれません) をシミュレートするために chroot が使用されてきました。これを行うには、プロセスの権限を自ら削減する必要もあります。優れたセキュリティ モデルではありません。
一般的な使用例は、システムが実際に持っているもののサブセットである特定のツールチェーンまたはライブラリとファイルとツールのセットを参照する必要があるソフトウェアをコンパイルする場合です。