chroot jailを使用したルート・ディレクトリの保護
chrootコマンドは、実行中のプロセスとその子の表示可能なルート・ディレクトリを変更するため、/以外のルート・ディレクトリでプログラムを実行するために使用できます。 プログラムは、構成済のディレクトリ・ツリー外部にあるファイルを表示することも、これにアクセスすることもできません。 このような人為的なルート・ディレクトリを"chroot jail"と呼びます。その目的は、悪意のあるプロセスやハッカーのディレクトリへのアクセスを制限することです。 chroot jailは、各プロセスおよびプロセスを使用しているすべてのユーザーIDをロック・ダウンするため、それらがアクセスできるのは、プロセスを実行しているディレクトリです。 プロセスは、実行されているディレクトリがルート・ディレクトリであると認識するようになります。
ノート:
chrootメカニズムでは、意図的な改ざんや特権ユーザーによるシステム・デバイスへの低レベルのアクセスを防ぐことはできません。 たとえば、chroot rootユーザーはデバイス・ノードを作成し、その上にファイル・システムをマウントできます。 また、root権限を取得し、chroot()を使用して現在の作業ディレクトリを実際のrootディレクトリに変更できた場合、プログラムはchroot jailの外部のリソースにアクセスできます。 このため、chroot jailにrootが所有するsetuidまたはsetgid実行可能ファイルが含まれていないことを確認することは、適切なセキュリティ・プラクティスとみなされます。
chrootプロセスを正常に開始するには、必要なすべてのプログラム・ファイル、構成ファイル、デバイス・ノードおよび共有ライブラリを、chrootディレクトリの下の想定されているそれぞれの場所に(chrootディレクトリのレベルからの相対位置で)移入する必要があります。
Chroot JailでのDNSおよびFTPサービスの実行
DNSネーム・サービス・デーモン(named)がchroot jailで実行されている場合、BINDエクスプロイトを使用してシステムにアクセスするハッカーは、chroot jailディレクトリの下のファイルに分離されます。 bind-chrootパッケージをインストールすると、/var/named/chrootディレクトリが作成され、これがすべてのBINDファイルのchroot jailとなります。
クライアントに対して自動的にchroot jailを起動するように、vsftpd FTPサーバーを構成できます。 デフォルトでは、匿名ユーザーはchroot jailに配置されます。 ただし、vsftpd FTPサーバーにアクセスしたローカル・ユーザーはそれぞれのホーム・ディレクトリに配置されます。 ローカル・ユーザーをそれぞれのホーム・ディレクトリに基づいてchroot jailに配置するには、/etc/vsftpd/vsftpd.confファイルでchroot_local_user=YESオプションを指定します。
Chroot Jailの作成
-
chroot jailの
rootディレクトリとなるディレクトリを作成します。次に例を示します:sudo mkdir /home/oracle/jail -
lddコマンドを使用して、/usr/bin/bashなど、chroot jail内の実行予定のコマンドで必要となるライブラリを特定します:
sudo ldd /usr/bin/bash次のような出力結果が表示されます。
linux-vdso.so.1 (0x00007fffa5726000) libtinfo.so.6 => /lib64/libtinfo.so.6 (0x00007f29127fa000) libc.so.6 => /lib64/libc.so.6 (0x00007f29125f1000) /lib64/ld-linux-x86-64.so.2 (0x00007f291298c000)ノート:
パスが
/lib64として表示されていても、/lib64は/usr/lib64へのシンボリック・リンクのため、実際のパスは/usr/lib64です。 同様に、/binは/usr/binへのシンボリック・リンクです。 このようなシンボル・リンクはchroot jail内で再作成する必要があります。 -
chroot jailのルート・ディレクトリのサブディレクトリを作成します。このサブディレクトリの相対パスは、コマンド・バイナリとその必須ライブラリの実際のルート・ディレクトリからの相対パスと同じです。次に例を示します:
sudo mkdir -p /home/oracle/jail/usr/binsudo mkdir -p /home/oracle/jail/usr/lib64 -
バイナリおよびライブラリ・ディレクトリにリンクするシンボリック・リンクは、実際のルート・ディレクトリに存在するシンボリック・リンクと同じ方法で作成します。次に例を示します:
sudo ln -s /home/oracle/jail/usr/bin /home/oracle/jail/binsudo ln -s /home/oracle/jail/usr/lib64 /home/oracle/jail/lib64 -
バイナリと共有ライブラリを、chroot jailのルート・ディレクトリの下のディレクトリにコピーします。たとえば:
sudo cp /usr/bin/bash /home/oracle/jail/usr/binsudo cp /usr/lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} /home/oracle/jail/usr/lib64
Chroot Jailの使用
既存のディレクトリ内のchroot jailでコマンドを実行するには(chroot_jail)、次のコマンドを使用します:
sudo chroot chroot_jail command
コマンド引数が指定されていない場合、chrootはSHELL環境変数の値で実行し、SHELLが設定されていない場合は/usr/bin/shを実行します。
たとえば、次のように、chroot jailで/usr/bin/bashコマンドを実行できます:
sudo chroot /home/oracle/jailこのシェルでpwdなどの組込みのシェル・コマンドを実行することはできますが、バイナリおよび必要な共有ライブラリをChroot jailにコピーしないかぎり、他のコマンドは実行できません。
詳細は、chroot(1)マニュアル・ページを参照してください。