CentOS 上的 PHP-FPM 安全加固可以通过以下几个方面来实现:
更新系统和软件包:
sudo yum update -y
配置防火墙:
firewalld 或 iptables 来限制对 PHP-FPM 服务的访问。sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
配置 PHP-FPM:
/etc/php-fpm.d/www.conf 或 /etc/php-fpm.conf),进行以下安全设置:
listen.owner 和 listen.group 为非 root 用户和组,例如 www-data。listen.mode 为 0660,以限制文件权限。ping 和 slowlog 功能。request_terminate_timeout 以防止慢请求攻击。listen.owner = www-data
listen.group = www-data
listen.mode = 0660
ping.path = /ping
slowlog = /var/log/php-fpm/www-slow.log
request_terminate_timeout = 30s
限制文件上传大小:
php.ini 文件中设置 upload_max_filesize 和 post_max_size,以限制用户上传文件的大小。upload_max_filesize = 10M
post_max_size = 10M
禁用危险函数:
php.ini 文件中禁用危险的 PHP 函数,如 exec, system, shell_exec, popen 等。disable_functions = exec,passthru,shell_exec,system,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
配置错误日志:
log_errors = On
error_log = /var/log/php-fpm/error.log
使用 SELinux:
sudo setsebool -P httpd_can_network_connect_db 0
sudo setsebool -P httpd_enable_homedirs 0
定期备份:
监控和日志分析:
通过以上步骤,你可以显著提高 CentOS 上 PHP-FPM 的安全性。记得在每次更改配置后重启 PHP-FPM 服务:
sudo systemctl restart php-fpm