(Translated by https://www.hiragana.jp/)
chroot - Wikipedia

chrootとは、UNIXオペレーティングシステム (OS) において、現在げんざいのプロセスとそのプロセスぐんたいしてルートディレクトリ変更へんこうする操作そうさである。ルートディレクトリをべつのディレクトリに変更へんこうされたプロセスは、その範囲はんいがいのファイルにはアクセスできなくなるため、この操作そうさchroot監獄かんごく模擬もぎルートなどともぶ。"chroot" は chroot(2) システムコールおよび chroot(8) コマンドを意味いみする。

chroot システムコールは、Unix Version 7 (1979) にしん機能きのうとしてくわえられ、1982ねん3月18にち4.2BSDリリースの17ヶ月かげつまえ)、ビル・ジョイがインストールおよびビルドシステムのテストようにBSDに導入どうにゅうしたのが起源きげんである。

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 されたプログラムからもシステムコール経由けいゆ利用りよう可能かのうである。

一部いちぶのUNIXはこれらの制限せいげん一部いちぶ対処たいしょした拡張かくちょう用意よういしている(OSレベルの仮想かそうばれる)。

特筆とくひつすべき応用おうよう

編集へんしゅう
  • メール転送てんそうエージェント Postfix は、ヘルパープログラムを個々ここに chroot してパイプラインして使用しようする。
  • DebianUbuntu はパッケージのビルドにおいて chroot を多用たようし、パッケージあいだ意図いとしない依存いぞん関係かんけいあらす。SUSE でも同様どうよう手法しゅほうを build プログラムないおこなう。
  • FTPサーバおおくは、信頼しんらいできないFTPクライアントのサンドボックス機構きこうとして chroot を使用しようする。コネクションに対応たいおうしてプロセスをforkし、プロセスを chroot する(起動きどうのプログラムに chroot しているコードをふくめないようにするため、プロセスで chroot させる)。
  • OpenSSHデーモンで特権とっけん分離ぶんりをONに設定せっていしていると、かくクライアントの認証にんしょうまえのトラフィックを処理しょりするさい特権とっけんヘルパープロセスをそらのディレクトリにchrootして実行じっこうさせる。また、サンドボックスSFTPおよびシェルのセッションもchrootして実行じっこうする(version 4.9p1 以降いこう[2]
  • Googleはアプリケーションをchrootない動作どうささせている[3]おやプロセスのrootパーティションの変更へんこうがアプリケーションの動作どうさ影響えいきょうあたえない。

chroot は root 権限けんげん必要ひつようだが、LD_PRELOAD を使つかい、open() などにフックをかけて root 権限けんげんなしで chroot と同等どうとうのことをおこなう fakechroot がある[4]

関連かんれん項目こうもく

編集へんしゅう

脚注きゃくちゅう

編集へんしゅう
  1. ^ How to break out of a chroot() jail
  2. ^ sshd_config(5) manual page” (2008ねん4がつ5にち). 2008ねん4がつ27にち閲覧えつらん
  3. ^ Live upgrading many thousand of servers from an ancient Red Hat distribution to a 10 year newer Debian based one.” (2013ねん). 2018ねん8がつ13にち閲覧えつらん
  4. ^ 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 リファレンス)