将 KVM VM 分配给用户(KVM 用户授权)

将 KVM VM 分配给用户(KVM 用户授权)

我想给我的朋友一个专用服务器上的虚拟机,我希望他能够重新启动虚拟机或更改 iso - 所以基本上我希望获得与虚拟机托管提供商(例如 Linode)相同的功能。我想最简单的解决方案是给他一个 shell 帐户,但如何限制 shell?是否可以针对我的用例限制 libvirt?

答案1

libvirt 对单个虚拟机没有任何用户访问控制,因此最好的选择可能是围绕 virsh 编写一系列包装脚本(一个用于重新启动虚拟机,一个用于停止虚拟机,一个用于启动虚拟机,一个用于更改 ISO 映像,以及您需要的任何其他脚本),然后让您的朋友从他的登录帐户以 sudo 身份访问这些脚本。

包装器脚本应该用硬编码值(例如虚拟机名称)编写,并仔细检查任何用户提供的数据。例如,确保如果他提供了 ISO 映像文件名,那么它实际上是一个 ISO 映像,并且他具有对它的读取权限。

例如,如果虚拟机名为“FriendVM”,则重启脚本可能如下所示:

/bin/sh #!/bin/sh
#脚本名称:Reboot-FriendVM.sh

virsh 重启 FriendVM

授予他该脚本的 sudo 访问权限将允许他仅重新启动该特定 VM。他将像这样运行它:sudo Reboot-FriendVM.sh

很容易从中推断出围绕“virsh start”、“virsh destroy”的类似包装脚本。更改 ISO 映像的脚本会稍微复杂一些,留给读者练习吧 :)

如果您不想编写大量小脚本,这个想法的另一种变体是编写一个具有 virsh 功能受限子集的单个脚本,该脚本仅在他的 VM 上运行,并授予他对该 VM 的 sudo 访问权限。例如称之为 rvirsh。

这是一种简单、简约的方式,无需任何额外花哨就能完成工作。

如果您有更多时间,您可能还想研究虚拟化管理软件,例如 openstack、google 的 ganeti、opennebula 等。它们的作用远不止添加用户访问控制,学习它们需要大量的时间和精力。

答案2

我不知道有什么方法可以直接做到这一点,但你可以安装一个控制面板,例如普罗克斯莫克斯并授予他访问权限。

答案3

最不幸的是,除了使用 Web 界面或编写自己的界面外,没有稳定、“干净”且更新安全的方法来做到这一点。

答案4

如果您已经在使用 libvirt,并且遵循其他人提出的 Web Panel 建议,您可能会发现 Karesansui 很有趣:http://karesansui-project.info

据我所知,Proxmox 是最简单且功能最丰富的虚拟化环境管理解决方案。

Ganeti+Ganeti Web Manager(目前正在研究)看起来也非常好而且功能强大。

相关内容