web-dev-qa-db-ja.com

chroot "jail"-それは何で、どのように使用しますか?

Linuxでchroot jailについて多くのことを聞いたり読んだりしましたが、まだ使用していません(毎日Fedoraを使用しています)ので、chroot "jail"とは何ですか?いつ、なぜそれを使用する/使用しないのか、そして他に知っておくべきことはありますか?どうすれば作成できますか?

107
user119

Chroot jailは、プロセスとその子をシステムの他の部分から分離する方法です。 rootユーザーはjailから非常に簡単に抜け出すことができるため、rootとして実行されないプロセスにのみ使用してください。

アイデアは、プロセスの実行に必要なすべてのシステムファイルをコピーまたはリンクするディレクトリツリーを作成することです。次に、chroot()システムコールを使用して、ルートディレクトリをこの新しいツリーのベースに変更し、そのchrootされた環境で実行されているプロセスを開始します。変更されたルートの外部のパスを実際に参照することはできないため、それらの場所で悪意のある操作(読み取り/書き込みなど)を実行することはできません。

Linuxでは、バインドマウントを使用すると、chrootツリーにデータを追加できます。これを使用すると、たとえば、/lib/usr/libなどのフォルダーをプルしながら、/usrをプルしないことができます。 jailディレクトリに作成したディレクトリに、必要なディレクトリツリーをバインドするだけです。

97
Ben Combee

「chroot刑務所」は実際には絶滅するはずの誤称ですが、人々はそれを使い続けています。 chrootは、ファイルシステムのルートとしてファイルシステム上のディレクトリをシミュレートできるツールです。つまり、次のようなフォルダ構造を持つことができます。

-- foo
    -- bar
    -- baz
-- bazz

もし、あんたが chroot foo そして、やります ls /、 わかるでしょ:

-- bar
-- baz

ls(および実行するその他のツール)に関する限り、これらはファイルシステム上の唯一のディレクトリです。 「刑務所」が誤った名称である理由は、chrootforceを意図したものではなく、そのシミュレートされたファイルシステムに留まるプログラムです。 chroot "jail"にあることを知っているプログラムはかなり簡単にエスケープできるので、chrootをセキュリティ対策として使用して、プログラムがシミュレートされたファイルシステム外のファイルを変更するのを防ぐ必要があります。

53
Michael Mrozek

基本的には、環境のルートディレクトリを変更するだけです。そう

/

なる

/some-jail/ (or whatever directory you want)

アプリケーションが/にアクセスすると、/ some-jail /を取得します。また、アプリケーションは/ some-jail /から抜け出すことができないので、マシン上の他の何にもアクセスしないことがわかります。これは非常に単純な言い方です。「私が提供しているものにしかアクセスできず、システム上の他のものにはアクセスできません。

12
jacksonh

「いつ、なぜ私はそれを使うのでしょうか?」

1つの用途は、絶対パス参照を作成する、またはインターセプトしてログに記録する(そしておそらく何もしない)コマンドを実行するスクリプト(ブート時など)をテストすることです-それらのコマンドを実行したくない環境で実際に実行環境で動作します。

たとえば、Linuxを実行している埋め込みデバイスがある場合、a)を実際のデバイスで実行せずにbashの動作を確認したいと思います(デスクトップに優れたツールがあり、デバイスをブリックしたくないため)b)実行中デスクトップで実際に使用する(デスクトップシステムを台無しにしたくないので)

さらに、「chroot jail」に存在しないコマンドまたはシェルスクリプトを実行しようとすると、実行がエラーで終了するため、使用されているコマンドまたは他のスクリプトファイルを検出できます。

(もちろん、すべてを独占するために、QEMUやDocker、またはVM内で実行することもできますが、VMイメージなどを作成する必要があります-より多くの作業)

6
MikeW