CentOS7:KVM:错误:无法创build用户运行时目录'/ run / user / 0 / libvirt':权限被拒绝

试图解决我通过让我们的Nagios安装使用KVM插件check_kvmfind的问题。 我认为我的问题归结为与nagios / nrpe用户的权限问题。 安装nrpe和插件后,我没有任何其他标准插件如check_disk或check_load等问题。基本上,kvm插件使用virsh来检查状态,所以我启用loginnrpe(也尝试过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组,我没有find一个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。 有人可以build议我的问题是什么?

默认情况下,非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用户需要明确指定连接URL才能访问系统libvirtd。

 virsh --connect qemu:///system list --all