Debian 12 安装 GlobaLeaks 5.0.99 指南

在 Debian 12 上从零安装 GlobaLeaks 5.0.99:官方 APT 仓库与离线 deb 两种方案、systemd 托管、首次初始化向导、管理员登录、测试举报提交与端到端验收,附实测回显与排障(2026-10-26)。

GlobaLeaksGlobaLeaks匿名举报Debian 12安全2026/10/26

Debian 12 安装 GlobaLeaks 5.0.99 指南

目标:在 Debian 12(bookworm)服务器上从零完成 GlobaLeaks 5.0.99 的安装、systemd 托管、首次初始化向导、管理员登录,并提交一条测试举报完成端到端验收。以下命令与回显均来自 Debian 12 x86_64 实测环境(2026-10-26),版本经官方 APT 仓库与运行实例双重确认。

一、环境信息

本次实测环境的关键信息如下,复现时请逐项对齐:

  • 操作系统:Debian 12(bookworm),x86_64
  • 软件版本:GlobaLeaks 5.0.99(globaleaks_5.0.99_all.deb,46,831,010 字节)
  • 安装方式:官方 APT 仓库 https://deb.globaleaks.org 的 bookworm/ 套件
  • 服务单元:globaleaks.service(systemd,Type=simple,用户 globaleaks)
  • 监听端口:HTTPS 8443、HTTP 8080(HTTP 会 301 跳转到 HTTPS)
  • 数据目录:/var/globaleaks(数据库 globaleaks.db、Tor 临时目录、附件存储)
  • 配置文件:/etc/default/globaleaks(服务环境变量)、/etc/apparmor.d/usr.bin.globaleaks(沙箱策略)
  • 运行进程:/usr/bin/python3 /usr/bin/globaleaks -n --ip=:: --working-path=/var/globaleaks/
  • Tor:随包内置,首次启动自动生成 v3 onion 地址
  • 实测时间:2026-10-26

💡 说明:GlobaLeaks 的业务配置(站点名称、语言、通知、保留策略等)不在 /etc/default/globaleaks 中,而是保存在数据库内,通过管理后台或 REST API 修改。/etc/default/globaleaks 只负责进程级开关,二者的分工见本文第七章。

二、前置条件

安装前需要确认服务器具备以下条件,否则后续步骤会在依赖解析或服务启动阶段失败。

2.1 硬件与网络

  • CPU 双核 2.0GHz 及以上、内存 1GB 及以上、磁盘 20GB 及以上(官方最低要求,实际按举报量与附件保留期扩容)。
  • 服务器可访问 https://deb.globaleaks.org 与 Debian 官方源。
  • 服务器时间同步正常(Tor 与 TLS 证书校验依赖系统时间)。
  • 若计划使用公网域名与受信任证书,需提前把域名解析到服务器;只用 onion 地址访问时可跳过域名准备。

2.2 基础软件

Debian 12 最小化安装后,先补齐 HTTPS 下载、密钥管理与沙箱所需组件:

apt-get update
apt-get install -y ca-certificates curl gnupg apparmor
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
ca-certificates is already the newest version (20230311+deb12u1).
apparmor is already the newest version (3.0.8-3).
0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.

输出节选(实测首尾):本次环境 ca-certificates、apparmor 均已预装,因此显示为 already the newest version;若为全新最小化系统,apt 会实际下载并安装这些包。

2.3 端口占用检查

GlobaLeaks 固定监听 8080 与 8443,安装前确认未被其他服务占用:

ss -lntp | grep -E ':(8080|8443)\s'
(无输出表示两个端口均空闲)

⚠️ 注意:如果服务器上已有 Nginx/Apache 占用 80/443,不需要停用它们——GlobaLeaks 使用 8080/8443,可通过反向代理对外暴露,但反向代理必须关闭访问日志,否则会留下举报人 IP,破坏匿名性。

三、版本选型说明

