virsh:无法以用户身份连接到虚拟机管理程序

virsh:无法以用户身份连接到虚拟机管理程序

我目前正在运行 RHEL 7.7 操作系统。

我尝试使用 kvm2 驱动程序设置 minkube 环境,因此发生的是 minikube 启动正常,但在启动过程中出现一些错误。

错误如下:

'kvm2' driver reported an issue: /bin/virsh domcapabilities --virttype kvm failed:
error: failed to connect to the hypervisor
error: Cannot recv data: Connection reset by peer

因此我开始调查,首先我尝试在命令行上运行 virsh 命令,但得到了相同的错误,因此第二件我尝试用 sudo 运行此命令,在这种情况下它起作用了。

所以我认为这肯定是一个权限问题,但我仍然无法解决这个问题(我想以用户身份启动 minikube,而不必使用 sudo)。

我迄今为止尝试过的:

  1. 将我的用户添加到 libvirt 组中 - 仍然失败
  2. 在 groupos 中添加我的用户:kvmuser qemu 和 kvm - 仍然失败
  3. 使用以下配置更新了 libvirtd.conf 文件:
unix_sock_group = "libvirt"
unix_sock_ro_perms = "0777"
unix_sock_rw_perms = "0770"
unix_sock_dir = "/var/run/libvirt"

  1. 检查了 policykit 规则,发现其中已经存在如下内容:
polkit.addRule(function(action, subject) {
    if (action.id == "org.libvirt.unix.manage"
            && subject.local
            && subject.active
            && subject.isInGroup("wheel")) {
        return polkit.Result.YES;
    }
});

所以我尝试将我的用户添加到 wheel 组中,但问题仍然存在

  1. 在 systemd-network 中也添加了我的用户(这里我开始只是随机做一些事情哈哈:D)同样的问题。
  2. 禁用 selinux-同样的问题。

所以我到处搜索却找不到解决我的问题的方法,有人可能已经设法解决了它吗?

我只想以普通用户身份运行 vish 命令。

答案1

因此,经过所有的努力之后(顺便说一句,将用户添加到正确的组可能是正确配置的一部分),我仍然缺少一件事来让它作为用户工作。

显然它需要导出以下环境变量:

export LIBVIRT_DEFAULT_URI=qemu:///system

导出后,如果用户属于 libvirt 允许的组,则所有命令都将开始起作用。

答案2

我手边没有支持 rhel libvirt 的主机,但是有一台 fedora 31,按照说明操作即可libvirt dbus 文档页面我可以以 Wheel 会员用户身份运行它:

$ cat /etc/dbus-1/system.d/org.libvirt.conf 
<?xml version="1.0"?>
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">

<busconfig>

  <policy group="wheel">
    <allow send_destination="org.libvirt"/>
  </policy>

</busconfig>

$ id
uid=1000(natxo) gid=1000(natxo) groups=1000(natxo),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
$ virsh domcapabilities --virttype kvm
<domainCapabilities>
  <path>/usr/bin/qemu-system-x86_64</path>
  <domain>kvm</domain>
  <machine>pc-i440fx-4.1</machine>
  <arch>x86_64</arch>
  <vcpu max='255'/>
  <iothreads supported='yes'/>
  <os supported='yes'>
    <enum name='firmware'>
      <value>efi</value>
    </enum>
...

您可能需要重新启动 libvirtd。

相关内容