Kvm-Virtualization

CentOS7:KVM:錯誤:無法創建使用者執行時目錄’/run/user/0/libvirt’:權限被拒絕

  • November 3, 2020

一直試圖通過讓我們的 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當然沒有問題,並且在本地嘗試時外掛執行得很好:

[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。有人可以建議我的問題是什麼嗎?

預設情況下,非 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

引用自:https://serverfault.com/questions/739612