默认情况下,vboxweb.service 仅监听 ipv6 本地地址 ::1。我需要此服务监听所有 ipv4 地址,以便我可以远程使用该服务。
user@vboxhost:~$ netstat -nl |grep 18083 tcp6 0 0 ::1:18083
:::* LISTEN
按照以下说明编辑 /etc/default/virtualbox 配置文件Virtualbox 文档(第 9.21.1 章)似乎不起作用:
user@vboxhost:~$ cat /etc/default/virtualbox
# Defaults for virtualbox initscript
# sourced by /etc/init.d/virtualbox
# installed at /etc/default/virtualbox by the maintainer scripts
#
# This is a POSIX shell fragment
#
# Set this to 1 if you would like the virtualbox modules to be loaded by
# the init script.
LOAD_VBOXDRV_MODULE=1
# SHUTDOWN_USERS="foo bar"
# check for running VMs of user 'foo' and user 'bar'
# 'all' checks for all active users
# SHUTDOWN=poweroff
# SHUTDOWN=acpibutton
# SHUTDOWN=savestate
# select one of these shutdown methods for running VMs
# acpibutton and savestate causes the init script to wait
# 30 seconds for the VMs to shutdown
SHUTDOWN_USERS=""
SHUTDOWN=poweroff
# Custom vboxweb config
VBOXWEB_USER=vbox
VBOXWEB_HOST=0.0.0.0
VBOXWEB_PORT=18083
重启服务后没有变化:
user@vboxhost:~$ sudo systemctl restart vboxweb.service
user@vboxhost:~$ netstat -nl |grep 18083
tcp6 0 0 ::1:18083 :::* LISTEN
我也尝试通过 /etc/default/virtualbox 更改端口,但这也不起作用。
注意:我编辑了 /lib/systemd/system/vboxweb.service 启动脚本以传递“--host 0.0.0.0”参数。这有效,但我不认为这是正确的方法。
答案1
我认为您对 的更改/etc/init.d/virtualbox
不起作用,因为 不是来自systemd
。请尝试此操作。
- 创建名为“/etc/systemd/service/vboxweb.service.d”的目录
- 在其中,创建一个名为 的文件
custom-host.conf
。
该文件的内容如下:
[Service]
Environment=VBOXWEB_HOST=0.0.0.0
然后:
systemctl daemon-reload
systemctl restart vboxweb
使用这些类型的文件在systemd.unit 手册:
除了单元文件 foo.service 之外,还可能存在一个“嵌入式”目录 foo.service.d/。此目录中所有带有“.conf”后缀的文件将在解析文件本身后解析。这对于更改或添加单元的配置设置非常有用,而无需修改单元文件。每个嵌入式文件都必须具有适当的节标题。请注意,对于实例化的单元,此逻辑将首先查找实例“.d/”子目录并读取其“.conf”文件,然后查找模板“.d/”子目录和其中的“.conf”文件。另请注意,“[Install]”节中的设置在嵌入式单元文件中不受尊重,并且不起作用。
设置环境变量的文档位于系统管理员指南
答案2
我能够通过遵循上述提示来使我的 phpVirtualBox 正常工作,也可以通过运行
vboxbmanage setproperty websrvauthlibrary null
接下来,我还更改了 PID 文件的写入位置。以下是[Service]
来自的块/lib/systemd/system/vboxweb.service
:
[Service]
User=vbox
Group=vboxusers
Type=forking
ExecStart=/usr/bin/vboxwebsrv --host=0.0.0.0 --pidfile /home/vboxadmin/.vboxweb.pid --background
PIDFile=/home/vboxadmin/.vboxweb.pid
答案3
因此,我最接近解决这个问题的方法是这样的:
编辑 /lib/systemd/system/vboxweb.service 以使用 --host=0.0.0.0 选项启动服务。我还将服务配置为以非 root 用户 vbox 启动,以提高安全性。
[Unit]
Description=VirtualBox Web Service
After=network.target
[Service]
Type=forking
ExecStart=/usr/bin/vboxwebsrv --pidfile /run/vboxweb/vboxweb.pid --host=0.0.0.0 --background
PIDFile=/run/vboxweb/vboxweb.pid
User=vbox
Group=vboxusers
[Install]
WantedBy=multi-user.target
为 /run/vboxweb 创建并设置正确的权限:
sudo mkdir /run/vboxweb
sudo chown vbox:vboxusers /run/vboxweb
sudo chmod 755 /run/vboxweb/
守护进程重新加载 systemd 并重新启动 vboxweb 服务:
sudo systemctl daemon-reload
sudo systemctl restart vboxweb.service
该服务现在正在监听 0.0.0.0 并以用户 vbox 身份运行:
user@vboxhost:~$ netstat -nl |grep 18083
tcp 0 0 0.0.0.0:18083 0.0.0.0:* LISTEN
user@vboxhost:~$ ps -ef |grep vboxweb
vbox 2905 1 0 17:08 ? 00:00:00 /usr/lib/virtualbox/vboxwebsrv --pidfile /run/vboxweb/vboxweb.pid --host=0.0.0.0 --background