Debian PHP配置如何提高安全性
小樊
36
2025-12-20 23:20:43
Debian PHP 安全加固清单
一 基础与系统层加固
- 保持系统与 PHP 为最新:执行sudo apt update && sudo apt full-upgrade -y;若运行旧版 Debian 且官方仓库 PHP 版本滞后,可启用 backports 获取安全修复,例如:echo “deb http://deb.debian.org/debian $(lsb_release -cs)-backports main” | sudo tee /etc/apt/sources.list.d/backports.list,随后 apt update 并从 backports 安装所需 PHP 包。启用自动安全更新:sudo apt install unattended-upgrades -y && sudo dpkg-reconfigure unattended-upgrades。
- 最小化暴露面:仅开放必要端口,使用 UFW 或 iptables 放行 22/TCP(SSH)、80/TCP(HTTP)、443/TCP(HTTPS);数据库如 3306 仅限本地或受控网段访问。
- 强化访问与权限:禁用 root 远程登录,使用 SSH 密钥认证;创建普通用户并通过 sudo 执行特权操作;关闭不必要的服务与端口。
- 启用 HTTPS/TLS:使用 Certbot 部署 Let’s Encrypt 证书,例如:sudo apt install certbot python3-certbot-apache && sudo certbot --apache -d yourdomain.com。
- 运行环境加固:启用 AppArmor(或 SELinux,若可用)限制进程能力;定期做漏洞扫描(如 OpenVAS、Nessus)与日志审计。
二 PHP 运行时关键配置
- 隐藏信息与错误控制:设置 expose_php = Off(不暴露版本),display_errors = Off(生产环境不在页面显示错误),开启日志 log_errors = On 并指定 error_log 路径,便于审计。
- 禁用危险函数:在 php.ini 中限制高风险函数,例如:disable_functions = exec,passthru,shell_exec,system,proc_open,popen,eval,assert。
- 限制远程资源加载:如无业务需求,关闭 allow_url_fopen = Off 与 allow_url_include = Off,阻断通过 URL 包含/读取远程内容。
- 上传与请求控制:按应用需求下调 upload_max_filesize(如 2M)与 post_max_size(如 8M),并限制上传目录不可执行。
- 会话与 Cookie 安全:启用 session.cookie_httponly = On、session.cookie_secure = On(仅 HTTPS)、session.use_strict_mode = On,避免 session.use_trans_sid = 0(不在 URL 中传递 SID)。
- 文件访问边界:使用 open_basedir 将 PHP 可访问目录限制在项目根目录与必要目录,降低越权读取风险。
- 可选增强:在需要时部署 Suhosin 等硬化模块以抵御缓冲区溢出、格式化字符串等攻击。
三 PHP-FPM 与 Web 服务器配置
- PHP-FPM 进程隔离与权限:为每个站点使用独立 pool,以非 root 运行(如 www-data);设置 listen.owner / listen.group / listen.mode 仅允许 Web 服务器读取;通过 pm.max_children / pm.start_servers / pm.min_spare_servers / pm.max_spare_servers 限制并发,防止资源耗尽。
- 执行与扩展白名单:在 pool.d/www.conf 使用 security.limit_extensions 仅允许 .php 等必要后缀执行,避免上传目录被当作脚本执行。
- Web 服务器最小化:
- Apache:仅启用必要模块(如 rewrite),禁用目录列表,使用 .htaccess 精细控制访问;
- Nginx:将 PHP 处理通过 php-fpm 代理,使用 try_files $uri =404 防止路径遍历,限制请求方法,隐藏 Server 与 X-Powered-By 等敏感头。
四 应用与运维安全实践
- 输入与输出安全:全站使用预处理语句/参数化查询防 SQL 注入;对输出进行适当转义/过滤防 XSS;为表单与状态变更操作加入CSRF 令牌校验。
- 依赖与漏洞治理:使用 Composer 的 security-checker 扫描依赖 CVE:composer require symfony/security-checker 后执行 bin/security-checker security:check,按报告升级受影响的库。
- 日志与监控告警:集中收集 PHP-FPM 慢日志/访问日志 与 Web/系统日志,设置阈值告警;结合 Prometheus + Grafana 等做容量与异常监控。
- 备份与演练:定期备份代码、配置与数据库(如 tar/rsync),并进行恢复演练与变更评审,确保可回滚与可观测。
五 快速检查与生效
- 确认生效的配置路径:使用 phpinfo() 或 php -i | grep ‘Configuration File’ 查看加载的 php.ini;Apache 与 CLI 可能使用不同 ini。
- 重启服务:修改后重启 Apache2 或 php-fpm(如 systemctl restart apache2 或 systemctl restart php8.2-fpm,版本号按实际替换)。
- 基线核查清单:
- expose_php = Off、display_errors = Off、log_errors = On;
- 已设置 disable_functions 与 open_basedir;
- allow_url_fopen/allow_url_include = Off(如业务允许);
- upload_max_filesize / post_max_size 合理;
- session.cookie_httponly/secure/strict_mode 已启用;
- UFW/iptables 仅放行 22/80/443;
- Certbot 证书有效且自动续期;
- security-checker 无高危依赖;
- AppArmor 已启用并加载相应 profile。