QEMU+KVM环境下执行virsh list --all出现权限类错误求助
看起来你碰到了virsh连接KVM hypervisor的权限问题,我帮你捋捋怎么解决:
首先先看你遇到的错误信息:
error: failed to connect to the hypervisor
error: Failed to connect socket to '/var/run/libvirt/libvirt-sock': Permission denied
再结合你执行ls -la /var/run/libvirt/的输出,重点看libvirt-sock这一行:
srw-rw---- 1 root libvirt 0 Jan 19 20:28 libvirt-sock
这个套接字的权限是组读写,所属用户组是libvirt,也就是说只有root用户或者加入了libvirt组的普通用户才能访问它,你的当前用户显然不在这个组里,所以才会触发权限拒绝的错误。
接下来给你几个步骤解决问题:
先确认当前用户是否在
libvirt组里:
执行命令groups,看看输出里有没有libvirt这个组名。如果没有,继续下一步。将当前用户添加到
libvirt组:
运行这条命令(需要sudo权限):sudo usermod -aG libvirt $USER这里的
-aG参数是把用户追加到目标组,不会覆盖你原来的用户组配置,放心用。让组权限生效:
你可以执行newgrp libvirt来立刻刷新当前会话的组权限,或者简单点注销再重新登录系统,新的组权限就会生效了。最后再测试一下:
重新执行virsh list --all,应该就能正常连接hypervisor,不会再报权限错误了。
另外提一句,虽然用sudo virsh list --all也能临时解决,但不推荐长期这么做——root权限操作虚拟机风险太高,把用户加入对应组是更安全规范的做法。
备注:内容来源于stack exchange,提问作者DeltaFlyer

