我需要让用户访问控制他们如何使用虚拟机以及他们可以通过基于 KVM 的虚拟机管理程序上的 Virsh 做什么。
到目前为止我从中学到http://wiki.libvirt.org我必须/etc/libvirt/libvirtd.conf
为 unix 套接字启用 unix 套接字权限,并创建一个名为 libvirtd 的新组,并将用户添加到其中。一切都很顺利,但是,当我使用这些用户时,我看不到任何虚拟机
virsh list --all
libvirt.ogr 上的文档还提到使用 polkit 和其他技术。
如果有人可以帮助我提供使用简单unix socket permission
方法或polikit
方法sudoer
或任何其他方法的任何实用示例。
我希望以这样的方式拥有用户权限,即来自 virsh 的用户只能执行有限的任务,例如不能做virsh start
但不能virsh destroy
。
答案1
我使用 libvirt wiki 在 CentOS 6.5 上成功使用了 PolicyKit:
http://wiki.libvirt.org/page/SSHPolicyKitSetup
要使它正常工作,缺少的步骤virsh:
是将以下内容添加到您的 .bash_profile 中:
if test -x `which virsh`; then
export LIBVIRT_DEFAULT_URI=qemu:///system
fi
(这是来自这个邮政)
此设置还允许从远程计算机上的 virt-manager 无缝使用。
答案2
为了实现正确的 RBAC,您需要一个比 libvirt 更复杂的 VM 管理平台,它仅用于控制 VM 生命周期,除此之外没有其他用途。请查看 oVirt.org 以获得一个很好的示例
答案3
回答我自己的问题。最简单、最容易的解决方案是 sudoers。我们可以用 sudoers 正则表达式做很多事情。我只是添加了一条 sudoer 规则。
保留所有客户机的名称,以便您可以使用某种正则表达式指定它们。就我而言,我保留了所有客户机,即那些我希望由非 root 用户控制的机器,以 vmname- 开头。
以下规则将允许非 root 用户启动并获取控制台虚拟机,但不允许销毁它。
Cmnd_Alias KVMCMD = /usr/bin/virsh list --all,/usr/bin/virsh start vmname*
Cmnd_Alias KVMBAD = virsh destroy vmname*
希望这能帮助那些正在寻找类似解决方案的人。