适用版本:数据安全柜
1.1.1及后续兼容版本。
数据安全柜 1.1.1 提供了 Web 端。Web 端并不是独立的业务服务,而是将浏览器操作转换为本机守护进程操作的可视化客户端:安全域、实例、审核和文件操作仍由 dvagentd 完成。
Web 端由 dvwebd 网关提供页面和 API;它以低权限的 dvweb 用户运行,浏览器不会直接访问数据盘或内核模块。
使用 Web 端前,请确认:
1.1.1 或更高版本的 datasafebox-cmd-cli 完整软件包;该包应包含 dvwebd、Web 静态页面和 dvweb.service。dvagent.service 与 dvweb.service 都可以正常启动。使用边界:Web 端是部署主机上的可视化客户端,不是供多个不同账号同时共用的中心化 Web 门户。同一
dvagentd同时只维护一个业务登录身份;其他浏览器或 CLI 使用另一个账号登录后,当前 Web 会话会提示重新登录。
首次安装时,如尚未配置软件源,请先完成软件源配置,然后安装软件包:
sudo apt update
sudo apt install -y datasafebox-cmd-cli
已有旧版本时,升级到包含 Web 端的版本:
sudo apt update
sudo apt install --only-upgrade datasafebox-cmd-cli
dv --version
安装或升级完成后,安装脚本会创建 dvweb 系统用户,并依次启用/重启 dvagent.service 和 dvweb.service。升级会短暂中断 Web 访问,请避开正在进行的关键操作。
本文仅说明 APT 软件包部署。当前没有可直接复用的 Docker/Compose 部署方案,也不建议仅替换 dvwebd 而保留旧版 dvagentd。
在部署主机执行:
test -x /opt/datasafebox-cmd-cli/bin/dvwebd && echo "dvwebd 已安装"
sudo systemctl status dvagent.service dvweb.service --no-pager
curl --noproxy '*' -fsS http://127.0.0.1:8080/api/healthz
健康检查成功时会返回 JSON,其中包含 "ok":true 和 "daemon":"reachable"。若 dvweb.service 不存在或 dvwebd 未安装,请先确认当前软件包版本确为 1.1.1 或更高版本。
默认访问地址为:
http://127.0.0.1:8080/
该地址默认只允许部署主机本机访问。请在部署主机的浏览器中打开它;打开后会自动跳转到三方登录页,登录成功会自动回到数据安全柜首页,无需像命令行登录那样复制授权码。

