| 原作者 | ビル・ジョイ、AT&T ベル研究所 |
|---|---|
| 開発者 | さまざまなオープンソースおよび商用開発者 |
| 初回リリース | 1979年 |
| オペレーティング·システム | Unix、Unix ライク、Plan 9、Inferno |
| プラットフォーム | クロスプラットフォーム |
| タイプ | 指示 |
chrootは、現在実行中のプロセスとその子プロセスの見かけ上のルート ディレクトリを変更する、UnixおよびUnix 系 オペレーティング システム上の操作です。このように変更された環境で実行されるプログラムは、指定されたディレクトリ ツリー外のファイルに名前を付けることができません (したがって、通常はアクセスできません)。「chroot」という用語は、chroot(2)システム コールまたはchroot(8)ラッパー プログラムを指す場合があります。変更された環境は、chroot jailと呼ばれます。
歴史
chroot システムコールは、1979 年のバージョン 7 Unixの開発中に導入されました。ある情報源によると、 Bill Joy は1982 年 3 月 18 日 ( 4.2BSDがリリースされる17 か月前) に、インストールとビルド システムをテストするためにこのシステムコールを追加しました。[1]カーネルを持つすべてのバージョンの BSD には chroot(2) があります。[2] [3] chroot に適用される「jail」という用語の初期の使用は、1991 年にBill Cheswick がハッカーを監視するためのハニーポットを作成したことに由来します。 [4]
脱獄についての最初の記事は、Carole Fennelly が執筆した SunWorld Online のセキュリティ コラムで取り上げられました。1999 年 8 月号と 1999 年 1 月号では、chroot() に関するトピックのほとんどが取り上げられています。[5]
FreeBSDは仮想化に役立てるためにこの概念を拡張し、2000年の4.0リリースでjailコマンドを導入した。[6]
2002年までに、Nicolas Boiteuxが書いた記事で、Linux上でjailを作成する方法が説明されました。[7]
2003年までに、Linux jailを備えた最初のインターネットマイクロサービスプロバイダーは、使用量に応じてjailに課金されるSAAS / PAAS(シェルコンテナ、プロキシ、ircd、ボットなど)サービスを提供しました。[8]
2005年までに、Sunは「強化版chroot」と評されるSolarisコンテナ(Solarisゾーンとも呼ばれる)をリリースした。 [9]
2008年までに、LXC(後にDockerの基盤となった)は「コンテナ」という用語を採用し[10] 、2013年にはLinuxカーネル3.8にユーザー名前空間が組み込まれたことで人気を博しました[11]。
用途
chroot 環境を使用すると、ソフトウェア システムの別の仮想化コピーを作成してホストできます。これは次の場合に役立ちます。
- テストと開発
- 実稼働システムに導入するにはリスクが大きすぎるソフトウェアについては、chroot 内にテスト環境を設定できます。
- 依存関係の制御
- ソフトウェアは、予想される依存関係のみが設定された chroot 内で開発、構築、テストできます。これにより、開発者が異なるプログラム ライブラリ セットをインストールしてプロジェクトを構築した場合に発生する可能性のある、ある種のリンク スキューを防ぐことができます。
- 互換性
- レガシー ソフトウェアまたは異なるABIを使用するソフトウェアは、サポート ライブラリまたはデータ ファイルがホスト システムのものと名前またはリンクで競合する可能性があるため、chroot で実行する必要がある場合があります。
- 回復
- システムが起動不能になった場合は、代替ルート ファイル システム (インストール メディアやLive CDなど) からブートストラップした後、chroot を使用して破損した環境に戻ることができます。
- 特権の分離
- プログラムは、オープンファイル記述子(ファイル、パイプライン、ネットワーク接続用) を chroot に持ち込むことができます。これにより、作業ファイルを chroot ディレクトリ内に残す必要がなくなり、jail の設計が簡素化されます。また、セキュリティ侵害を事前に阻止するために、特権プログラムの潜在的に脆弱な部分をサンドボックスで実行するという一般的な配置も簡素化されます。chroot だけでは、必ずしも root 権限を持つプロセスを阻止するのに十分ではないことに注意してください。
制限事項
chroot メカニズムは、特権 (root) ユーザーによる意図的な改ざんを防ぐためのものではありません。注目すべき例外はNetBSDです。NetBSD では chroot はセキュリティ メカニズムとみなされており、エスケープは知られていません。ほとんどのシステムでは、chroot コンテキストは適切にスタックされず、十分な権限を持つ chroot されたプログラムは 2 回目の chroot を実行して抜け出すことができます。これらのセキュリティ上の弱点のリスクを軽減するには、chroot されたプログラムは chroot 後できるだけ早く root 権限を放棄するか、FreeBSD jail などの他のメカニズムを代わりに使用する必要があります。FreeBSD などの一部のシステムでは、2 回目の chroot 攻撃を防ぐための予防措置が講じられていることに注意してください。[12]
通常のファイルシステム上でデバイスノードをサポートするシステムでは、chroot されたルートユーザーはデバイスノードを作成し、そこにファイルシステムをマウントすることができます。したがって、chroot メカニズムは、特権ユーザーによるシステムデバイスへの低レベルアクセスをブロックするために使用するものではありません。I /O、帯域幅、ディスク容量、CPU 時間などのリソースの使用を制限するものではありません。ほとんどの Unix は完全にファイルシステム指向ではなく、ネットワークやプロセス制御などの潜在的に混乱を招く機能を、chroot されたプログラムへのシステムコールインターフェースを通じて利用できるようにします。
起動時に、プログラムは、特定のプリセットされた場所でスクラッチ スペース、構成ファイル、デバイス ノード、共有ライブラリを見つけることを期待します。chroot されたプログラムが正常に起動するには、chroot ディレクトリにこれらのファイルの最小セットが設定されている必要があります。これにより、chroot を一般的なサンドボックス メカニズムとして使用することが難しくなる可能性があります。Jailkit などのツールは、このプロセスを容易にし、自動化するのに役立ちます。
chroot を実行できるのは、 root ユーザーだけです。これは、ユーザーがsetuidプログラムを特別に細工した chroot jail (たとえば、偽の/etc/passwdファイルと/etc/shadowファイルを使用) 内に配置して、権限昇格を企てることを防ぐことを目的としています。
一部の Unix では、これらの制限の少なくとも一部に対処するために chroot メカニズムの拡張が提供されています (「オペレーティング システム レベルの仮想化テクノロジの実装」を参照)。
chroot 上のグラフィカル アプリケーション
次のような方法を使用して、chroot環境でグラフィカルアプリケーションを実行することができます。[13] [14]
- xhostを使用する(または .Xauthority からシークレットをコピーする)
- Xnest やより新しいXephyrのようなネストされた X サーバー(または jail 内から実際の X サーバーを起動する)
- X11 転送 (ssh -X) 機能を使用してSSH経由で chroot にアクセスする
- xchroot は、ユーザーおよび Xorg/X11 転送 (socat/mount) 用の chroot の拡張バージョンです。
- X11 VNCサーバーと環境外のVNCクライアントの接続。
- AtomsはユーザーフレンドリーなGUIを備えたLinux Chroot管理ツールです。[15]
注目すべきアプリケーション
Postfixメール転送エージェントは、個別に chroot されたヘルパー プログラムのパイプラインとして動作します。
以前の 4.2BSD と同様に、Debian および Ubuntu の内部パッケージ構築ファームは、パッケージ間の意図しないビルド依存関係を検出するために chroot を広範に使用しています。SUSEは、ビルドプログラムで同様の方法を使用しています。Fedora、Red Hat、およびその他のさまざまな RPM ベースのディストリビューションは、mock などの chroot ツールを使用して すべてのRPMを構築します。
POSIX システム用の多くのFTP サーバーは、信頼できない FTP クライアントをサンドボックス化するために chroot メカニズムを使用します。これは、着信接続を処理するプロセスをフォークし、次に子プロセスを chroot することによって実行できます (プログラムの起動に必要なライブラリを chroot に取り込む必要がないようにするため)。
権限分離が有効になっている場合、OpenSSHデーモンは権限のないヘルパープロセスを空のディレクトリにchrootし、各クライアントの事前認証ネットワークトラフィックを処理します。デーモンは、chroot内でSFTPおよびシェルセッションをサンドボックス化することもできます(バージョン4.9p1以降)。[16]
ChromeOSはchrootを使用してCrouton [17]を使用してLinuxインスタンスを実行することができ、それ以外の薄いOSにハードウェアリソースへのアクセスを提供します。この記事に関連するセキュリティ上の意味合いはここに当てはまります。
Linux ホストカーネルの仮想ファイルシステムと構成ファイル
Linux で機能的な chroot 環境を実現するには、カーネルの仮想ファイル システムと構成ファイルもホストから chroot にマウント/コピーする必要があります。
# カーネル仮想ファイルシステムを
マウント TARGETDIR = "/mnt/chroot"
mount -t proc proc $TARGETDIR /proc
マウント -t sysfs sysfs $TARGETDIR /sys
マウント -t devtmpfs devtmpfs $TARGETDIR /dev
マウント -t tmpfs tmpfs $TARGETDIR /dev/shm
マウント -t devpts devpts $TARGETDIR /dev/pts
# /etc/hosts をコピー
/bin/cp -f /etc/hosts $TARGETDIR /etc/
# /etc/resolv.conf をコピー
/bin/cp -f /etc/resolv.conf $TARGETDIR /etc/resolv.conf
# リンク /etc/mtab
chroot $TARGETDIR rm /etc/mtab 2 > /dev/null
chroot $TARGETDIR ln -s /proc/mounts /etc/mtab
参照
参考文献
- ^ "jail, section 9". docs.freebsd.org . 2017-01-05 にオリジナルからアーカイブ。2016-03-14に取得。
- ^ Losh, Warner (2000年2月2日). 「Warner's Random Hacking Blog: Whither chroot?」. 2020年6月28日時点のオリジナルよりアーカイブ。 2020年6月28日閲覧。
- ^ 「Data Infrastructures for the rest of us - III - software」。2020年6月30日時点のオリジナルよりアーカイブ。 2020年6月28日閲覧。
- ^ チェスウィック、ビル(1991)。「ベルファードとの夕べ:クラッカーを誘惑し、耐え、研究する」(PDF)。USENIX夏季会議議事録、第 1 巻。USENIX 。カリフォルニア州サンフランシスコ:協会。p. 163。2018年 11 月 5 日にオリジナルからアーカイブ(PDF)。2018 年 6 月 9 日に取得。
- ^ キャロル・フェネリー。「サマータイム・ポットラック」。サンワールド・オンライン。キャロル・フェネリー。2021年9月28日時点のオリジナルよりアーカイブ。
- ^ Riondato, Matteo. 「FreeBSD ハンドブック「Jails」の章」. freebsd.org . FreeBSD プロジェクト。2014 年 8 月 15 日時点のオリジナルよりアーカイブ。2018年 10 月 30 日閲覧。
- ^ Nicolas, Boiteux. 「chroot シェル」. lycos.fr . Nicolas Boiteux. 2002年10月14日時点のオリジナルよりアーカイブ。 2018年3月24日閲覧。
- ^ “Girafon”. girafon.org . girafon. 2004年6月12日時点のオリジナルよりアーカイブ。 2018年3月24日閲覧。
- ^ Schmidt, Klaus (2006-09-02). 高可用性と災害復旧: 概念、設計、実装。Springer Science & Business Media。p . 186。ISBN 9783540345824. 2023年2月20日時点のオリジナルよりアーカイブ。2014年8月21日閲覧。
- ^ 「SourceForge LXC ダウンロード ファイル」。sourceforge.net。2014年 8 月 19 日時点のオリジナルよりアーカイブ。2014 年 8 月 21 日閲覧。
- ^ Rosen, Rami (2014-03-26). 「Linux コンテナーと将来のクラウド」(PDF)。2016-04-18 にオリジナルからアーカイブ(PDF) 。2014-08-21に取得。
- ^ "chroot(2)". www.freebsd.org . 2020年9月18日時点のオリジナルよりアーカイブ。2020年12月2日閲覧。
- ^ 「Development/Howto/Chroot」。Mandriva Wiki。2011年7月25日。2014年3月26日時点のオリジナルよりアーカイブ。
- ^ 「chroot で startx を実行する方法」Gentoo Wiki。2011 年 8 月 31 日時点のオリジナルよりアーカイブ。2011 年 10 月 13 日閲覧。
- ^ David, Redfield (2023年10月10日). 「AtomsはユーザーフレンドリーなGUIを備えたLinux Chroot管理ツールです」.
- ^ 「sshd_config(5) マニュアルページ」 2017-10-26. 2018-02-05 にオリジナルからアーカイブ。 2018-02-04に取得。
- ^ 「Chromium OS Universal Chroot Environment (on github)」。GitHub。2016年11月25日時点のオリジナルよりアーカイブ。2016年12月17日閲覧。
