passbolt 在 centos 7 上需手动执行官方脚本安装,因 rpm 包已弃用;核心卡点为 openpgp 密钥权限(nginx:nginx)、selinux 策略(需精准放行而非禁用)及 nginx-php-fpm socket 配置错位,三者必须严丝合缝。

Passbolt 在 CentOS 7 上能跑起来,但不是“装完就用”,核心卡点在 OpenPGP 密钥生成、SELinux 策略和数据库权限三处。官方脚本 install-passbolt.sh 会自动处理大部分配置,但一旦失败,90% 是因为这三处没提前干预。
为什么不能直接 yum install passbolt-ce-server?
Passbolt CE 官方 RPM 包(passbolt-ce-server)从 2024 年起已弃用,当前主流安装方式是通过官方提供的 Bash 脚本或 Docker。直接 yum install passbolt-ce-server 在 CentOS 7 上会报 No package passbolt-ce-server available,因为仓库源已下线。必须改用:
- 下载并执行官方安装脚本:
wget https://raw.githubusercontent.com/passbolt/passbolt_install_script/master/install-passbolt.sh - 或手动拉取
passbolt/passbolt:latest-ce镜像(推荐用于测试环境) - 注意:脚本依赖
epel-release和remi-php74,缺一不可,否则php-gnupg扩展无法加载,后续密钥操作全挂
OpenPGP 密钥生成失败的典型表现和修复
安装过程中最常卡在 Generating OpenPGP key for Passbolt 这一步,终端停住不动或报 gpg: key generation failed: No such file or directory。根本原因是:
-
/var/www/passbolt/config/gpg目录权限不对,应为nginx:nginx(非root或www-data) -
gpg-agent未启用或 socket 路径不匹配,需确认gpgconf --list-dirs agent-socket输出是否指向/run/user/0/gnupg/S.gpg-agent - 系统时间偏差超过 5 分钟会导致 OpenPGP 签名验证失败,运行
timedatectl status检查并同步:sudo chronyd -q -s
临时绕过办法(仅调试用):export GPG_TTY=$(tty) && gpg --batch --passphrase '' --quick-generate-key "Passbolt Server <admin>" rsa3072 cert 0</admin>
SELinux 不关不行,但不能简单 setenforce 0
Passbolt 的 PHP-FPM 进程需要读写 /var/www/passbolt/config/gpg、访问 MySQL socket、发起 HTTPS 外部请求(如 Let’s Encrypt),默认 SELinux 策略全部禁止。但直接 setenforce 0 会带来安全风险。正确做法是:
- 保持
enforcing模式,只放行必要策略:sudo setsebool -P httpd_can_network_connect 1 - 修复 GPG 目录上下文:
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/passbolt/config/gpg(/.*)?",然后restorecon -Rv /var/www/passbolt/config/gpg - 若使用 MariaDB Unix socket(而非 TCP),还需:
sudo setsebool -P httpd_can_network_connect_db 1
Nginx 配置后 502 Bad Gateway 的真实原因
脚本生成的 /etc/nginx/conf.d/passbolt.conf 默认监听 127.0.0.1:8080,但 PHP-FPM 实际监听的是 /run/php-fpm/www.sock。这个错配不会报错,但导致 Nginx 始终连不上后端。检查方法:
- 运行
sudo ss -tulpn | grep ':8080',若无输出,说明 PHP-FPM 没按预期启动 - 查看
systemctl status php-fpm,常见错误是Failed to start The PHP FastCGI Process Manager,根源多为php.ini中extension=gnupg.so加载失败(缺少php-gnupg包) - 修复后重载服务顺序必须是:
sudo systemctl restart php-fpm && sudo nginx -t && sudo systemctl reload nginx,漏掉任意一步都可能 502
真正麻烦的从来不是安装步骤本身,而是每个环节都依赖前一个环节的精确状态 —— 尤其是 GPG 密钥所有权、PHP 扩展加载顺序、SELinux 上下文三者咬合得严丝合缝,差一点,整个流程就静默失败。