Web 端的访问方式取决于 dvwebd 部署在什么样的机器上:
IP+端口 直接访问。dvwebd 默认监听 127.0.0.1:8080。只要浏览器和 dvwebd 运行在同一台机器上,直接打开第 2.2 节的默认链接即可:
http://127.0.0.1:8080/
不需要修改配置,也不需要额外的网络设置。
若默认的 8080 端口和本机其他服务冲突,或想自定义端口,可以直接改端口,不需要启用 HTTPS(因为仍然监听在 127.0.0.1 回环地址上):
编辑 Web 服务专用配置文件 /var/lib/dvweb/.local/share/dv/config.ini(不是 CLI 用的 /root/.local/share/dv/config.ini),保留已有内容,只新增或修改 [web] 节:
[web]
port=8090
重启服务并验证:
sudo systemctl restart dvweb.service
curl --noproxy '*' -fsS http://127.0.0.1:8090/api/healthz
在浏览器打开新的地址:
http://127.0.0.1:8090/
只要
listen仍保持默认的127.0.0.1(回环地址),改端口不需要配置 TLS 证书,登录回调地址也会自动按新端口推断,无需手动设置callback_url。
适用于没有桌面环境、需要其他机器直接通过 https://<服务器IP>:<端口>/ 访问的服务器部署。
出于会话安全考虑,dvwebd 只允许两种监听方式之一:绑定 127.0.0.1(仅本机可访问,见 3.1),或者绑定对外地址并同时启用 TLS——dvwebd 会拒绝在非回环地址上以明文 HTTP 启动。因此“IP+端口”直接访问目前必须启用 HTTPS,下面步骤已经尽量精简。
准备证书目录和私钥(示例路径 /var/lib/dvweb/tls/,私钥只对 dvweb 用户可读):
sudo install -d -o root -g dvweb -m 0750 /var/lib/dvweb/tls
sudo install -o root -g dvweb -m 0644 /path/to/fullchain.pem /var/lib/dvweb/tls/fullchain.pem
sudo install -o root -g dvweb -m 0640 /path/to/privkey.pem /var/lib/dvweb/tls/privkey.pem
如果只有服务器 IP、没有域名:大多数 CA 不会给纯 IP 签发证书,可以改用自签名证书(SAN 中需包含该 IP):
openssl req -x509 -newkey rsa:2048 -nodes -days 825 \
-keyout privkey.pem -out fullchain.pem \
-subj "/CN=<服务器IP>" -addext "subjectAltName=IP:<服务器IP>"
使用自签名证书时,浏览器会提示“证书不受信任”,需要手动信任该证书才能继续访问。
编辑 Web 服务专用配置文件 /var/lib/dvweb/.local/share/dv/config.ini(不是 CLI 用的 /root/.local/share/dv/config.ini),保留已有内容,只新增或修改 [web] 节,直接用 IP 作为访问地址:
[web]
listen=0.0.0.0
port=8443
tls_cert=/var/lib/dvweb/tls/fullchain.pem
tls_key=/var/lib/dvweb/tls/privkey.pem
callback_url=https://<服务器IP>:8443/api/auth/callback
保存后确保文件权限正确:
sudo chown dvweb:dvweb /var/lib/dvweb/.local/share/dv/config.ini
sudo chmod 0600 /var/lib/dvweb/.local/share/dv/config.ini
重启并验证:
sudo systemctl restart dvweb.service
curl --noproxy '*' -fsSk https://<服务器IP>:8443/api/healthz
然后在浏览器打开 https://<服务器IP>:8443/,并在防火墙或安全组中仅向需要的来源开放该端口。
要点速查:
| 配置项 | 说明 |
|---|---|
listen |
监听地址,0.0.0.0 表示所有 IPv4 网卡 |
port |
监听端口,需大于 1024(dvwebd 以非 root 用户运行) |
tls_cert / tls_key |
证书与私钥路径,必须成对有效且可被 dvweb 读取 |
callback_url |
浏览器实际访问的完整回调地址,须以 /api/auth/callback 结尾,协议、地址、端口需与访问链接一致 |
| 配置优先级 | dvwebd 命令行参数 > config.ini > 内置默认值 |
不要修改
/lib/systemd/system/dvweb.service(或系统对应的 vendor unit 路径)来改端口或地址,软件包升级可能覆盖该文件。不支持反向代理或子路径部署:Web 前端和 API 固定部署在站点根路径,不能配置为
https://example.com/datasafebox/这类子路径访问;请使用独立域名/IP 或独立端口。
登录成功后,左侧导航列出可访问的安全域、归档安全域、安全域实例和“文件传输”。左侧栏底部的用户菜单可打开消息、关于页面和退出登录。
| Web 功能模块 | 页面入口 | 可完成操作 | 对应 CLI 命令/功能 |
|---|---|---|---|
| 安全域 | 左侧“创建安全域”或安全域名称 | 创建、查看、编辑描述、管理可见用户、归档、停用、移除、加密文件 | dv domain |
| 安全域实例 | 安全域详情的“创建安全域实例”或左侧实例名称 | 创建、查看、启动、删除、导入文件、申请白名单、申请导出 | dv instance |
| 审核 | 安全域详情中的相关实例、应用白名单和文件导出区域 | 审核实例、白名单与单个导出文件 | dv audit |
| 消息 | 左侧栏底部的用户菜单 → “消息” | 查看全部/未读、标记已读、全部已读、删除 | dv message |
| 文件传输 | 左侧“文件传输”,或安全域详情的“发送加密文件” | 发送 .sealed 文件、查看进度和记录、取消传输 |
dv transfer recv(接收端) |
| 会话 | 左侧栏底部的用户菜单 | 打开用户中心、退出登录 | dv auth |
_ 和 -)。安全域创建者可管理描述和可见用户、加密文件、审核申请,以及执行停用/移除等管理操作。被添加的可见用户可以查看安全域并申请实例。

