前編「デスクトップLinuxで名高いUbuntuの『サーバ版』を導入してみる」ではUbuntu 8.10 Server Editionの概要とセットアップを中心に解説したが、後編ではその特徴的な機能を幾つか紹介する。
その前に、カーネルについて簡単に触れておきたいと思う。Ubuntu 8.10 Server Editionでは、Linuxカーネル2.6.27が採用されている。このバージョンのLinuxカーネルには、ext4の遅延割り当て機能やネットワークデバイスの複数送信キュー対応などが新たに盛り込まれている。また、フラッシュメモリ用ファイルシステム「UBIFS」のサポート、ドライバ類の更新、各種バグフィックスなども行われている。
企業用途向けの各種機能を持つUbuntu 8.10 Server Editionだが、本稿ではそれらのうち、代表的な新機能として以下を紹介する。
OpenJDK、Tomcat、ClamAV、SpamAssassinは、それぞれの分野で最もよく利用されているオープンソースソフトウェアだ。OpenJDKはオープンソース版のJava開発環境、Tomcatはサーブレット/JSPを動作させるためのWebコンテナ、ClamAVはアンチウイルスソフトウェア、SpamAssassinはスパムメールのフィルタリング機能を提供するソフトウェアだ。
Ubuntu 8.10 Server Editionでは、これら代表的なサーバ用ソフトウェアのパッケージがmainリポジトリに収録されたことにより、簡単に導入・アップデートできるようになった。また、mainリポジトリは英カノニカル(Canonical)社によってメンテナンスされるため、比較的安心してこれらのソフトウェアを導入することができる。
仮想化環境でUbuntuを簡単に利用することができるvmbuilderコマンドがサポートされた。vmbuilderコマンドを使うと、XenやKVM(Kernel-based Virtual Machine)、VMware Server/Workstationといった代表的な仮想化ソフトウェア上で実行可能な仮想マシンを簡単に作成することができる。
また、仮想マシン上で実行するOSはUbuntu Server Editionだけではなく、「Ubuntu JeOS」を使用することも可能だ。Ubuntu JeOSとは、仮想化環境には必要のない機能をそぎ落とした、いわば仮想化環境に特化したUbuntuだ。必要最小限のドライバを組み込んだカーネルや基本的なソフトウェアのみで構成されており、必要となるメモリやHDDのリソースが通常のUbuntuよりも少なく済む。そのため、より多くの仮想マシンを実行することが可能となる。例えば、機能を特化した専用サーバを1台のハードウェア上で複数実行する場合などに威力を発揮するだろう。

