以 root 身份访问 virtualbox 虚拟机
Access virtualbox VMs as root
我以普通用户身份创建了 VM。我可以通过 GUI 和 python 绑定 (pyvbox) 访问它们。我有一个 python 脚本,我需要以 root 身份 运行 才能访问其他资源。我无法通过 GUI 访问任何虚拟机,也无法以 root 身份访问 python 绑定。我怎样才能从我的脚本中访问它们?
每当我需要访问 vbox 时,我是否应该以 root 身份从我的脚本 运行 中删除特权?然后在我需要访问其他资源时返回到 root 用户?你会怎么做,这是个好主意吗?
我找到了一个解决方案,该解决方案需要您要为其监视 VM 的用户的名称:
import os, pwd, virtualbox
vbox_user="my_user"
pw=pwd.getpwnam(vbox_user)
root_uid=os.getuid()
# change location of vbox settings file
os.environ["XDG_CONFIG_HOME"]="/home/{}/.config".format(vbox_user)
# change uid to user's
# setting euid alone does not work
os.setresuid(pw.pw_uid, pw.pw_uid, uid)
# create your vbox
vbox=virtualbox.VirtualBox()
# change back to initial uid
os.setresuid(uid, uid, uid)
您可以像 vbox_user 一样使用 vbox。
我以普通用户身份创建了 VM。我可以通过 GUI 和 python 绑定 (pyvbox) 访问它们。我有一个 python 脚本,我需要以 root 身份 运行 才能访问其他资源。我无法通过 GUI 访问任何虚拟机,也无法以 root 身份访问 python 绑定。我怎样才能从我的脚本中访问它们?
每当我需要访问 vbox 时,我是否应该以 root 身份从我的脚本 运行 中删除特权?然后在我需要访问其他资源时返回到 root 用户?你会怎么做,这是个好主意吗?
我找到了一个解决方案,该解决方案需要您要为其监视 VM 的用户的名称:
import os, pwd, virtualbox
vbox_user="my_user"
pw=pwd.getpwnam(vbox_user)
root_uid=os.getuid()
# change location of vbox settings file
os.environ["XDG_CONFIG_HOME"]="/home/{}/.config".format(vbox_user)
# change uid to user's
# setting euid alone does not work
os.setresuid(pw.pw_uid, pw.pw_uid, uid)
# create your vbox
vbox=virtualbox.VirtualBox()
# change back to initial uid
os.setresuid(uid, uid, uid)
您可以像 vbox_user 一样使用 vbox。