CentOS 6.2 上のKVMをリモートのvirt-managerから操作する
CentOS系ではyum install qemu-kvm libvirtしたあと、root以外でlibvirtを実行できるような設定になっていない。
・rootユーザーでSSHログインはしない
・virt-managerはサーバー上でなく、手元からリモートで動かしたい
上記を満たすために、libvirtdの設定を変更する。
# vi /etc/libvirt/libvirtd.conf unix_sock_group = "libvirt" unix_sock_rw_perms = "0770"
groupadd libvirt usermod -a -G libvirt [username]
これでlibvirtdを再起動すればOK…のはずだったのだが。
SSHの鍵認証をさせて、virt-managerで接続させても延々と"libvirtError: authentication failed"のような認証エラーが出る。
# vi /usr/share/polkit-1/actions/org.libvirt.unix.policy <allow_any>auth_admin</allow_any> <allow_inactive>auth_admin</allow_inactive>
上記の修正で直ったという情報もあったけれど、どうもしっくりこないので調べた。(そもそもこれで認証が通ったら、unix_sock_rw_perms = "0770"の設定は何なんだ?)
結論としては、PolicyKitの認証が関係していた。
CentOSでは、libvirtd.confがほとんどの場合コメントアウトしてあり、以下の部分も同様。
# /etc/libvirt/libvirtd.conf
# auth_unix_rw = "none"
libvirtd.conf中のauth_unix_rwの説明に、以下のようにある。
# Set an authentication scheme for UNIX read-write sockets
# By default socket permissions only allow root. If PolicyKit
# support was compiled into libvirt, the default will be to
# use 'polkit' auth.
つまりCentOS6では、libvirtが最初からpolicykitを使うようにビルドされているということだ。
libvirtd.confを以下のように編集しなおして、無事操作できた。
# vi /etc/libvirt/libvirtd.conf unix_sock_group = "libvirt" unix_sock_rw_perms = "0770" auth_unix_rw = "none"
ちなみに、Ubuntu系では最初から
auth_unix_ro = "none" auth_unix_rw = "none"
と設定されている。
openSUSEのマニュアルにも、 第7章 接続と権限
推奨設定
SSH を利用したリモートからのトンネル
7.1.1.1項 「パーミッションとグループ所有者を利用した UNIX ソケット向けのアクセス制御」
想定済みというわけらしい…。うーんこのRHEL。
参考にしたサイト