fiollr 发表于 2015-10-10 12:26:18

open /dev/kvm: Permission denied的解决办法

      一直使用Debian的虚拟机功能用的好好的,今天上午提示有软件更新,是libvirt相关的,知道是关于虚拟化的软件,习惯性地就更新了。下午有点东西需要写文档,由于LaTeX之类的编辑软件一直没时间学习,所以还是求助于Word,于是开virt-manager,点开虚拟的XP,结果出现:
      ...open /dev/kvm: Permission denied...
      昨晚没是用virt-manager打开XP,而是直接使用kvm命令行启动的XP,然后使用rdesktop连接,没有问题啊,难道XP坏了?打开虚拟的Debian,也出现问题,停在Grub界面不动了,只得强制关机。再打开虚拟的RHEL6,跟Debian症状相同,排除XP坏掉的缘故。然后记起更新了libvirt,于是去Debian的官网查看更新信息,找到点眉目:
     DSA-2650 libvirt - files and device nodes ownership changeto kvm group
      也就是说相关的文件和设备结点的组权限被修改过了。于是查看一下/dev/kvm设备结点的权限,显示为:
      crw-rw----+ 1 root kvm 10, 2323月 16 16:31 /dev/kvm
      即该结点的所有者为root,所属组为kvm,但是最后有一个"+",根据以前的经验,它的权限不是显示的那么简单,但是一时忘了"+"代表什么意思。幸好以前做过笔记,翻出来一看,哦,原来是ACL。专门针对基本权限设置过于笼统而设置的一套访问控制列表。
      但是一想不至于这么复杂吧,更新之前用的好好的,无奈不能看之前的权限是什么样的了。启动virt-manager是以root身份启动的,那么它应该能启动才对。但是验证此路不通,错误信息依旧,奇怪了,root用户都不能启动了!先翻看看以前记录的笔记,撤销全部的ACL:
      chacl -B /dev/kvm
      得到只有最普通的访问控制权限:
      crw-rw---- 1 root kvm 10, 2323月 16 16:31 /dev/kvm

      然后启动,不行。修改为777的权限,顺利启动XP。然后改成666再试,仍然可以启动XP。然后改成660再试,启动失败。好了,知道为什么了,原来试图打开/dev/kvm的进程所有者不是root,且所属组也不是kvm。查看virt-manager是以谁的身份启动的:
      ps -ef | grep virt-manager
      得到的信息:
      root   200781 2 17:17 ? 00:00:38 python /usr/share/virt-manager/virt-manager.py
      不对,是以root身份打开的。再查kvm:
     ps -ef | grep kvm
      得到的信息:
      110      202971 10 17:17 ? 00:03:00 /usr/bin/kvm -S -M pc-0.12...
      原来是UID为110的用户打开的kvm,怪不得被拒绝访问。查看/etc/passwd中110对应的用户为libvirt-qemu。然后知道该怎么做了,有两种方法:
      <1>将用户libvirt-qemu加入到kvm组里:
      usermod -aG kvm libvirt-qemu
      <2>使用ACL赋予libvirt-qemu跟root一样的权限:
      首先要注意的是,带&quot;&#43;&quot;的权限必须使用getfacl命令查看:
      getfacl /dev/kvm

      # file: dev/kvm
    # owner: root
    # group: kvm
    user::rw-
    user:我的普通用户名:rw-
    group::rw-
    mask::rw-
    other::---
      上面的意思是/dev/kvm的所有者是root,所属组为kvm,&quot;我的普通用户名&quot;跟root一样有对其读写的权限,组成员的权限是读写,其他用户没有权限。那么赋予libvirt-qemu跟root一样的权限就可以了:
      setfacl -m u:libvirt-qemu:rw /dev/kvm
      再次查看其权限:
      getfacl /dev/kvm
      # file: dev/kvm
    # owner: root
    # group: kvm
    user::rw-
    user:我的普通用户名:rw-
      user:libvirt-qemu:rw-

      group::rw-
    mask::rw-
    other::---
      运行XP,顺利启动。将libvirt-qemu的权限删除:
      sefacl -x u:libvirt-qemu /dev/kvm
      运行XP,启动失败,证明设置起效。
     但是很遗憾,重启机器后,/dev/kvm的权限被还原,因为它不是一个一直存在的结点,所以第一种方法才能治本。

      最后得出结论:启动virt-manager的身份虽然是root,但是它启动之后只是作为一个管理器,再启动虚拟主机时身份就不是root了,而是libvir-qemu。如果直接使用kvm的命令行方式启动XP,那么启动的身份还是root,就不会出现上述的问题了。
     更新:找到暂时的解决办法了,就是将libvirt-qemu组加入/dev/kvm的读写ACL中就可以了,只是不知道怎么开机就将它加入进去~

         版权声明:本文为博主原创文章,未经博主允许不得转载。
页: [1]
查看完整版本: open /dev/kvm: Permission denied的解决办法