温馨提示×

Linux PHP-FPM安全防护措施有哪些

小樊
41
2025-10-20 12:28:14
栏目: 编程语言

1. 更新系统与PHP-FPM至最新版本
定期执行sudo apt update && sudo apt upgrade,确保Linux内核、PHP核心及PHP-FPM组件修复已知安全漏洞,降低被攻击风险。

2. 以非特权用户身份运行PHP-FPM
修改PHP-FPM进程池配置文件(如/etc/php/{version}/fpm/pool.d/www.conf),将usergroup设置为非root用户(如www-data),避免进程越权访问系统文件。

3. 配置安全的监听方式
优先使用Unix套接字替代TCP端口(如listen = /run/php/php{version}-fpm.sock),并设置套接字文件权限为755、所有者为www-datachown www-data:www-data /run/php)。若必须使用TCP,需通过防火墙限制访问IP。

4. 限制PHP进程资源与数量
通过pm.max_children(最大子进程数,如50)、pm.start_servers(启动时进程数,如5)、pm.min_spare_servers(最小空闲进程数,如5)、pm.max_spare_servers(最大空闲进程数,如35)参数,避免进程耗尽系统资源;同时限制单个脚本内存使用(memory_limit = 256M)和上传文件大小(upload_max_filesize = 10M)。

5. 禁用危险函数与远程文件访问
php.ini中通过disable_functions禁用高危函数(如eval,exec,system,shell_exec,passthru),防止恶意代码执行;设置allow_url_fopen = Offallow_url_include = Off,禁止远程文件包含,避免攻击者通过URL注入恶意代码。

6. 配置PHP安全选项
启用open_basedir限制PHP脚本访问目录(如open_basedir = /var/www/html/:/tmp/),防止跨目录攻击;关闭错误显示(display_errors = Off),开启错误日志(log_errors = Onerror_log = /var/log/php_errors.log),避免泄露敏感信息。

7. 强化防火墙与网络访问控制
使用UFW或iptables限制对PHP-FPM端口的访问:若使用Unix套接字,无需额外配置;若使用TCP,仅允许Web服务器IP访问(如sudo ufw allow from 127.0.0.1 to any port 9000)。

8. 启用慢日志监控性能异常
在进程池配置文件中设置request_slowlog_timeout = 10s(超时报错时间)和slowlog = /var/log/php-fpm/www-slow.log,记录执行缓慢的请求,便于排查潜在的性能瓶颈或恶意请求。

9. 使用HTTPS加密传输
通过Let’s Encrypt获取免费SSL证书(sudo certbot --apache -d yourdomain.com),强制网站使用HTTPS,防止数据在传输过程中被截获或篡改。

10. 定期审计与监控
定期检查PHP-FPM日志(/var/log/php-fpm/www-error.log/var/log/php-fpm/www-slow.log)和系统日志,监控异常进程、错误信息;使用监控工具(如Prometheus+Grafana)跟踪系统性能,及时发现异常行为。

11. 可选:启用Web应用防火墙(WAF)
部署ModSecurity等WAF,过滤恶意请求(如SQL注入、XSS攻击),为PHP-FPM添加额外的安全层。

12. 可选:使用SELinux或AppArmor
若系统支持,启用SELinux(setenforce 1)或AppArmor(aa-enforce /etc/apparmor.d/usr.sbin/php-fpm),通过强制访问控制(MAC)限制PHP-FPM的权限,进一步提升安全性。

0