chroot
chrootとは、UNIXオペレーティングシステム (OS) において、
chroot システムコールは、Unix Version 7 (1979) に
用途
chroot はOSの
- テストと
開発 実際 に使用 中 のシステムで評価 するには危険 と思 われる開発 中 ソフトウェアのテスト環境 構築 に chroot を使 う。依存 関係 制御 - ソフトウェアの
開発 において、ビルドに最低限 必要 なものだけを用意 した環境 に chroot して実施 することもできる。これにより、意図 しないライブラリがリンクされてしまうのを防 ぐことができる。 互換 性 古 いソフトウェアや異 なるABIを使 っているソフトウェアは、場合 によっては chroot した環境 で実行 する必要 がある。これは例 えば、動的 リンクされるライブラリが同 じ名前 で異 なる内容 を必要 とされる場合 があるためである(名前 空間 の衝突 の回避 )。復旧 - ブートできなくなったシステムの
復旧 において、別 のブート媒体 (Live CD など)で立 ち上 げておいて、ダメージのある環境 に chroot することがある。UNIXのインストールでも、最初 はインストール媒体 で立 ち上 げておいて、最小限 インストールした時点 で chroot でディスクをルートディレクトリとすることもある。 権限 不要 の仮想 化 (一部 の限定 的 なシステム)仮想 化 のためには通常 、rootが必要 だがrootが取 れない場合 などに利用 される。主 にAndroidアプリのUserLandやtermuxはこの技術 を採用 している。特権 分離 - chroot されたプロセスのオープンしているファイル
記述 子 (ファイル、パイプ、ネットワーク接続 など)はそのまま保持 されるので、chroot したディレクトリ内 に作業 用 ファイルを残 す必要 がなく、chroot監獄 の設計 が簡略 化 される。これを応用 して、特権 プログラムの脆弱 性 のある部分 だけを chroot して実行 することで不正 なファイルアクセスを防 ぐことができる。しかし、chroot したとしてもシステムコールができなくなるわけでもなく、ブロックデバイスへのアクセスを拒否 するわけでもないため、特権 を得 た攻撃 者 にはあまり効果 がない。 - ハニーポット
- chroot はネットワークサービスを
実行 する実 システムのシミュレートにも使 われる。しかし、chroot はシステムコールを仮想 化 しないし、ブロックデバイスや仮想 ファイルシステム(Linux の /proc や /sys)へのアクセスをブロックしないので、ハニーポットに捉われた攻撃 者 がハニーポットであることに気 づく可能 性 はある。
制限
- プログラムは
一般 に起動 されたときに、一時 ファイル、設定 ファイル、スペシャルファイル、共有 ライブラリなどが特定 の位置 (ディレクトリ)にあることを期待 している。chroot されたプログラムがうまく起動 するには、chroot したディレクトリにそれらのファイルが正 しく配置 されていなければならない。このため chroot を汎用 のサンドボックス機構 として使 うのは難 しい。 - chroot を
実行 できるのはスーパーユーザーだけである。これは、精巧 に作 られたchroot監獄 (例 えば、ニセの /etc/passwd ファイルが置 いてある)の中 にユーザーが setuid プログラムを置 けないようにするためである。またこのため、特権 のないサンドボックス機構 (例 えば、一般 ユーザーがインターネットからダウンロードした信頼 できないアプリケーションをテストしてみるなど)としてchrootを使 うこともできない。 - chroot
機構 は特権 ユーザーによる意図 的 な改変 に対 する防御 となることを意図 していない。chroot されたスーパーユーザーのプロセスは特権 を制限 されない。多 くのシステムでは chroot のコンテキストは正 しくスタックされず、特権 を持 ったまま2回 目 のchrootをするとchrootから抜 け出 せる[1]。そのため、chroot したプログラムは特権 を放棄 してから処理 を続行 すべきである。 - chroot
機構 自体 は、入出力 、帯域 幅 、ディスク容量 、CPU時間 などのリソースを制限 するわけではなく、これらを行 うにはOSレベルの仮想 化 が必要 。多 くのUNIXは完全 なファイルシステム指向 ではないため、ネットワーキングやプロセス制御 などは chroot されたプログラムからもシステムコール経由 で利用 可能 である。
- Solaris の Solaris Containers
- Linux は cgroups, LXC, OpenVZ, Parallels Virtuozzo Containers, Linux-VServer, Linux FreeVPS におけるセキュリティコンテキスト
- FreeBSD の FreeBSD jail
- NetBSD および OpenBSD の sysjail
特筆 すべき応用
- メール
転送 エージェント Postfix は、ヘルパープログラムを個々 に chroot してパイプライン化 して使用 する。 - Debian と Ubuntu はパッケージのビルドにおいて chroot を
多用 し、パッケージ間 の意図 しない依存 関係 を洗 い出 す。SUSE でも同様 の手法 を build プログラム内 で行 う。 - FTPサーバの
多 くは、信頼 できないFTPクライアントのサンドボックス機構 として chroot を使用 する。コネクションに対応 してプロセスをforkし、子 プロセスを chroot する(起動 時 のプログラムに chroot しているコードを含 めないようにするため、子 プロセスで chroot させる)。 - OpenSSHデーモンで
特権 分離 をONに設定 していると、各 クライアントの認証 前 のトラフィックを処理 する際 に非 特権 ヘルパープロセスを空 のディレクトリにchrootして実行 させる。また、サンドボックスSFTPおよびシェルのセッションもchrootして実行 する(version 4.9p1以降 )[2]。 - Googleはアプリケーションをchroot
内 で動作 させている[3]。親 プロセスのrootパーティションの変更 がアプリケーションの動作 に影響 を与 えない。
fakechroot
chroot は root
関連 項目
脚注
- ^ How to break out of a chroot() jail
- ^ “sshd_config(5) manual page” (2008
年 4月 5日 ). 2008年 4月 27日 閲覧 。 - ^ “Live upgrading many thousand of servers from an ancient Red Hat distribution to a 10 year newer Debian based one.” (2013
年 ). 2018年 8月 13日 閲覧 。 - ^ fakechroot/fakechroot - GitHub
参考 文献
- chroot(2) FreeBSD
版 システムコールのmanページ - chroot(2) Linux
版 システムコールのmanページ (JM Project) - chroot(8) FreeBSD
版 コマンドのmanページ(英語 ) - chroot(1L) GNU
版 コマンドのmanページ (JM Project) - chroot(1M) コマンド Solaris 10 Reference Manual Collection(
英語 ) - chroot(1M) コマンド man page(HP-UX リファレンス)