今天我在设置一个启动kvm实例的脚本时遇到了一些奇怪的行为,我希望大家能够权衡一下这里发生的事情。
安装程序:我有一个用启动kvm的脚本。
virt-install ... --disk=image.qcow2 ...我想在不同版本的image.qcow2上运行相同的脚本,所以我创建了一个指向最新图像的符号链接。
我的目录结构应该如下所示:
startKvm.sh
image.qcow2 -> image_v2.0.qcow2
image_v2.0.qcow2
image_v1.0.qcow2但是,当我试图运行virt命令时,它返回了以下错误。
错误内部错误:连接到监视器时已退出进程: datetime:-drive file=/path/Image.qau 2,if=none,id=drid-ide0-0,format=qcow2:未能打开磁盘映像/路径/Image.qco 2:无法打开文件:拒绝权限
对原因和解决方案的思考?
发布于 2018-02-24 09:20:19
我也有过使用符号链接的类似想法,但是在我的场景中,我通过SSH运行virt-manager,X转发是with (admin)组中的用户。创建虚拟来宾会产生相同的错误:
无法完成安装:“内部错误:在连接到监视器时已退出进程: 2018-02-24T07:53:19.064452Z qemu-kvm:-drive /var/lib/libvirt/images/archlinux-2018.02.01-x86_64.iso: format=raw,if=none,id=驱动器-ide0-0-1,readonly=on:无法打开磁盘映像/var/lib/libvirt/images/archlinux-2018.02.01-x86_64.iso:无法打开拒绝的'/var/lib/libvirt/images/archlinux-2018.02.01-x86_64.iso':权限”
事实上,问题是有权限的。当使用.iso设置qemu-kvm映像时,它在部署时将其所有权更改为用户/组qemu。我们需要确保用户qemu在文件的整个路径中都具有访问权限。
测试用例
运行virt-manager的用户: yahol (轮/管理组)
Iso或qcow2图像定位:/home/yahol/isos/archlinux-2018.02.01-x86_64.iso
注:请忽略时间戳,因为我已经黑了这个答案超过两天。已经很晚了,我太累了,无法在前一天完成它。
从用户主目录中的图像开始:
$ ll /home/yahol/isos/archlinux-2018.02.01-x86_64.iso
$ -rw-r--r--. 1 yahol yahol 565182464 Feb 24 08:49 archlinux-2018.02.01-x86_64.iso在KVM映像的默认路径中将符号链接创建为root:
# cd /var/lib/libvirt/images
# ln -s /home/yahol/isos/archlinux-2018.02.01-x86_64.iso
lrwxrwxrwx. 1 root root 48 Feb 23 21:35 archlinux-2018.02.01-x86_64.iso -> /home/yahol/isos/archlinux-2018.02.01-x86_64.isoSymlink属于用户根,而实际文件仍然有普通用户的用户/组。通过virt-manager建立和部署虚拟机。请注意用户/图像文件组如何更改为qemu:
$ ll /home/yahol/isos/archlinux-2018.02.01-x86_64.iso
-rw-r--r--. 1 qemu qemu 565182464 Feb 24 08:49 archlinux-2018.02.01-x86_64.iso此时,无论是virt-manager还是virt-install,VM管理器都会抛出前面提到的错误。这是因为用户qemu没有访问完整路径的权限。用户yahol的主页只供用户yahol访问:
$ ll -d /home/yahol/
drwx------. 7 yahol yahol 258 Feb 24 08:37 /home/yahol/现在,让我们创建另一条qemu可以完全访问的路径:
# mkdir -p /Qemu/Test/Iso
# mv archlinux-2018.02.01-x86_64.iso /Qemu/Test/Iso/
# chown -R qemu:qemu /Qemu/
# cd /var/lib/libvirt/images
# ln -s /Qemu/Test/Iso/archlinux-2018.02.01-x86_64.iso
# ll /Qemu/Test/Iso/archlinux-2018.02.01-x86_64.iso
-rw-rw-r--. 1 qemu qemu 565182464 Feb 23 08:53 /Qemu/Test/Iso/archlinux-2018.02.01-x86_64.iso
# ll /var/lib/libvirt/images
lrwxrwxrwx. 1 root root 46 Feb 24 09:39 archlinux-2018.02.01-x86_64.iso -> /Qemu/Test/Iso/archlinux-2018.02.01-x86_64.iso这非常好,虚拟机已经部署并且正在运行。
可能的解决办法:
警告:,这可能对安全有影响!
摘要:
尽管所有操作都是由具有根权限的用户完成的,但处理VM映像的实际用户是qemu。将qemu添加到would组仍然需要提供身份验证的方法,而且,由于它是一个非登录用户,这可能会很棘手。
https://stackoverflow.com/questions/36657536
复制相似问题