passbolt在centos 7上无法用yum安装,因passbolt-ce-server rpm包自2024年起已下线;必须使用官方bash脚本或docker安装,且需提前干预gpg密钥权限、selinux策略及数据库字符集三处配置,否则90%会卡在openpgp密钥生成或数据库连接环节。

passbolt 在 CentOS 7 上不能靠 yum install passbolt-ce-server 安装——这个包自 2024 年起已下线,直接执行会报 No package passbolt-ce-server available。必须用官方 Bash 脚本或 Docker,且三处配置不提前干预,90% 会卡在 GPG 密钥生成或数据库连接上。
为什么官方脚本 install-passbolt.sh 经常卡住不动
最常见现象是终端停在 Generating OpenPGP key for Passbolt 这一行,或报 gpg: key generation failed: No such file or directory。这不是脚本问题,而是环境没对齐:
-
/var/www/passbolt/config/gpg目录属主必须是nginx:nginx(不是root或www-data),否则 PHP-FPM 进程无权写入密钥 -
gpg-agentsocket 路径需匹配:运行gpgconf --list-dirs agent-socket,输出应为/run/user/0/gnupg/S.gpg-agent;若指向/home/nginx/.gnupg等用户目录,GPG 初始化必失败 - 系统时间偏差超过 5 分钟会导致 OpenPGP 签名验证失败,执行
timedatectl status检查,用sudo chronyd -q -s同步 - 临时调试可用:
export GPG_TTY=$(tty) && gpg --batch --passphrase '' --quick-generate-key "Passbolt Server" rsa3072 cert 0,但生产环境必须修复权限和 agent 配置
SELinux 不关不行,但 setenforce 0 是危险 shortcut
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(/.*)?",然后sudo restorecon -Rv /var/www/passbolt/config/gpg - 注意:CentOS 7/8 上必须设为
permissive(非disabled),否则 Web 安装器第 2 步(GPG 初始化)会静默失败,页面只显示“密钥生成中…”无限转圈
MySQL/MariaDB 字符集错配导致注册失败
Passbolt 要求数据库严格使用 utf8mb4 字符集和 utf8mb4_unicode_ci 排序规则。建库时只执行 CREATE DATABASE passbolt; 必然失败,后续用户注册或导入密码会触发 SQLSTATE[HY000]: General error: 1366 Incorrect string value。
- 建库命令必须带字符集:
CREATE DATABASE passbolt CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; - 同时修改
/etc/my.cnf.d/server.cnf,追加:[mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci innodb_file_format = Barracuda innodb_file_per_table = 1 innodb_large_prefix = 1
- 改完必须重启 MariaDB:
sudo systemctl restart mariadb,否则 Web 安装器检测仍会失败
SMTP 配置填对了端口却收不到验证邮件
Passbolt 的邮件功能不是可选模块,管理员创建、用户邀请、密码共享全依赖它。填了 SMTP 参数却没收到邮件,大概率是加密方式与端口不匹配:
- 端口填
465→ 加密方式必须选ssl(Web 安装器里叫encryption下拉项) - 端口填
587→ 加密方式必须选tl(不是tls,也不是留空) - 密码字段必须填“第三方客户端专用密码”(如 QQ 邮箱的授权码、163 邮箱的客户端密码),不能填邮箱登录密码
- Firewalld 必须运行且已放行
http和https服务,否则安装脚本内部调用firewall-cmd --permanent --add-service=http会直接退出并报Failed to connect to bus
gpgme-devel 是否装了、SELinux 是否设为 permissive、firewalld 是否开着——这三项不提前确认,后面所有操作都是白忙。