官方 APT 仓库按 Debian 套件分目录,bookworm/ 对应 Debian 12。仓库内同时保留 5.0.x 全系列与 4.x 历史版本,安装前用 apt-cache policy 确认候选版本:

apt-cache policy globaleaks
globaleaks:
  Installed: 5.0.99
  Candidate: 5.0.99
  Version table:
 *** 5.0.99 500
        500 https://deb.globaleaks.org bookworm/ Packages
        100 /var/lib/dpkg/status
     5.0.98 500
        500 https://deb.globaleaks.org bookworm/ Packages
     5.0.97 500
        500 https://deb.globaleaks.org bookworm/ Packages
     5.0.96 500
        500 https://deb.globaleaks.org bookworm/ Packages
     5.0.95 500
        500 https://deb.globaleaks.org bookworm/ Packages
     5.0.94 500
        500 https://deb.globaleaks.org bookworm/ Packages
     5.0.93 500
        500 https://deb.globaleaks.org bookworm/ Packages
     5.0.92 500
        500 https://deb.globaleaks.org bookworm/ Packages
     5.0.91 500
        500 https://deb.globaleaks.org bookworm/ Packages
     5.0.90 500
        500 https://deb.globaleaks.org bookworm/ Packages
     4.15.9 500
        500 https://deb.globaleaks.org bookworm/ Packages
     4.14.8 500
        500 https://deb.globaleaks.org bookworm/ Packages
     4.13.22 500
        500 https://deb.globaleaks.org bookworm/ Packages

版本选择要点:

维度5.0.994.15.9(旧分支)
发布时间2026-07-262024 年及以前
官方支持当前稳定版,持续修复仅历史留存
数据库版本68更低,升级需迁移
建议新部署一律选它仅用于存量系统兼容

关键差异:APT 只会安装候选版本(Candidate),当前为 5.0.99;若需锁定版本,安装后使用 apt-mark hold globaleaks 防止自动升级。

四、方案 A:官方 APT 仓库在线安装

这是官方推荐、也是本文实测采用的方案:由 APT 管理依赖与后续升级,适合服务器可访问外网的场景。

4.1 方案说明

完整链路为:导入仓库签名密钥 → 写入 APT 源 → 更新索引 → 安装软件包 → 启用并启动 systemd 服务。所有步骤在 root 下执行。

4.2 导入签名密钥

GlobaLeaks 仓库使用独立签名密钥,先下载并以二进制密钥环格式落盘:

wget -O /usr/share/keyrings/globaleaks-archive-keyring.asc https://deb.globaleaks.org/globaleaks.asc

gpg --dearmor < /usr/share/keyrings/globaleaks-archive-keyring.asc \
  > /usr/share/keyrings/globaleaks-archive-keyring.gpg

ls -l /usr/share/keyrings/globaleaks-archive-keyring.gpg
-rw-r--r-- 1 root root 4017 Oct 26 00:14 /usr/share/keyrings/globaleaks-archive-keyring.gpg

生成的 .gpg 文件为 4017 字节,后续 APT 源通过 signed-by 引用它,避免全局信任第三方密钥。

4.3 配置 APT 源

echo 'deb [signed-by=/usr/share/keyrings/globaleaks-archive-keyring.gpg] https://deb.globaleaks.org bookworm/' \
  > /etc/apt/sources.list.d/globaleaks.list

cat /etc/apt/sources.list.d/globaleaks.list

apt-get update
deb [signed-by=/usr/share/keyrings/globaleaks-archive-keyring.gpg] https://deb.globaleaks.org bookworm/
Hit:1 http://deb.debian.org/debian bookworm InRelease
Hit:2 http://deb.debian.org/debian bookworm-updates InRelease
Get:3 http://deb.debian.org/debian-security bookworm-security InRelease [34.8 kB]
Ign:4 https://deb.globaleaks.org bookworm/ InRelease
Hit:5 https://deb.globaleaks.org bookworm/ Release
Fetched 34.8 kB in 2s (22.6 kB/s)
Reading package lists...

