设为首页 收藏本站
查看: 1515|回复: 0

[经验分享] open /dev/kvm: Permission denied的解决办法

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-10-10 12:26:18 | 显示全部楼层 |阅读模式
      一直使用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的官网查看更新信息,找到点眉目:
     [15 Mar 2013]DSA-2650 libvirt - files and device nodes ownership changeto kvm group
      也就是说相关的文件和设备结点的组权限被修改过了。于是查看一下/dev/kvm设备结点的权限,显示为:
      crw-rw----+ 1 root kvm 10, 232  3月 16 16:31 /dev/kvm
      即该结点的所有者为root,所属组为kvm,但是最后有一个"+",根据以前的经验,它的权限不是显示的那么简单,但是一时忘了"+"代表什么意思。幸好以前做过笔记,翻出来一看,哦,原来是ACL。专门针对基本权限设置过于笼统而设置的一套访问控制列表。
      但是一想不至于这么复杂吧,更新之前用的好好的,无奈不能看之前的权限是什么样的了。启动virt-manager是以root身份启动的,那么它应该能启动才对。但是验证此路不通,错误信息依旧,奇怪了,root用户都不能启动了!先翻看看以前记录的笔记,撤销全部的ACL:
      chacl -B /dev/kvm
      得到只有最普通的访问控制权限:
      crw-rw---- 1 root kvm 10, 232  3月 16 16:31 /dev/kvm

      然后启动,不行。修改为777的权限,顺利启动XP。然后改成666再试,仍然可以启动XP。然后改成660再试,启动失败。好了,知道为什么了,原来试图打开/dev/kvm的进程所有者不是root,且所属组也不是kvm。查看virt-manager是以谁的身份启动的:
      ps -ef | grep virt-manager
      得到的信息:
      root     20078  1 2 17:17 ? 00:00:38 python /usr/share/virt-manager/virt-manager.py
      不对,是以root身份打开的。再查kvm:
     ps -ef | grep kvm
      得到的信息:
      110      20297  1 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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-125082-1-1.html 上篇帖子: 通过KVM_SET_USER_MEMORY_REGION操作虚拟机内存(Kernel 3.10.0 & qemu 2.0.0) 下篇帖子: J2ME对话-采访KVM之父AT
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表