chrootコマンド【change root】
概要

UNIX系システムでは、ファイルやデバイスといった様々な資源を、ルートディレクトリ「/」を起点とする階層構造のファイルシステムで管理している。通常、プロセスはシステム全体のファイルシステムにアクセスできるが、chrootコマンドを実行すると、指定したサブディレクトリより上位の階層に遡ることができなくなる。
例えば、あるユーザーのホームディレクトリ内の「/home/john/test」を指定してchrootを実行すると、そのプロセスはこのディレクトリを「/」として認識し、元のシステムの「/etc」や「/var」などには到達できない。このディレクトリ階層より下へはアクセスできるが、上位階層やそこからたどる別のディレクトリへはアクセスできない。
ソフトウェア開発の場面では、本番環境と同じパス構成を隔離領域内に再現し、既存のシステムに影響を与えずにプログラムの動作検証やパッケージ作成を行う目的で利用される。chroot環境内でプログラムを動作させるには、対象ディレクトリ内に必要な実行ファイルやライブラリ、設定ファイルをあらかじめ配置しておく必要がある。
セキュリティ面では、FTPサーバやWebサーバなどをchroot環境下で動作させることにより、万一プロセスが攻撃者に乗っ取られた場合でも、アクセス可能な範囲を指定ディレクトリ内に限定できる。この隔離環境は「chroot jail」と呼ばれる。ただし、root権限を持つプロセスはchroot環境の制約を回避できる場合があり、完全なセキュリティ境界としては機能しない。より強固な隔離が必要な場面では、「cgroups」などの隔離機能、「Docker」などのコンテナ技術が用いられる。これらもchrootと同じように、特定ディレクトリ階層より下のみをファイルシステムとして認識させる。