CentOS中PHP-FPM的安全设置指南

确保系统和PHP-FPM为最新版本,修复已知安全漏洞:
sudo yum update -ysudo yum install epel-release -ysudo yum install php-fpm php-cli php-mysqlnd php-gd php-mbstring -y编辑PHP-FPM进程池配置文件(通常为/etc/php-fpm.d/www.conf),将运行用户/组设置为非root(如apache或nginx),并确保监听文件的权限正确:
user = apachegroup = apachelisten.owner = apachelisten.group = apachelisten.mode = 0660# 限制监听文件仅所有者可读写根据服务器资源调整进程池参数,避免过多进程消耗资源或被滥用:
pm = dynamic# 动态进程管理模式pm.max_children = 50# 最大子进程数(根据内存调整,如1GB内存建议30-50)pm.start_servers = 5# 启动时的子进程数pm.min_spare_servers = 5# 最小空闲进程数pm.max_spare_servers = 10# 最大空闲进程数在/etc/php.ini中禁用可能被用于执行系统命令的危险函数,防止代码注入:
disable_functions = eval,exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source关闭错误显示,将错误日志记录到指定文件(避免在网页上暴露服务器路径、数据库信息等):
display_errors = Offlog_errors = Onerror_log = /var/log/php_errors.log限制上传文件的大小和类型,防止恶意文件(如PHP木马)上传:
file_uploads = Onupload_max_filesize = 2M# 单个文件最大2MBpost_max_size = 8M# POST数据最大8MB(需大于upload_max_filesize)通过会话配置防止会话劫持和固定攻击:
session.cookie_httponly = On# 禁止JavaScript访问会话cookiesession.cookie_secure = On# 仅通过HTTPS传输会话cookie(需开启HTTPS)session.cookie_samesite = Strict# 限制会话cookie仅在同站点请求中发送session.use_strict_mode = On# 防止会话固定攻击session.gc_maxlifetime = 1440# 会话有效期(分钟,建议≤30分钟)在/etc/php.ini中设置open_basedir,限制PHP脚本只能访问指定目录(如网站根目录和临时目录),防止访问系统敏感文件:
open_basedir = /var/www/html/:/tmp/使用firewalld限制对PHP-FPM监听端口(默认Unix socket或9000端口)的访问,仅允许必要IP:
# 若使用Unix socket(默认),无需额外防火墙规则(仅本地访问)# 若使用TCP端口(如9000),添加以下规则:sudo firewall-cmd --permanent --zone=public --add-port=9000/tcpsudo firewall-cmd --reload使用certbot申请免费SSL证书,强制网站使用HTTPS,防止数据在传输过程中被窃取:
sudo yum install -y certbot python3-certbot-nginx# 若使用Nginxsudo certbot --nginx -d yourdomain.com# 替换为你的域名sudo systemctl enable certbot.timer# 设置证书自动续期使用ModSecurity增强PHP应用的安全性,防御SQL注入、XSS等常见攻击:
sudo yum install -y mod_securitysudo systemctl enable mod_securitysudo systemctl start mod_security# 可选:安装OWASP Core Rule Set(CRS)增强防护/var/log/php-fpm/error.log和/var/log/php_errors.log,发现异常请求(如大量404、500错误)。systemctl status php-fpm确认PHP-FPM运行正常,避免进程崩溃导致服务中断。