进入安全域详情页后,可查看基本信息、可见用户、相关实例、应用白名单审核和文件导出审核。创建者可在此页:
.sealed 加密文件;“归档/恢复”只改变当前用户左侧列表中的分类,不会关闭安全域或删除数据。停用后,运行中的实例会停止,加密文件无法继续访问;移除安全域属于不可恢复操作,应在确认无保留需求后执行。

在安全域详情页点击“创建安全域实例”,选择实例名称、可用磁盘分区、授权期限,以及可选的初始应用白名单。
高风险操作:所选磁盘或分区将用于 LUKS 加密盘,并会在首次启动实例时初始化/格式化,原有数据不可恢复。 请只选择系统识别为可用、且已完成备份的专用磁盘/分区;不要选择系统盘、已挂载盘或已有业务数据的磁盘。
普通安全域实例的典型状态流转为:
/mnt/<实例编号>;典枢安全域实例由后端自动授权并自动启动,不一定经过上述人工审核步骤;请以页面展示的最终状态为准。
实例期限以 UTC+8 的日期解释,截止到所选日期的 23:59:59。页面默认提供 60 天期限,提交前请按实际授权要求调整。

打开“运行中”的实例详情页,可以:
.sealed 加密文件到实例;删除正在运行的实例会卸载并格式化其加密盘,数据不可恢复。没有连接该实例数据盘的其他机器仅可查看实例信息,不能启动、导入、导出、修改白名单或删除实例;请回到持有该数据盘的主机操作。

在“文件传输”页面,或在安全域详情页点击“发送加密文件”,选择部署主机上的 .sealed 文件。系统会生成 6 位取件码,接收方在另一台已安装命令行客户端的机器上执行:
dv transfer recv <6位取件码>
取件码 1 小时内有效且只能使用一次。文件内容通过 WebRTC 点对点传输;信令服务只用于协调连接,不承载文件内容。关闭页面或传输弹窗不会取消任务,如需中止请显式点击“取消传输”。

Web 页面中的文件选择器和磁盘选择器浏览的是 dvagentd 所在部署主机的文件系统,而不是浏览器所在电脑的文件系统。它不会把浏览器本机文件上传到服务器。
例如,通过服务器版的 IP+端口配置远程访问 Web 端时,导入、加密、发送文件所选择的路径仍必须位于部署主机(而不是打开浏览器的这台电脑)。请先通过符合组织安全要求的方式将文件放到部署主机可访问的目录,再在 Web 页面中选择该路径。
dvagentd 业务身份。请不要让不同账号在同一部署主机上并发管理同一守护进程。127.0.0.1 回环监听,仅本机访问,如需换端口直接改 port 即可(3.1);如需 IP+端口直接访问,请启用 HTTPS、使用可信证书或提示用户信任自签名证书,并限制防火墙来源(3.2)。| 现象 | 检查与处理 |
|---|---|
| 页面无法打开 | 执行 sudo systemctl status dvweb.service --no-pager,确认服务正在运行;本机用 curl --noproxy '*' -fsS http://127.0.0.1:8080/api/healthz 检查 |
| 健康检查提示守护进程不可达 | 执行 sudo systemctl status dvagent.service --no-pager;Web 网关依赖 dvagentd,后者未运行时 Web 端无法执行业务 |
dvweb 不断重启或提示无法绑定端口 |
使用 sudo journalctl -u dvweb.service -n 100 --no-pager 查看原因,并检查目标端口是否已被其他进程占用 |
| 远程 HTTPS 无法启动 | 检查 [web] 是否同时设置了 listen、tls_cert、tls_key、callback_url;确认证书/私钥存在、匹配且 dvweb 可读取 |
| 登录后回不到 Web 页面 | 确认 callback_url 与浏览器实际访问的协议、域名/IP、端口完全一致,且路径为 /api/auth/callback |
| 找不到笔记本上的文件 | 文件选择器仅浏览部署主机;先将文件安全地传到部署主机,再从页面选择 |
| 页面提示会话被其他用户接管 | 其他浏览器或 CLI 已用不同账号登录同一 dvagentd;请确认应使用的账号后重新登录 |
如需进一步排查,请收集以下输出后联系管理员:
sudo systemctl status dvagent.service dvweb.service --no-pager
sudo journalctl -u dvweb.service -n 100 --no-pager