⚠️ 注意:Ign:4 ... InRelease 是正常现象——该仓库只提供 Release/Release.gpg,不提供 InRelease,APT 会自动回退到 Hit:5 ... Release 校验。若此处出现 NO_PUBKEY 或签名错误,说明 4.2 的密钥未正确导入。

4.4 安装软件包

DEBIAN_FRONTEND=noninteractive apt-get install -y globaleaks
Reading package lists...
Building dependency tree...
Reading state information...
0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 3 not upgraded.
Need to get 46.8 MB of archives.
After this operation, 0 B of additional disk space will be used.
Get:1 https://deb.globaleaks.org bookworm/ globaleaks 5.0.99 [46.8 MB]
debconf: delaying package configuration, since apt-utils is not installed
Fetched 46.8 MB in 21s (2181 kB/s)
(Reading database ... 14979 files and directories currently installed.)
Preparing to unpack .../globaleaks_5.0.99_all.deb ...
Unpacking globaleaks (5.0.99) over (5.0.99) ...
Setting up globaleaks (5.0.99) ...

输出节选(实测):本次为 --reinstall 复测,故显示 1 reinstalled 与 over (5.0.99);全新安装时对应行为 1 newly installed 与 Unpacking globaleaks (5.0.99)。下载速度 2181 kB/s 为实测值,取决于服务器网络。

确认包状态:

dpkg -l | grep globaleaks
ii  globaleaks                    5.0.99                            all          Free and open-source whistleblowing software

4.5 systemd 托管与启动

安装包自带 globaleaks.service,只需启用并启动:

systemctl enable --now globaleaks
systemctl status globaleaks --no-pager
● globaleaks.service - GlobaLeaks Whistleblowing Software
     Loaded: loaded (/lib/systemd/system/globaleaks.service; enabled; preset: enabled)
     Active: active (running) since Mon 2026-10-26 00:37:50 UTC; 47min ago
    Process: 5932 ExecStartPre=/usr/lib/globaleaks/globaleaks-firewall start (code=exited, status=0/SUCCESS)
   Main PID: 5949 (globaleaks)
      Tasks: 13 (limit: 2932)
     Memory: 132.9M (swap max: 0B)
        CPU: 7.649s

输出节选(实测首部):状态为 active (running) 即表示主进程已就绪;ExecStartPre 调用 globaleaks-firewall start 完成 iptables 出站限制,这一步失败会导致服务直接退出。

端口监听确认:

ss -lntp | grep -E ':(8080|8443)\s'
LISTEN 0      4096               *:8443             *:*    users:(("globaleaks",pid=5949,fd=18),("globaleaks",pid=5949,fd=9))
LISTEN 0      4096               *:8080             *:*    users:(("globaleaks",pid=5949,fd=17),("globaleaks",pid=5949,fd=8))

HTTP 访问应返回 301 跳转,HTTPS 返回 200:

curl -s -o /dev/null -w "http_code=%{http_code}\n" http://127.0.0.1:8080/
curl -k -s -o /dev/null -w "https_code=%{http_code}\n" https://127.0.0.1:8443/
http_code=301
https_code=200

启动日志会打印 Tor 地址与 HTTPS 入口:

