root以外のユーザーへのXen libvirtアクセス

root以外のユーザーへのXen libvirtアクセス

CentOS 6.6システムにXenとlibvirtをインストールしました。すべてのツール(virt-manager、virshなど)はrootとして完全に実行されますが(直接またはsudoを介して)他のユーザーが接続できるようにすることはできません(接続失敗/DBusエラー)。

私の設定

私はグループを作成し、polkitを介したユーザーアクセスを許可するプロセスに従いました。

groupadd virtadmin
usermod -a -G virtadmin davec

私もKVMグループに自分自身を追加しました(どこかに提案があります)。グループが作成され、ID出力としてグループに参加します。

uid=500(davec) gid=500(davec) groups=500(davec),36(kvm),501(virtadmin)

polkitでこれを可能にするために、次の内容と一緒に/etc/polkit-1/localauthority/50-local.d/50-libvert-remote-access.pklaファイルを追加しました。

Remote libvirt SSH access]
Identity:unix-group:virtadmin
Action:org.libvirt.unix.manage
ResultAny=yes
ResultInactive=yes
ResultActive=yes

これがうまくいかなかった後、いくつかのインターネット検索では、最新のpolkitバージョン(yumは0.96があると私に言う)がルールベースのアプローチを使用すると言ったので、/etc/polkit-1/rules.dフォルダも作成して80ファイルを追加しますしました。以下を含む libvirt-manage.rules:

polkit.addRule(function(action, subject) {
  if (action.id == "org.libvirt.unix.manage" && 
  subject.local && 
  subject.active && 
  subject.isInGroup("virtadmin")) {
      return polkit.Result.YES;
  }
});

ここでいくつかの問題があるかもしれませんが、ログやそれをテスト/検証/観察しているように見える方法はありません。

したがって、私が見つけたドキュメントによれば、この設定により、ユーザーdavecはlibvirtにアクセスし、virshまたはvirt-managerを実行できる必要があります。

間違い

[davec@polar rules.d]$ virsh -c xen:///
error: failed to connect to the hypervisor
error: internal error: DBus support not compiled into this binary

これは、接続を試みるときにvirt-managerが提供するのと同じエラーです。

DBusエラーに関するオンライン情報の多くは、実行中のハイパーバイザー/接続されているすべての人の問題に関連していますが、ルート接続は完璧です。

[davec@polar rules.d]$ sudo virsh -c xen:///
Welcome to virsh, the virtualization interactive terminal.

SSH接続にも同じことが当てはまります(xen + ssh URIを使用する場合、SSHはトンネリングだけであると信じているので驚くべきことではありません)。 root は root 以外のユーザーが機能しますが、グループに追加されたユーザーはそうではありません。

疑いなく、これはシンプルで愚かです。しかし…数日が経過すると、Googleはもはや私の友達ではありません。

回答

以下のc4f4t0rの正解(そして承認された)回答を参照してください。これは賞金を受け取りましたが、この記事を読んでいる人全員の情報にすぎません。ポルケットとは何の関係もありません私のlibvirtdを設定/コンパイル/操作しないようです。

組み込み権限(ソケット権限)の問題です。

答え1

私はあなたがこれを行うことができると思います:

存在する/etc/libvirt/libvirtd.conf

unix_sock_group = "libvirt"
unix_sock_rw_perms = "0770"
auth_unix_rw = "none"

その後、libvirtdデーモンを再起動します。

答え2

これは私にとって効果的です。

unix_sock_group = "libvirt"
unix_sock_rw_perms = "0770"
unix_sock_dir = "/var/run/libvirt"
auth_unix_rw = "none"

関連情報