その名前が示すように、chroot 操作は、実行中のプロセスとその子プロセスの見かけのルート ディレクトリを変更します。 / 以外のルート ディレクトリでプログラム (プロセス) を実行できます。プログラムは、指定されたディレクトリ ツリーの外部にあるファイルを参照したり、アクセスしたりできません。
たとえば、プログラムを実行し、そのルート ディレクトリを /home/user/jail として指定できます。この場合、プログラムのルート ディレクトリは実際には /home/user/jail です。プログラムは、階層内でこのディレクトリより上にあるファイルを認識することも、アクセスすることもできません。
この人工的なルート ディレクトリは chroot jail と呼ばれます .その目的は、潜在的な攻撃者のディレクトリ アクセスを制限することです。 chroot jail は、プロセスが実行されているディレクトリのみがユーザーに表示されるように、特定のプロセスとそれが使用しているすべてのユーザー ID をロックダウンします。プロセスには、
それがルート ディレクトリで実行されているように見えます。
chroot jail の目的は次のとおりです。
– 特権 (root) ユーザーによる意図的な改ざんから防御する。
– 特権ユーザーによるシステム デバイスへの低レベル アクセスをブロックするために使用する。 chroot root ユーザーは引き続きデバイス ノードを作成し、それらにファイル システムをマウントできます。
chroot プロセスを正常に開始するには、必要なすべてのプログラム ファイル、構成ファイル、デバイス ノード、および共有ライブラリを chroot ディレクトリに配置する必要があります。
chroot ユーティリティの使用
1. chroot jail を使用するには、次のコマンドを使用します (new_root は既存のディレクトリである必要があります):
# chroot new_root [command]
2. new_root ディレクトリが仮のルート ディレクトリになります。 chroot は new_root に変更し、オプションのコマンドを実行します。コマンドを引数として指定しないと、chroot は new_root に変更され、SHELL 環境変数の値を実行するか、SHELL が設定されていない場合は /bin/sh を実行します。
3. たとえば、SHELL が /bin/bash に設定され、/home/user/jail ディレクトリが存在すると仮定すると、chroot コマンドを実行すると次のようになります:
# chroot /home/user/jail chroot: failed to run command ‘/bin/bash’: No such file or directory
4. /home/user/jail ディレクトリの名前は / です。 chroot は、この chroot jail 内で /bin/bash を見つけることができず、エラー メッセージを返します。 chroot jail を実装するには、chroot コマンドを実行する前に、新しいルート ディレクトリ構造を作成し、必要なすべてのファイルをこの新しいルート ディレクトリにコピーします。
chroot Jail の設定
1. chroot jail を実装して /bin/bash を実行するには、人工ルート ディレクトリ (この例では /home/oracle/jail) に bin ディレクトリを作成し、/bin/bash をこのディレクトリにコピーします。
$ mkdir /home/oracle/jail/bin $ cp /bin/bash /home/oracle/jail/bin
2. /bin/bash コマンドは、共有ライブラリに動的にリンクされます。これらのライブラリも chroot jail にコピーする必要があります。 ldd コマンドを使用して、/bin/bash コマンドで必要なライブラリを特定します。
# ldd /bin/bash linux-vdso.so.1 => (0x00007fff11bff000) libtinfo.so.5 => /lib64/libtinfo.so.5 (0x0000003728800000) libdl.so.2 => /lib64/libdl.so.2 (0x0000003d56400000) libc.so.6 => /lib64/libc.so.6 (0x0000003d56800000) /lib64/ld-linux-x86-64.so.2 (0x0000003d56000000)
3. これらの各ファイルを人工ルート ディレクトリの lib64 ディレクトリにコピーします。 lib64 ディレクトリを作成し、共有ライブラリをこのディレクトリにコピーします:
$ mkdir /home/oracle/jail/lib64 $ cp /lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} /home/oracle/jail/lib64
4. 必要なすべてのファイルが想定される場所に配置されたので、chroot コマンドを (root として) 実行すると、次のようになります:
# chroot /home/oracle/jail
5. 今度はコマンドが成功し、/bin/bash プログラムが実行されました。 pwd を入力して現在のディレクトリを表示すると、実際のディレクトリは /home/oracle/jail ですが、/ が表示されます:
# pwd /
pwd コマンドは、シェル組み込みコマンドであるため実行されます。 bash がコマンドを見つけられないため、他のコマンドの実行は失敗します。このプロセスは、それがルート ディレクトリにあり、階層内でこのディレクトリより上にあるファイルを認識したり認識したりしないことを前提としています。たとえば、ls コマンドの実行は失敗します:
# ls bash: ls: command not found
6. exit コマンドを使用して、chroot 監獄を終了します。
# exit exit #CentOS / RHEL :chroot jail SFTP を設定する方法
CentOS / RHEL :すべてのユーザーに対して vsftp の chroot jail を設定する方法
CentOS / RHEL :特定のユーザのみ vsftp に対して chroot jail を設定する方法
br/>CentOS / RHEL :特定のグループのみに SFTP を Chroot Jail に設定する方法