vmbuilderは、以下のようにインストールする。
$ sudo apt-get install python-vm-builder virt-goodies
インストールが完了したら、vmbuilderコマンドが実行可能になる。vmbuilderコマンドの書式は以下の通りだ。
vmbuilder <hypervisor> <distro> オプション
<hypervisor>パラメータには、どの仮想化ソフトウェア上で仮想マシンを実行するかを指定する。“xen”(Xen)、“kvm”(KVM)、“vmw6”(VMware Workstation)、“vmserver”(VMware Server)が指定可能だ。<distro>(ディストリビューション)パラメータで指定できるのは、現在は“ubuntu”しかない。
なお、以下のように“--help”オプションを使用すると、指定可能なオプションの一覧が表示される。
$ sudo vmbuilder --help
実際に“--help”オプションを実行してみると分かるが、vmbuilderには非常に多くのオプションがある。例えば、仮想マシン上で実行するUbuntuのバージョン(リリース)を指定する“--suite”や、仮想マシンのCPUアーキテクチャを指定する“--arch”などだ。また、“--m MEM”で仮想マシンのメモリサイズを指定でき(単位はMバイト、デフォルト値は128)、さらにファイルシステムのサイズ(仮想マシンのディスク容量)も“--rootsize=SIZE”オプションで指定できる(単位はMバイト、デフォルト値は4096)。
上記以外にも、ネットワーク設定(デフォルト設定はDHCP。固定IPアドレスなどを指定することも可能)や、仮想マシン上のOSに事前にインストールしておくパッケージを指定することまでできる。
では、実際にvmbuilderコマンドで仮想マシンを作成してみよう。
以下に、vmbuilderコマンドの使用例を紹介する。まずは、VMware Workstation用の仮想マシンをUbuntu JeOSで作成する場合だ。
$ sudo vmbuilder vmw6 ubuntu --flavour virtual
Ubuntu JeOSではなく通常のUbuntu Server Editionを使用する場合には、“--flavour”オプションで“server”を指定する。
$ sudo vmbuilder vmw6 ubuntu --flavour server
仮想マシンのイメージは、vmbuilderコマンドを実行したディレクトリに作成される。その際には、<hypervisor>パラメータで指定した仮想化ソフトウェアごとのサブディレクトリが自動的に作成され、それぞれの中に仮想マシンのイメージファイルや設定ファイルが保存される。なおその際、サブディレクトリには“ubuntu-<hypervisor>”という名前が自動的に付けられる。例えば、<hypervisor>パラメータに“vmw6”を指定するとサブディレクトリ名は“ubuntu-vmw6”に、“xen”の場合は“ubuntu-xen”になる。
仮想マシンのイメージが作成されるサブディレクトリの名前を、ユーザーが独自に指定することはできない。そのため、既に同じ仮想化ソフトウェア用の仮想マシンを作成済みのディレクトリで再度vmbuilderコマンドを実行すると、“ubuntu-×× already exists”というエラーが発生する。このエラーを回避して、自動的にサブディレクトリを上書きしたい場合は、以下のようにvmbuilderコマンドに“-o”オプションを付加する。
$ sudo vmbuilder vmw6 ubuntu --flavour server -o
次に、VMware Server用の仮想マシンを作成してみる。以下では、“--suite”オプションで“hardy”(バージョン8.04のコードネーム“Hardy Heron”の略称)を指定した(デフォルト設定は8.10)。また、“--addpkg”オプションでApacheのパッケージを指定して、Apacheがインストールされた状態の仮想マシンを作成する。
$ sudo vmbuilder vmserver ubuntu --suite hardy --flavour virtual --addpkg apache2 --addpkg apache2-mpm-prefork --addpkg apache2-utils --addpkg apache2.2-common
同じように、KVMやXen用の仮想マシンも以下のようにオプションを指定することで作成できる。
$ sudo vmbuilder kvm ubuntu --flavour virtual --libvirt qemu:///system
$ sudo vmbuilder xen ubuntu --flavour virtual
こうして作成した仮想マシンは、それぞれの仮想化ソフトウェア上で実行することができる(画面1)。ちなみにデフォルトでは、仮想マシン上で動作するUbuntuのユーザーアカウントおよびパスワードは“ubuntu”となっている。
通常、Ubuntuのファイアウォール機能の設定は「ufw」(Uncomplicated Firewall)というツールを使って行う。“Uncomplicated Firewall”(単純なファイアウォール)という名の通り、これを使うことにより初心者でも比較的簡単にファイアウォール設定を行うことができる。ufwの機能を一言で言えば、iptablesによるパケットフィルタリングの設定を簡単に行うためのコマンドラインツールだ(ufwの機能をGUIから利用できるようにする「gufw」というツールも存在する)。
ufwはUbuntu 8.04から導入されたツールだが、従来のものではまずアプリケーション(サービス)が使用するポートをユーザーが調べて、そのポートごとに接続許可・拒否の設定を行う必要があった。Ubuntu 8.10のufwでは、これをアプリケーション単位で設定できるように機能が強化されている。具体的には、アプリケーションごとの接続情報を「プロファイル」としてまとめて管理できるようになり、ufwの実行時にこれを指定することでアプリケーション単位でのパケットフィルタリングが行えるようになった。
デフォルト状態では、以下の通りufwは無効になっている。
$ sudo ufw status
Status: not loaded
また、アプリケーションのプロファイルの一覧は、“app list”オプションで表示できる。
$ sudo ufw app list
Available applications:
Apache
Apache Full
Apache Secure
OpenSSH
Samba
さらに、それぞれのプロファイルの内容を表示することも可能だ。
$ sudo ufw app info Samba
Profile: Samba
Title: LanManager-like file and printer server for Unix
Description: The Samba software suite is a collection of programs that
implements the SMB/CIFS protocol for unix systems, allowing you to serve
files and printers to Windows, NT, OS/2 and DOS clients. This protocol is
sometimes also referred to as the LanManager or NetBIOS protocol.
Ports:
137,138/udp
139,445/tcp
あるアプリケーションの接続を許可する場合には、ufwコマンドに“allow”オプションを付加し、そのアプリケーションのプロファイルを指定して実行する。例えば、Sambaサービスの接続を許可する場合は、以下のようにufwコマンドを実行する。
$ sudo ufw allow Samba
逆に接続を拒否する場合は、“deny”オプションを指定する。
$ sudo ufw deny Samba
また“limit”というオプションもある。これは接続回数による制限を設けるもので、30秒間に6回以上接続が試みられたときに、接続を拒否するよう指定できる。以下は、OpenSSHサービスにこの制限を設けるためのコマンドだ。
$ sudo ufw limit OpenSSH
プロファイルの設定が完了したら、以下のコマンドを実行してufwを有効にする。
$ sudo ufw enable
ufwを有効にした後にそのステータスを表示すると、以下のようにアプリケーションごとに接続状態の一覧が表示される。
$ sudo ufw status
Status: loaded
To Action From
-- ------ ----
OpenSSH LIMIT Anywhere
Samba ALLOW Anywhere
このように、アプリケーション単位で比較的容易にパケットフィルタリングの設定が可能になった。もちろん、従来通りポート単位での制御も可能である。
メールや機密性の高い文書などのデータは、暗号化して保存すると安心だ。Ubuntu 8.10 Server Editionは、フォルダを暗号化できる「ecryptfs-utils」というパッケージがmainコンポーネントとして採用されている。これを利用するには、まず以下のようにecryptfs-utilsのインストールを行う。
$ sudo apt-get install ecryptfs-utils
インストールが完了したら、ecryptfs-setup-privateコマンドを実行して、セットアップを行う。
$ ecryptfs-setup-private
Enter your login passphrase: ←ログイン用のパスワードを入力
Enter your mount passphrase [leave blank to generate one]: ←マウント用のパスフレーズを入力
Enter your mount passphrase (again): ←マウント用のパスフレーズを再入力
マウント用のパスフレーズは入力を省略することができる。省略する場合は[Enter]キーを押せばいい。すると自動的にパスフレーズが生成されて、
************************************************************************
YOU SHOULD RECORD THIS MOUNT PASSPHRASE AND STORE IN A SAFE LOCATION:
7x490d04e4fda43b279f9a117ee02ag5c
THIS WILL BE REQUIRED IF YOU NEED TO RECOVER YOUR DATA AT A LATER TIME.
************************************************************************
のように表示される。
その後、一度ログアウトして再びログインすると、暗号化された“.Private”ディレクトリが/Privateディレクトリにマウントされる。以降は、/Privateディレクトリにファイルを保存すると、その内容が自動的に暗号化される。サブディレクトリを作成して、その下にファイルを保存することも可能だ。
ユーザーは、ログインして/Privateにアクセスする限り、そのファイルが暗号化されているかどうかを意識する必要はない。これは、
$ cat ~/Private/sample.txt
とするとsample.txtの内容が問題なく表示されるが、
$ cat ~/.Private/sample.txt
とすると内容が読めない(判別不能な文字の羅列となる)ことからも確認できる。なお、ファイルの内容は暗号化されるが、ファイル名やサブディレクトリ名などは暗号化されない。
Ubuntuは優れたデスクトップ用Linuxというイメージが強いためか、サーバ用OSとして採用される例は、まだそう多くないようだ。しかし2008年10月には、オンライン百科事典「Wikipedia」を運営するウィキペディア財団が、400台のサーバを複数OSの混在環境からUbuntu 8.04 Server Edition LTSの統一環境に移行したという報道もあった(「Wikipedia財団、全サーバーをUbuntu Linuxへ移行」)。今後は、大規模システムでの導入例も徐々に増えていくことだろう。
とはいえ現時点(2008年12月)では、今すぐに大規模システムの本番環境に導入するのは時期尚早かもしれない。特に高い信頼性が求められるシステムでは、やはりこの分野で多くの実績を残しているRed Hat Enterprise Linuxなどの方が安心感があるだろう。
ただし本稿で紹介してきたように、Ubuntu Server Editionも企業システムでの運用に十分堪え得る機能を備え、サポート体制も整っている。今後、エンタープライズ分野での普及が期待されるLinuxディストリビューションの1つだといえよう。まずは小規模システムに試験的に導入して、評価を始めてみてはいかがだろうか。