CentOS环境下PHP-FPM安全配置指南
确保系统和PHP及相关扩展为最新版本,修复已知安全漏洞:
sudo yum update -y sudo yum install epel-release -y sudo yum install php php-cli php-fpm php-mysqlnd php-gd php-mbstring php-xml php-bcmath -y
编辑PHP-FPM池配置文件(通常为/etc/php-fpm.d/www.conf
),修改以下参数:
user
和group
设置为非特权用户(如nginx
或apache
,根据Web服务器调整);listen.owner
和listen.group
为相同用户/组,listen.mode
为0660
(限制socket文件访问权限)。user = nginx group = nginx listen = /run/php-fpm/www.sock listen.owner = nginx listen.group = nginx listen.mode = 0660
通过pm
(进程管理)参数控制PHP-FPM进程数量,避免资源耗尽:
pm = dynamic # 动态进程管理模式 pm.max_children = 50 # 最大子进程数(根据服务器内存调整,如1GB内存建议30-50) pm.start_servers = 5 # 启动时的子进程数 pm.min_spare_servers = 5 # 最小空闲进程数 pm.max_spare_servers = 35 # 最大空闲进程数 pm.max_requests = 1000 # 每个子进程处理1000个请求后重启(防止内存泄漏)
编辑/etc/php.ini
,通过disable_functions
禁用可能被恶意利用的函数:
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
避免敏感信息泄露,配置错误日志记录:
display_errors = Off # 生产环境关闭错误显示 log_errors = On # 开启错误日志 error_log = /var/log/php_errors.log # 日志路径(需确保目录可写)
编辑/etc/php.ini
,增强会话防护:
session.cookie_httponly = On # 防止XSS窃取cookie session.cookie_secure = On # 仅通过HTTPS传输cookie(需开启HTTPS) session.cookie_samesite = Strict # 限制cookie跨站发送 session.use_strict_mode = On # 防止会话固定攻击
编辑/etc/php.ini
,控制文件上传行为:
file_uploads = On # 允许文件上传(如需禁用则设为Off) upload_max_filesize = 2M # 单个文件最大大小(根据需求调整,建议≤5M) post_max_size = 8M # POST数据最大大小(需大于upload_max_filesize) max_file_uploads = 5 # 单次请求最多上传文件数
使用firewalld
开放HTTP/HTTPS端口,限制对PHP-FPM端口(如使用Unix socket则无需开放TCP端口)的访问:
sudo firewall-cmd --permanent --zone=public --add-service=http sudo firewall-cmd --permanent --zone=public --add-service=https sudo firewall-cmd --reload
使用certbot
申请免费SSL证书,强制网站使用HTTPS:
sudo yum install -y certbot python3-certbot-nginx # Nginx服务器 sudo certbot --nginx -d yourdomain.com # 替换为你的域名
定期检查PHP-FPM和PHP错误日志,监控异常行为:
# 查看PHP-FPM错误日志(路径取决于配置) sudo tail -f /var/log/php-fpm/error.log # 查看PHP错误日志 sudo tail -f /var/log/php_errors.log
若系统启用SELinux,确保其处于enforcing
模式,并配置PHP-FPM上下文:
sudo setenforce 1 # 开启SELinux sudo vi /etc/selinux/config # 确认SELINUX=enforcing # 设置Web目录上下文(如/var/www/html) sudo chcon -Rv --type=httpd_sys_rw_content_t /var/www/html
完成上述配置后,重启PHP-FPM和Web服务器(如Nginx)使更改生效:
sudo systemctl restart php-fpm sudo systemctl restart nginx # 或httpd(Apache)