Debian PHP 安全更新与加固指南
一 标准做法 使用官方仓库保持安全更新
- 更新索引并升级已安装包:执行sudo apt update && sudo apt upgrade -y,优先获取 Debian 安全仓库中的修复;如涉及依赖变更,使用sudo apt full-upgrade。完成后用php -v确认版本。
- 启用自动安全更新:安装并启用unattended-upgrades,自动下载并安装安全补丁。执行sudo apt install unattended-upgrades -y,随后运行sudo dpkg-reconfigure unattended-upgrades按向导启用;可用sudo systemctl status apt-daily.timer与sudo systemctl status apt-daily-upgrade.timer检查定时任务状态。
- 重要变更前先备份数据与配置,变更后重启相关服务(如apache2或php-fpm)并做业务回归测试。
二 旧版本获取安全修复 Backports
- 当稳定版仓库中的 PHP 版本较旧、但官方已在新版本中修复漏洞时,可启用Debian Backports获取较新的安全修复版本。
- 启用步骤:
- 添加 Backports 源:echo “deb http://deb.debian.org/debian $(lsb_release -cs)-backports main” | sudo tee /etc/apt/sources.list.d/backports.list
- 更新索引:sudo apt update
- 从 backports 安装/升级 PHP:sudo apt install php php-cli -t $(lsb_release -cs)-backports
- 重启 Web 服务并验证版本
- 注意:Backports 可能带来小版本差异,务必先在测试环境验证兼容性。
三 需要较新主版本时的安全源方案 Ondřej Surý 仓库
- Debian 官方仓库可能滞后于上游安全修复,若业务需要更新的 PHP 主版本且仍需 Debian 打包与签名,可使用Ondřej Surý 的 PHP 仓库(适用于 Debian/Ubuntu)。
- 添加与更新:
- 安装必要组件并导入 GPG 公钥:sudo apt install apt-transport-https lsb-release ca-certificates -y;curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
- 添加源:echo “deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main” | sudo tee /etc/apt/sources.list.d/php.list
- 更新索引并安装所需版本(示例为8.3):sudo apt update;sudo apt install php8.3 php8.3-cli php8.3-fpm php8.3-{mysql,xml,curl,mbstring,json,zip}
- 如从旧版升级,按需切换 CLI/FPM/Apache 模块并重启服务;验证:php -v
- 建议仅保留一个主版本的 PHP,避免多版本并存引发 SAPI/扩展冲突。
四 更新后的安全加固与验证
- 调整关键 php.ini 参数(路径因 SAPI 与版本不同,常见在**/etc/php/**下):
- 禁用危险函数:disable_functions = exec,passthru,shell_exec,system
- 隐藏版本信息:expose_php = Off
- 视业务调整:allow_url_fopen、open_basedir、session.cookie_httponly、session.cookie_secure 等
- 重启服务:sudo systemctl restart apache2 或 sudo systemctl restart php8.x-fpm
- 依赖漏洞扫描:在项目目录使用Composer的symfony/security-checker检测依赖的已知 CVE:composer require symfony/security-checker;bin/security-checker security:check,并按提示升级受影响组件。