如何配置 vboxweb 以监听 Ubuntu 16.04 上的特定地址?

如何配置 vboxweb 以监听 Ubuntu 16.04 上的特定地址?

默认情况下,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。请尝试此操作。

  1. 创建名为“/etc/systemd/service/vboxweb.service.d”的目录
  2. 在其中,创建一个名为 的文件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

相关内容