Kvm-Virtualization
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當然沒有問題,並且在本地嘗試時外掛執行得很好:
[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