BSDのjail機構とほぼ同様の機能をLinux上で実現するLinux-VServerを紹介しよう。システムのリソースをグループ化し、プロセスは所属するグループ内で動作するためサービス運用妨害攻撃に対する耐性を高めることができる。
BSDのjail機構をご存じだろうか。リソースをグループ化し、グループ内外で動作するサービス間に論理的な障壁を作る仕組みである。これを利用すると、セキュリティを改善することができる。Linuxの場合はLinux-VServerというアプリケーションがほぼ同様の機能を提供している。システムのリソース――CPU、メモリ、ハードディスク、ネットワーク――をグループ化、プロセスは所属するグループ内で動作するためサービス運用妨害攻撃に対する耐性が高くなる。こうした理由も手伝って、ホスティング企業の多くが仮想サーバを導入している。
Linux-VServerを使うと、1台のコンピュータ上に複数の仮想Linuxサーバ(VServer)を立ち上げることができる。VServerは通常の Linuxサーバと同じように動作するが、オーバーヘッドは少なく、相互に独立しながら同時に動くため、仮想プライベートサーバやセキュリティ強化領域として使える。オペレーティング・システム・レベルでの仮想化であるため、リソースをグループ化し分離できるからである。SSH、電子メール、 Web、データベースなどのサービスは、VServer上で、そのまま修正なしに通常通り起動することができる。従って、メールサーバとWebサーバを同じマシン上で動作させても、Webサーバを生かしたまま、メールサーバをリブートすることができる。固有のIPアドレス、ハードドライブスペース、ユーザー・アカウント・データベース、rootパスワードを持ち、VServer同士が干渉することはない。
仮想サーバは、ホストシステムとゲストシステムという2種類のシステムから構成される。ホストシステムは仮想サーバが載っている物理的なサーバであり、ゲストシステムは、ホストOSの上に載って動作する仮想サーバ・オペレーティング・システムである。
ここでは、CentOSバージョン4.2を使って手順を説明することにする。Linux 2.6が動作するLinuxディストリビューションであれば、どれでも大差ないはずだ。FedoraとUbuntuの場合は、Web上に若干の解説がある。
まず、CentOS 4.2を新規にインストールする。ホストシステムは小さければ小さいほどよく、通常は、SSHとiptablesがあれば十分だ。
CentOS 4.2の1枚目のCDを使ってシステムをブートする。Linuxをインストールした経験があるなら、このインストールは比較的簡単だろう。大きな /vserversパーティションを作り、パッケージはDevelopment Packagesを選択すること。ほとんどのサービスはゲストシステムで動かすことになるため、このシステムに多くはいらない。インストールが完了したら、インターネットの接続といったサービスが正常に動作していることを確認する。
次に、rootでログインし、upgradeして、セキュリティ更新を含むすべてのパッケージを最新バージョンに更新する。
yum -y upgrade
更新が終わったらSELinuxを無効にする。つまり、/etc/selinux/configファイル中のSELINUXエントリを次のように変更する。
SELINUX=disabled
次に、ホストシステムで運用するサービスを最小限にする。理由は2つ。1つは、使いもしないサービスを動かしてCPUサイクルを浪費しないため。もう1つは、動作中のサービスが少ないほど、セキュリティが脆弱な個所も少なくなるからだ。
現在動作中のサービスを調べるには、まずrunレベルを知る必要がある。
# runlevel
rootでログインしているので、ほとんどの場合、3という数字が戻るはずだ。ブート時に実行されたサービスは、次のコマンドで分かる。
# chkconfig --list | grep "3: on"
どのパッケージかを知るには、パッケージごとに次のコマンドを実行する。
# rpm -qi package_name
不要なサービスがあった場合は、ntsysvツールを使ってブート時に起動されないようにする。リブートして、この設定を適用する。
例えば、このサーバでは次のパッケージは不要だろう。
パッケージ | 説明 |
---|---|
autofs | ファイルシステムを自動的にマウントするデーモン |
apmd | Advanced Power Managementデーモンを制御するプログラム。現在発売されているほとんどのノートPCに搭載されているユーティリティ |
pcmcia | どれかのパッケージに含まれているモジュール |
cups | Common Unix Printing System |
xinetd | inetdのセキュリティ強化版 |
gpm | テキストベースのLinuxアプリケーションのためのマウスサポート |
kudzu | ブート時に起動されるハードウェアアナライザで、ハードウェアの追加と削除を監視する |
iptables | ファイアウォール。セットアップ時にインストールを省略できるが、実際にはインストールされ、単にconfigファイルが空になるだけ |
anacron | 指定日数間隔でコマンドを実行する定期コマンドスケジューラ。cronとは異なり、途中でシステムの運転が止まってもよい |
isdn | ISDN接続をしなければ不要 |
nfs | TCP/IPネットワーク上でファイルを共有するサーバ機能 |
netfs | すべてのネットワーク・ファイル・システムとSambaマウントポイントをマウントしたりアンマウントしたりする。リモート・ファイル・システムを自動マウントする必要がなければ不要 |
nfslock | TCP/IPネットワーク上でファイルを共有するサーバ機能 |
atd | atコマンドの制御。コマンドのスケジュールで使用 |
rpcgssd / rpcsvcgssd / rpcidmapd | ネットワーク・ファイル・システムのデーモン。NFSを使わないのであれば不要 |
cpuspeed | 必要とされる処理能力に応じてCPUの速度を動的に変更する。ノートPCでなければ不要 |
mdmonitor | ソフトウェアRAIDの管理。ここでは、ハードウェアRAIDを使用 |
HALdaemon / DBUS | デスクトップのためのサービス |
Copyright © 2010 OSDN Corporation, All Rights Reserved.