Develop and Download Open Source Software

OpenSource Downloads

7-Zip  (4,014)  
HandBrake Japanese Language Version  (2,964)  
CrystalDiskInfo  (1,714)  
Boookends  (1,269)  
CrystalDiskMark  (874)  
Tera Term  (825)  
CotEditor  (626)  
FFFTP  (593)  
えこでこツール  (532)  
10  ffdshow  (524)  
11  SMPlayer  (503)  
12  Cabos  (492)  
13  ギコナビ  (475)  
14  Rappelz Server  (471)  
15  MergeDoc  (457)  
More >>

最近ブックマークされた記事

Linux-VServerのインストール方法

2006年06月25日 11:23 By:-Sukrit-Dhandhania(2006年6月22日(木))
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ディストリビューションであれば、どれでも大差ないはずだ。FedoraUbuntuの場合は、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つ。一つは、使いもしないサービスを動かしてCPUサイクルを浪費しないため。もう一つは、動作中のサービスが少ないほど、セキュリティが脆弱な個所も少なくなるからだ。

現在動作中のサービスを調べるには、まずrunレベルを知る必要がある。

# runlevel

rootでログインしているので、ほとんどの場合、3という数字が戻るはずだ。ブート時に実行されたサービスは、次のコマンドで分かる。

# chkconfig --list | grep "3: on"

どのパッケージかを知るには、パッケージごとに次のコマンドを実行する。

# rpm -qi package_name

不要なサービスがあった場合は、ntsysvツールを使ってブート時に起動されないようにする。リブートして、この設定を適用する。

たとえば、このサーバーでは次のパッケージは不要だろう。

  • autofs - ファイル・システムを自動的にマウントするデーモン
  • apmd - Advanced Power Managementデーモンを制御するプログラム。現在発売されているほとんどのノートブック・コンピューターに搭載されているユーティリティ
  • 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の速度を動的に変更する。ノートブックでなければ不要
  • mdmonitor - ソフトウェアRAIDの管理。ここでは、ハードウェアRAIDを使用
  • HALdaemon / DBUS - デスクトップのためのサービス

カーネル

さて、ここからが佳境だ。すでに述べたように、Linux上のVServerはOSレベルで仮想化される。つまり、カーネルがVServerをサポートする。しかし、CentOSの標準カーネルはVServerをサポートしていないため、カーネルのソースを入手し、VServerパッチを当ててコンパイルする必要がある。

そこで、カーネル・ソースを取ってこよう。現在のlinux-vserver最新安定版は2.6.14.3カーネルだ。入手の手順は以下の通り。

# cd /usr/src
# wget ftp://ftp.probe-networks.lkams.kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.3.tar.bz2

次に、linux-vserver.orgまたは13thfloor.at/vserverから最新カーネル・パッチを入手する。

# wget http://www.13thfloor.at/vserver/s_rel26/v2.01/patch-2.6.14.3-vs2.01.diff.bz2
# tar xjf linux-2.6.14.3.tar.bz2

そして、カーネル・ソースにパッチを当てる。

# cd /usr/src/linux-2.6.14.3
# bzip2 -dc ../patch-2.6.14.3-vs2.01.diff.bz2 | patch -p1

次にconfigを作成するのだが、運用している2.6.xカーネル――2.4.xのconfigファイルは駄目――があれば、そのconfigをコピーする。

# cp /boot/config-`uname -r` .config

VServer対応カーネルのためのコンパイル時に含めておきたいものあれば、ここで済ませておく。カーネルのコンパイルで問題が発生したら、このページが参考になるはずだ。それでは、makeに進もう。まず、次のコマンドを実行する。

# make menuconfig

Linux VServer関連の構成は最後の方だ。選択を求められた場合はデフォルトを選べばよい。ただし、次の項目が有効になっていることは確認すること。

Enable Legacy kernel API
Enable Proc Security
Enable Hard CPU Limits

これで、configの設定は完了。いよいよ、カーネルをmakeする。次のコマンドで、カーネルをコンパイルしインストールすることができる。しばらく時間がかかるので、コーヒーを入れ、ピザを頬張りながら待とう。

# make bzImage && make modules && make modules_install && make install

次に、GRUB構成ファイル/boot/grub/menu.lstを編集する。default=とある行を探し、次のように0に設定されていることを確認する。

default=0
title CentOS (2.6.14.3-vs2.0.1)
root (hd0,0)
kernel /vmlinuz-2.6.14.3-vs2.0.1 ro root=/dev/VolGroup00/LogVol00 rhgb quiet

次に、マシンをリブートし、VServer対応カーネルを動かす。起動したら、uname -rコマンドでカーネルのバージョンを調べ、今作ったカーネルが確かに動作していることを確認する。2.6.14.3-vs2.0.1のように表示されるはずだ。そうでなければ、ここまでの手順を確認し、間違えた個所を特定して再挑戦する。

VServerのバイナリ

