这不是一个真正的问题,但我宁愿把它放在这里以记录它,因为网络上有很多相互矛盾的信息。
当您在无头 Linux 服务器上运行 Virtualbox 时,据我所知至少有两个本机选项(即非 RDP/VNC/X)可以远程访问 Virtualbox。一个是 phpvirtualbox,另一个是 remotebox。这两种解决方案都需要 Virtual Box Web 服务。
出于安全原因,以 root 用户身份运行 Virtualbox Web 服务不是一个好选择。网络上建议的许多解决方案要么过时,因为它们谈论更改 /etc/config/defaults 文件 - 但这与 systemd 不再相关,只与 initd 相关。
其他解决方案仅涵盖部分步骤,例如无法访问 PAM 或 PID 文件。
答案1
我们需要解决以下步骤:
- 创建非 root 用户来运行 vbox-web 服务
- 将用户添加到 Virtualbox 和 PAM 的正确组中
- 修改 systemd 单元文件,w/r 为可执行文件、用户和 pidfile 的位置
创建用户
创建一个非 root 用户,具有主目录并且无登录功能
adduser --home /home/virtual --shell /bin/false --ingroup vboxusers --disabled-password--disabled-login virtual
将用户添加到影子组
用户的主要组必须是 vboxusers。为了允许 Web 服务通过 PAM 进行身份验证,至少在 Debian 系统(例如 Debian、ubuntu 或 Mint)上,可以使其成为影子组的成员。
usermod -a -G shadow virtual
修改 systemd 单元文件
该单元文件需要包含以下内容:
[Unit]
Description=Virtual Box Web Service
After=network.target
[Service]
Type=forking
User=virtual
Group=vboxusers
ExecStart=/usr/bin/vboxwebsrv --pidfile /home/virtual/vboxweb.pid --host=0.0.0.0 --background
PIDFile=/home/virtual/vboxweb.pid
[Install]
WantedBy=multi-user.target
因此,我们不是调用启动批处理脚本,而是直接调用可执行文件。选项指示 pidfile 的位置以及它绑定到的接口(在本例中为 0.0.0.0,因此是任何接口)。
YouTube 上的这个视频详细描述了所有必要的步骤。