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のポートフォワーディングと併用するなど、別途セキュリティを確保する必要がある。