journalctl -u globaleaks --no-pager | grep -E '\[HTTPS\]|\[Tor\]' | tail -2
Oct 26 00:37:50 gl-b1 globaleaks-exec[5949]: 2026-10-26T00:37:50+0000 [stdout#info] - [HTTPS]: https://0.0.0.0
Oct 26 00:37:50 gl-b1 globaleaks-exec[5949]: 2026-10-26T00:37:50+0000 [stdout#info] - [Tor]:  http://g3hk4xho2xlb5nnstt2wexxin32k3pnbbgcetf4e6wiyc4vv2cq6hlid.onion

⚠️ 注意:Tor 首次启动需要数十秒到数分钟完成引导,期间日志会出现 Tor control port not open ... waiting for Tor to become available,属于正常过渡状态;只要服务保持 active 且 HTTPS 可访问,即不影响初始化。onion 地址由 /var/globaleaks 内的密钥决定,重启不会改变。

4.6 首次初始化向导

用浏览器访问 https://<服务器IP或域名>:8443,自签证书会提示不受信任,确认继续后进入六步向导:

  1. 选择站点语言:默认 English,可在下拉框选择中文等语言;
  2. 设置项目名称:本文实测填写 GlobaLeaks Demo;
  3. 创建管理员账号:用户名 admin,口令 q1w2e3r4(向导会显示强度提示);
  4. 创建第一个受理人账号:用户名 recipient,口令 q1w2e3r4;
  5. 阅读并接受许可证(AGPL 3.0);
  6. 完成向导,页面跳转到管理员登录入口。

向导提交后,服务端会记录站点名称、管理员与受理人,并关闭向导入口。用接口回读可确认状态:

# 管理员侧接口回读(验收辅助脚本,非 GlobaLeaks 命令)
python3 /root/admin_check.py
login -> OK role: admin id: 1d5d33523b18a04c215fd7314243baf07f149ab47fe8478329391131fe22a3f1
GET /api/admin/node -> 200 version: 5.0.99 name: GlobaLeaks Demo

wizard_done 在节点配置中已为 true(见第七章的配置回读),表示初始化不可重复执行;若需重来,只能清空数据目录后重新初始化。

4.7 提交测试举报并验收

用浏览器打开 https://<服务器地址>:8443 的举报入口(未登录状态默认进入提交页):

  1. 选择受理渠道(默认 Default);
  2. 按问卷填写标题、描述、地点、日期等字段;
  3. 不勾选身份信息,保持匿名提交;
  4. 提交成功后,页面会给出一段接收凭据(receipt),必须立即保存,它是举报人回访的唯一凭证。

提交动作在服务端产生的记录可用管理员接口回读验证:

python3 /root/admin_check.py
tips -> 200 [{"id": "bafb6af0-1da7-475c-91a9-6aec41c9e054", "progressive": 1, "creation_date": "2026-10-26T00:40:59.619294Z", "expiration_date": "2027-01-24T23:59:59Z", "context_id": "93d73aab-7424-46ca-b28d-1cf87856a2af", "status": "new", "substatus": null, "tor": false, "comments": 0, "files": 0, "receiver_count": 1, ...}]

验收判据:

  • status 为 new,表示新举报已进入受理队列;
  • creation_date 与提交时间一致(实测 2026-10-26T00:40:59Z);
  • expiration_date 为 2027-01-24,对应默认 90 天保留期(tip_timetolive: 90);
  • receiver_count 为 1,表示已关联到向导中创建的受理人。

💡 说明:同一次验收中第二条举报的接口回读为 9febc924-784e-4f3c-a7a7-91a78053eebd / 2026-10-26T01:25:01Z / new,说明提交链路可重复工作。管理员在 Web 后台的「举报收件箱」能看到同样的条目。

五、方案 B:离线 deb 包安装

服务器无法访问外网、或需要在隔离网段部署时,使用官方仓库中的 deb 包离线安装。

5.1 获取安装包

在有网络的机器上,直接按仓库索引给出的实际地址下载:

apt-get download --print-uris globaleaks
'https://deb.globaleaks.org/bookworm/globaleaks_5.0.99_all.deb' globaleaks_5.0.99_all.deb 46831010 SHA512:f5bcaa767d04250ac141b436ad5302d559311719f0580c712e142d35a8e0a019c7ced9597c88daeec3ace56f4eef94558f14fba01c16a4306a0e1fbdfa2faa9bf
wget https://deb.globaleaks.org/bookworm/globaleaks_5.0.99_all.deb
sha512sum globaleaks_5.0.99_all.deb
f5bcaa767d04250ac141b436ad5302d559311719f0580c712e142d35a8e0a019c7ced9597c88daeec3ace56f4eef94558f14fba01c16a4306a0e1fbdfa2faa9bf  globaleaks_5.0.99_all.deb

文件名中的 all 表示与架构无关(内部为 Python 代码),大小 46,831,010 字节;SHA512 与仓库索引一致即可排除传输损坏。

5.2 安装与依赖修复

把 deb 包传入目标服务器(如 /root/globaleaks_5.0.99_all.deb),先 dpkg -i,再让 apt 补齐依赖:

dpkg -i /root/globaleaks_5.0.99_all.deb
(Reading database ... 14979 files and directories currently installed.)
Preparing to unpack .../root/globaleaks_5.0.99_all.deb ...
Unpacking globaleaks (5.0.99) over (5.0.99) ...
Setting up globaleaks (5.0.99) ...
DEBIAN_FRONTEND=noninteractive apt-get install -f -y
Reading package lists...
Building dependency tree...
Reading state information...
0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.

输出节选(实测):本次复测环境中依赖已齐全,install -f 无新增安装;在纯净离线服务器上,该命令会从本地/内网源补齐 python3-twisted、tor、python3-nacl 等依赖。若离线服务器没有任何可用源,需提前把依赖包一并带入。

5.3 启用与验证

与在线安装完全一致:

systemctl enable --now globaleaks
systemctl is-active globaleaks
active

dpkg -L globaleaks 可查看包内落盘位置,确认关键文件齐全:

/etc/default/globaleaks
/etc/apparmor.d/usr.bin.globaleaks
/usr/bin/gl-admin
/usr/bin/globaleaks
/usr/lib/globaleaks/globaleaks-exec
/usr/lib/globaleaks/globaleaks-firewall
/usr/lib/python3/dist-packages/globaleaks/...

⚠️ 注意:离线包安装不会自动配置 APT 源,后续升级需要重新下载新版本 deb 并重复 5.2。若希望保留升级能力,建议在网络恢复后补做第四章的源配置。

六、方案对比与选择建议

维度方案 A:APT 在线仓库方案 B:离线 deb 包
是否需外网需要(仅安装与升级时)不需要,可完全隔离
依赖处理apt 自动解析需 apt-get install -f 或预置依赖
版本控制apt-cache policy 可见全版本,可 hold以包文件为准,人工管理
升级维护apt-get upgrade 一条命令手工下载替换
签名校验APT 自动校验仓库签名需自行核对 SHA512
适用场景常规公网/内网有代理的服务器隔离网段、审计要求禁外联的环境

选择建议:能联网就用方案 A,后续安全补丁升级成本最低;隔离网段用方案 B,并在内网搭建私有 APT 源以复用依赖解析能力。两种方案安装后的服务单元、端口、数据目录完全一致,后续初始化流程通用。

七、配置说明

本节只覆盖安装后立即需要的进程级配置;站点业务参数保存在数据库中,通过管理后台(Advanced Settings)修改,不在 /etc/default/globaleaks 内;逐项参数与生效验证见《GlobaLeaks 5.0.99 配置参数详解》。

7.1 服务环境变量 /etc/default/globaleaks

cat /etc/default/globaleaks
# This is a configuration file for the globaleaks service;
# it allows you to perform common modifications to the behavior
# of the globaleaks daemon.
#
# Default settings can be found at: /usr/share/globaleaks/default
APPARMOR_SANDBOXING=0

逐项说明:

  • 默认值集中在 /usr/share/globaleaks/default,/etc/default/globaleaks 只需覆盖需要改动的项。
  • APPARMOR_SANDBOXING=0 表示关闭 AppArmor 强制沙箱。本次实测环境因宿主内核未启用 AppArmor 而设置该项;生产服务器应安装并启用 AppArmor(第二章已安装 apparmor),保持该行不存在(默认即启用沙箱),以获得进程级最小权限。
  • 修改该文件后需 systemctl restart globaleaks 生效。

7.2 服务单元的安全约束

globaleaks.service 自带加固项,安装后无需改动即可获得以下基线:

NoNewPrivileges=yes
CapabilityBoundingSet=
ProtectSystem=strict
ProtectHome=yes
ReadWritePaths=/var/globaleaks
PrivateTmp=yes
PrivateDevices=yes
RestrictNamespaces=yes
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 AF_NETLINK
SystemCallFilter=@system-service
RestartPreventExitStatus=78

要点解读:进程只能写 /var/globaleaks(ReadWritePaths),无法获得任何 capability;退出码 78 表示配置类致命错误,systemd 不会自动重启,需要人工排查——这正好对应第八章的启动失败场景。

7.3 数据目录与监听地址

  • /var/globaleaks/globaleaks.db:SQLite 数据库,包含站点配置、用户、举报与审计日志。
  • /var/globaleaks/tmp/tor_control、tor_socks:Tor 控制与 SOCKS 套接字。
  • 监听地址由 globaleaks --ip=:: 指定,默认双栈;可在 /etc/default/globaleaks 追加 --ip 相关环境变量前先确认服务单元参数,避免重复定义。

⚠️ 注意:不要直接编辑数据库文件改配置。服务运行时会持有连接,直接改库可能不生效或损坏数据;配置变更走管理后台(Advanced Settings)或 gl-admin setvar。

八、常见问题

8.1 服务启动失败,日志提示 AppArmor Sandboxing Failure

现象:systemctl status globaleaks 显示 status=78,日志出现:

GlobaLeaks Apparmor Sandboxing Failure: requires apparmor

定位:宿主内核未启用 AppArmor,导致服务无法加载 /etc/apparmor.d/usr.bin.globaleaks 策略。

处理:确认 AppArmor 可用并在内核启用:

apt-get install -y apparmor
systemctl status apparmor --no-pager | head -3

若宿主确实无法提供 AppArmor(如部分受限虚拟化环境),才在 /etc/default/globaleaks 追加 APPARMOR_SANDBOXING=0 后重启服务;这是降低安全基线的妥协,生产环境不建议。

8.2 apt 报 NO_PUBKEY 或签名无效

现象:apt-get update 提示仓库签名无法验证。

处理:重新执行 4.2,确认 .gpg 文件存在且 sources.list.d/globaleaks.list 中的 signed-by 路径与之完全一致;ls -l 应显示 4017 字节。

8.3 8080 端口返回 301 而不是页面

这是设计行为:HTTP 入口只做跳转到 HTTPS。访问 https://<地址>:8443 即可;若希望 80/443 对外,用反向代理转发并关闭代理日志。

8.4 首次访问证书告警

默认使用自签证书(https_selfsigned_cert),浏览器提示不受信任属正常。生产环境应在管理后台配置受信任证书或启用 Let’s Encrypt 自动签发。

8.5 向导无法重新进入

向导完成后 wizard_done=true,入口关闭。需要重做时必须停止服务、清空 /var/globaleaks 后重新初始化;该操作会删除全部举报数据,务必先备份。

8.6 Tor 地址长时间不出现

先看 journalctl -u globaleaks | grep -i tor。若持续出现 control port 未就绪,检查 /var/globaleaks/tmp/ 权限与宿主防火墙是否拦截回环连接;Tor 引导失败不影响 HTTPS 通道,但会失去网络层匿名入口。

九、卸载与清理

卸载前先备份数据目录:

tar -zcf /root/globaleaks-backup.tar.gz -C /var/globaleaks .
systemctl stop globaleaks
systemctl disable globaleaks
apt-get purge -y globaleaks
rm -rf /var/globaleaks
rm -f /etc/apt/sources.list.d/globaleaks.list
rm -f /usr/share/keyrings/globaleaks-archive-keyring.asc /usr/share/keyrings/globaleaks-archive-keyring.gpg

验证卸载结果:

dpkg -l | grep globaleaks
(无输出表示包已移除)

⚠️ 注意:apt-get purge 会删除 /etc/default/globaleaks 与 AppArmor 策略,但 /var/globaleaks 需手工删除;该目录含加密密钥与举报数据,删除不可恢复。

十、参考链接