web-dev-qa-db-ja.com

CentOS7:KVM:エラー:ユーザーランタイムディレクトリを作成できません '/ run / user / 0 / libvirt':アクセスが拒否されました

NagiosインストールでKVMのプラグインcheck_kvmを使用することで、見つけた問題を解決しようとしていたことがわかりました。私の問題は、nagios/nrpeユーザーの権限の問題に要約されると思います。 nrpeとプラグインをインストールした後、check_diskやcheck_loadなどの他の標準プラグインに問題はありません。基本的に、kvmプラグインはvirshを使用してステータスをチェックしているので、nrpeのログインを有効にしました(nagiosユーザーも試しましたが、サービスがnrpeユーザーで実行されているようです)、次のことを試みました:

[root@vhost3 ~]# su nrpe
sh-4.2$ virsh list --all
error: failed to connect to the hypervisor
error: no valid connection
error: Cannot create user runtime directory '/run/user/0/libvirt': Permission denied

しかし、もちろんルートとしてこのコマンドに問題はなく、プラグインはローカルで試行するとうまく実行されます。

[root@vhost3 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 2     www                            running
[root@vhost3 ~]# /usr/lib64/nagios/plugins/check_kvm
hosts:1 OK:1 WARN:0 CRIT:0 - www:running

Nrpeユーザーとnagiosをkvmグループとqemuグループに追加しようとしましたが、libvirtdグループが見つかりません。奇妙なことに、別のマシンで別のエラーが発生します。おそらくそのサーバーで別のことをしたのですが、代わりに次のようになります。

[root@vhost1 ~]# su nrpe
sh-4.2$ virsh list --all
error: failed to connect to the hypervisor
error: no valid connection
error: Failed to connect socket to '/run/user/0/libvirt/libvirt-sock': Permission denied

上記のエラーに関するその他の奇妙なことは、/ run/user/0/libvirtディレクトリが存在しないことです。このCentOS7ホストでは、正しいディレクトリはlibvirt-sockが存在する/ var/run/libvirtです。誰かが私の問題が何であるかを提案できますか?

2
rwfitzy

デフォルトでは、root以外のユーザーは、明示的に許可されていない限り、libvirtdに直接アクセスできません。

私はこれをしました PolicyKitを使用して

# cat /etc/polkit-1/rules.d/50-org.libvirt.unix.manage.rules
polkit.addRule(function(action, subject) {
        if (action.id == "org.libvirt.unix.manage" &&
            subject.user == "nrpe") {
                return polkit.Result.YES;
                polkit.log("action=" + action);
                polkit.log("subject=" + subject);
        }
});

これにより、ユーザーはnrpeが、パスワードを必要とせずにlibvirtdでやりたいことを何でもできるようになります。

次に、root以外のユーザーは、システムlibvirtdにアクセスするために、接続URLを明示的に指定する必要があります。

virsh --connect qemu:///system list --all
2
Michael Hampton