以上で、VServer対応CentOS 4.2のシステムができ上がり、VServerのバイナリをインストールする準備ができた。VServerの作成と管理のためのuserlandのユーティリティがあるのでダウンロードし、これを使ってバイナリを抽出することにしよう。

# cd /usr/src/
# wget http://www.13thfloor.at/vserver/s_rel26/v2.01/util-vserver-0.30.209.tar.gz
# tar -zxvf util-vserver-0.30.209.tar.gz
# cd util-vserver-0.30.209

ここで、次のコマンドを使って、dietlibcとbeecrypt-develがインストールされていることを確認する。

# yum install -y dietlibc beecrypt-devel

それでは、util-vserverツールをビルドしインストールしよう。以下に示すのは、その一例である (インストール先は/lib、/sbin、/etc/init.d)。

# cd /usr/src/util-vserver-0.30.209
# ./configure --prefix= --sysconfdir=/etc
# make && make install && make install-distribution

インストールの成否を確認しておこう。

# wget http://vserver.13thfloor.at/Stuff/SCRIPT/testme.sh
# chmod 700 testme.sh;./testme.sh

問題がなければ、次のように表示されるはずだ。

Linux-VServer Test [V0.15] Copyright (C) 2003-2006 H.Poetzl
chcontext is working.
chbind is working.
Linux 2.6.14.3-vs2.0.1 #1 SMP Thu Mar 2 12:45:32 IST 2006 i686
Ea 0.30.209 273/glibc (DSa) <compat,v11,v13,fscompat,net,oldproc,olduts>
VCI: 0002:0001 273 03110036 (TbLgnPD)
---
[000]# succeeded.
[001]# succeeded.
[011]# succeeded.
[031]# succeeded.
[101]# succeeded.
[102]# succeeded.
[201]# succeeded.
[202]# succeeded.

仮想サーバーの設定

仮想サーバーを作成するのは極めて簡単、しかも1回だけだ。ただし、時間がかかる。まず、ホスト・システムからテンプレートを作る必要がある。つまり、/procと/devなどのディレクトリを除いた全ファイルシステムのダンプを取る。

# mkdir /vservers/template/
# dump 0f - /usr | (cd /vservers/template/ && restore rf -)

同様に、次のディレクトリのダンプを取る。

/bin、/etc、/home、/include、/initrd、/lib、/opt、/root、/sbin、/tmp、/usr、/var

このテンプレートを掃除しておくとVServerが小さくなり、また速度の点でも有利だ。ファイルをコピーしながらVServerに不要なものを削除する。根気のいる作業だ。今は止めておく。

さて、VServerを作ろう。次のコマンドを実行する。

# /sbin/vserver <VSERVER_NAME> build -m <BUILD_METHOD> --hostname <VSERVER_HOSTNAME> --interface <VSERVER_NAME>=<NET_DEVICE>:<IP>/<CIDR>

以下に、実例を示す。

# /sbin/vserver calvin build -m skeleton --hostname calvin --interface calvin=eth0:192.168.0.10/24

この場合、1つめの仮想サーバーは次のような構成になる。

VSERVER_NAME calvin
FQDN calvin
NET_DEVICE eth0
IP 192.168.0.10
CIDR 24 (255.255.255.0)
BUILD_METHOD skeleton

次に、VServerにテンプレートのデータを流し込む。

# cp -a /vservers/template/. /vservers/calvin/

そして、運用するネットワークに合わせてVServerの/etc/hostsを編集する。

# vi /vservers/calvin/etc/hosts

最後に、リソースをグループに分離するVServer関連スクリプトを起動する。このスクリプトは、ブートのたびに実行する必要がある。

# /etc/init.d/vprocunhide start

以上で、VServerの設定は終わりだ。それでは神に祈りつつ、ピカピカのVServerを起動してみよう。

# /sbin/vserver calvin start

サービスが起動しないなどといったエラーなら大した問題ではないが、VServerが立ち上がらない場合は VServerメーリングリストのアーカイブを検索してみる必要がある。うまく立ち上がったら、VServerに入ってみよう。

# /sbin/vserver calvin enter

以下、VServerで必要となる基本コマンドを幾つか挙げておく。まずは、次のコマンド。

# /sbin/vserver <VSERVER_NAME> [ start | stop | restart | enter ]

何か実行してみたいなら、ntsysvまたはchkconfigのいずれかを実行してみよう。それから、起動する必要のないサービスをすべて停止させること。すべてのネットワーク関連サービスとカーネル関連サービス、特に、iptablesやkudzuなどは間違いなく停止させておく。

VServerの動作状況は次のコマンドで得られる。

# /sbin/vserver-stat

問題や疑問があれば、VServerパッケージのmanページを見てみよう。それでも分からなければ、VServerメーリングリストが助けてくれるだろう。

NewsForge.com 原文

関連トピック

最終更新:2007年07月01日 19:05