2008/12/16

Libvirt & Xen その2 予備調査: xm

Libvirtの使い方の前にxmコマンドについて調査する。

このコマンドとXenハイパーバイザとの通信については、『White Paper: Basic components of Xen』で解説されている。Xenの標準UIであるxmコマンドは、デーモンxendとXML RPCによって通信を行い、Dom0を通じてXenハイパーバイザを制御する。ここで使われるXML RPCインターフェースは、UNIXソケットで、アクセスにはroot権限が必要だ。

実際に試してみよう。
[root@fs1 ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 3673 2 r----- 28871.0
[root@fs1 ~]#

[user01@fs1 ~]$ /usr/sbin/xm list
ERROR Internal error: Could not obtain handle on privileged command interface (13 = Permission denied)
Error: Most commands need root access. Please try again as root.
[user01@fs1 ~]$
通常ユーザでxmコマンドが失敗するのは、xendと通信する際に使用するUNIXドメインソケット/var/run/xend/xmlrpc.sock(CentOS/RHEL/Fedoraの場合)には、root権限でないと書き込めなからだ。
[root@fs1 ~]# ls -l /var/run/xend/xmlrpc.sock
srwxr-xr-x 1 root root 0 Dec 8 13:39 /var/run/xend/xmlrpc.sock
[root@fs1 ~]#
また、xmコマンドは、このUNIXドメインソケットの他に、/proc/xend以下のファイルも利用する。実は、最初のエラーメッセージ「ERROR Internal error: Could not...」は、/proc/xen/privcmdを開こうとしたときのもので、次のエラーメッセージ「Error: Most commands...」は/var/run/xend/xmlrpc.sockを開こうとしたときのもの。

これは、straceコマンドを利用して、
[user01@fs1 ~]$ strace /usr/sbin/xm list > strace-xm-log.txt 2>&1
[user01@fs1 ~]$
の様に実行することにより、確認できる。

以上、Xenハイパーバイザは、主にデーモンxendの提供するインターフェースを通じて制御する。デーモンxendが提供するインターフェースは、三種類のアプリケーション層(HTTP、XML-RPCおよびXen Management API)、二種のトランスポート層(UNIXドメインソケットおよびTCP)の計六種類が提供されている。設定は、/etc/xen/xend-config.sxpで行う。上で使ったUNIXソケット/var/run/xend/xmlrpc.sockもこのファイルの中で設定さていれる。
TCPを利用したインターフェースは、ネットワーク経由で操作することが可能。しかし、HTTPやXML-RPCは、セキュリティは十分ではない。IPアドレス・ドメイン名ベースのアクセス制御があるのみで、認証や暗号化はサポートされていない。SSHのポートフォワーディングと併用するなど、別途セキュリティを確保する必要がある。

2008/12/09

Libvirt & Xen その1 概要

このシリーズでは、Libvirtを使ったXenの管理について解説する。

Libvirtの利点は二つある。

一点目は、他の仮想化ソリューションへの移行が容易になることだ。
現時点でCentOSおよびRHELでは、仮想化ソリューションとしてXenとKVMをサポートしているが、今後Xenはサポートから外される方針のようだ。Xenユーザにとっては、KVMへの移行が今後の課題となるだろう。
移行時の課題の一つが、管理方法の変更だ。Xenでは通常、xmコマンドを用いて管理する。これはXen専用のコマンドなので、KVMを管理することはできない。
CentOSおよびRHELでは、KVMとXenを統合管理するために、RPMパッケージlibvirt準備されている。Libvirtによる管理に慣れておけば、XenからKVMへの移行に役立つだろう。
Libvirtは、XenとKVMの他に、QEMU、Linux Containers、OpenVZ、UMLをサポートしている。将来的にはVMwareもサポートされる予定だ。

二点目は、セキュリティだ。
リモート管理の場合、Xenのアクセス制御は、IPアドレス・ホスト名ベースのものしかなく、貧弱だ。一方、Libvirtでは、ユーザ名・パスワード認証、Kerberos認証、および、TLS(SSL)による認証(および暗号化)をサポートしている。Iptablesを併用すれば、IPアドレスベースのアクセス制御も可能だ。
ローカルからの管理の場合、XenもlibvirtもUNIXソケットを使うが、Xenでは、rootに対する読み書き権限が与えられ、その他のユーザに関しては、読み取り権限が与えられていて、基本的に変更できない。一方、libvirtでは、任意の1グループを特権グループとして設定することができ、これに対して書き込み権限を与えることもできる。また、PolicyKitを使ったアクセス制御を行うこともできる。

2008/12/16追記:
Xenの新しいバージョンでは、新しい管理API・XenApiが準備されている。『XM and XenAPI developement on Xen Summit April 2007』によると、TLSによる暗号化やPAM認証が使えるらしい。