非 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
在這不起作用之後,一些Google搜尋告訴我較新的 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 的正確(和接受的)答案,該答案贏得了賞金,但只是對於任何閱讀此內容的人的資訊,結果證明**與 polkit 無關,**它似乎沒有配置/編譯/與我的 libvirtd 一起使用。
是一個內置權限(套接字權限)問題。
我認為你可以這樣做:
在
/etc/libvirt/libvirtd.conf
unix_sock_group = "libvirt" unix_sock_rw_perms = "0770" auth_unix_rw = "none"
之後重新啟動 libvirtd 守護程序
這對我有用:
unix_sock_group = "libvirt" unix_sock_rw_perms = "0770" unix_sock_dir = "/var/run/libvirt" auth_unix_rw = "none"