|
1.
Chrooting
Chrootとは、サービス(またはユーザ)の環境をアクセスすべき場所にのみ制限し、rootでのアクセスを行うことが出来るアクセス(または情報)を得ることがないように制限する方法です。
サービスをroot以外のユーザ(nobody、apache、named)で動作させることにより、攻撃者はこのユーザに許可されているファイルのみアクセスすることが出来ます。
これはつまり、サービスにセキュリティ上の欠陥があったとしても、攻撃者はrootアクセスを得ることが出来ないと言うことです。
pure-ftpdやbindといったいくつかのサービスにはchrootを行う機能があり、他にはありません。
サービスがこれをサポートしているのなら、それを使用します。
そうでなければ自分自身で作成する方法を理解しなければなりません。
chrootの作成方法を知ったり、chrootの動作方法に関する基本的な理解を行うために、bashでテストしましょう(学ぶための簡単な方法です)。
mkdir /chrootで/chrootディレクトリを作成します。
そして、bashとともにコンパイルされたダイナミックライブラリを探します(-staticを用いてコンパイルされたのなら、この行程は必要ありません)。
以下のコマンドは、bashが使用するライブラリの一覧を作成します。
コード表示 1.1: 使用されるライブラリの一覧を取得 |
# ldd /bin/bash
libncurses.so.5 => /lib/libncurses.so.5 (0x4001b000)
libdl.so.2 => /lib/libdl.so.2 (0x40060000)
libc.so.6 => /lib/libc.so.6 (0x40063000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
|
ではbash用の環境を作成しましょう。
コード表示 1.1: bash用のchroot環境の作成 |
# mkdir /chroot/bash
# mkdir /chroot/bash/bin
# mkdir /chroot/bash/lib
|
次に、bashによって使用されるファイル(/lib)をchrootされたlibにコピーし、bashコマンドをchroot環境のbinディレクトリにコピーします。
これは、機能性を損なうことなく、全く同じ環境を作成します。
コピーが完了したら、chroot /chroot/bash /bin/bashを行います。
プロンプトが/となったら、動作しています。
そうでなければ、どのファイルが欠けているかをしっかりと報告してくれるでしょう。
いくつかの共有ライブラリはお互いに依存しあっています。
chroot内では、echo以外が動作しないと言うことに気づくでしょう。
これは、bash以外のコマンドをchroot環境に入れていないからであり、echoはビルドインの機能だからです。
これは、chrootサービスを作成するのと基本的には同じ方法です。
唯一異なる点は、サービスはしばしばデバイスや/etcにある設定ファイルに依存しているということです。
単にそれらをchroot環境にコピーし(デバイスはcp -aでコピーできます)、実行する前にchrootを使用するようにinitスクリプトを編集します。
どのデバイスと設定ファイルがサービスに必要かを見つけることは困難です。
これには、straceコマンドが便利です。
サービスを/usr/bin/straceとともに起動し、open、read、stat、そしてconnectを探します。(訳注:原文では/usr/bin/strace bashとなっていますが、誤りであると思われるのでbashを削除しました)
これは、どのファイルをコピーするかの手がかりになります。
ですが、ほとんどの場合はpasswdファイル(コピーを編集し、サービスに不要なユーザを削除します)、/dev/zero、/dev/log、そして/dev/randomをコピーするだけです。
1.
User Mode Linux
より安全な環境を作成する別の方法に、仮想マシンの実行があります。
仮想マシンとは、その名が示すとおり、実際のOS上で動作し、単一のマシンとして存在するようにハードウェアとOS環境を提供するプロセスです。
セキュリティ上の利点として、仮想マシンで動作しているサーバに障害が発生しても、仮想サーバのみが影響し、別のインストールには影響しません。
User Mode Linuxの設定方法に関するより詳しい情報は、User Mode Linux Guideを参照してください。
|