我想知道是否可以使用 KVM libvirt 创建一个多用户环境
,每个用户都可以在那里创建自己的 vm,但其他人不能访问
看到这个Multiuser use of virt-manager
似乎不起作用
EDIT1:我想为每个虚拟机设置所有者
我想知道是否可以使用 KVM libvirt 创建一个多用户环境
,每个用户都可以在那里创建自己的 vm,但其他人不能访问
看到这个Multiuser use of virt-manager
似乎不起作用
EDIT1:我想为每个虚拟机设置所有者
感谢 libvirt 的 PolicyKit 支持,我相信这可以完成,具体取决于您需要多少功能。
这些规则可以由您创建并由 PolicyKit ACL 作为数据库(文件、服务器等)访问,以获取有关所有者的信息。此外,如果 PolicyKit 规则对数据库具有写入权限,您可以在创建 VM 时将它们分配给它们各自的所有者,从而自动创建该数据库。它可能不是万无一失的(例如,当 VM 定义失败时,数据库已经拥有该记录),因此可能需要更多的挂钩,具体取决于您正在寻找多少功能。这就是为什么在 libvirt 之上构建的项目(或者只是管理员部署的脚本)可以具有更多功能的原因。
如果对您来说更简单的事情就足够了,那么您可以说用户只能在以其用户名开头的 VM 上调用 API。只要确保覆盖了极端情况(例如,用户“bla”无法访问用户的“blabla”机器)。
如前所述,根据您需要多少功能,它可以很容易地完成,或者只需几行脚本,或者您可能需要一个位于 libvirt 之上的完整虚拟化系统。
没有人提到的另一件事(它可能是您想要/正在寻找的)。如果您(作为非 root 用户)连接到 qemu:///session(而不是系统,请参阅Connections to QEMU driver)您将连接到您自己的 libvirt 守护程序实例,您将只能看到您自己的机器(在其他换句话说,它将与其他用户的会话守护进程隔离)。
好吧,就像您链接的文章中宣传的那样,libvirt 确实在每个 API 基础上支持 PolicyKit(我们称之为 ACL)。所以如果你设置一些polkit规则,你应该可以得到你想要的。例如,域 X 仅对用户 Y 可见。不幸的是,我认为不可能使这些规则动态化(我的意思是,如果用户创建一个域,它将只对他们可见)。
除非您想编写自己的包装器/管理系统,否则您只需要 libvirt 以外的东西来管理访问和 VM 与用户的关系。oVirt/RHV 开箱即用,即使有一个特殊的用户门户,登录用户只能看到属于他的虚拟机。我很确定其他虚拟化管理系统也具有此功能
此文件作为 polkit 规则
这里是格式的vm
这个虚拟机只能被相应的用户访问