在Linux服务器上安全设置PHP-FPM(FastCGI Process Manager)是非常重要的,因为它处理PHP脚本的执行。以下是一些关键步骤和建议,以确保PHP-FPM的安全性:
默认情况下,PHP-FPM可能以root用户运行,这会增加安全风险。建议创建一个专用的非特权用户来运行PHP-FPM。
sudo adduser www-data
sudo chown -R www-data:www-data /var/run/php-fpm
sudo chown -R www-data:www-data /var/log/php-fpm
使用Unix套接字而不是TCP/IP端口可以提高安全性,因为Unix套接字只在本地有效,减少了被远程攻击的风险。
编辑/etc/php/7.x/fpm/pool.d/www.conf文件:
listen = /run/php/php7.x-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
通过限制PHP-FPM进程数,可以防止服务器过载。
编辑/etc/php/7.x/fpm/pool.d/www.conf文件:
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
慢日志可以帮助你识别执行时间过长的脚本,从而进行优化。
编辑/etc/php/7.x/fpm/pool.d/www.conf文件:
request_slowlog_timeout = 10s
slowlog = /var/log/php-fpm/www-slow.log
编辑/etc/php/7.x/cli/php.ini文件,启用一些安全选项:
display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log
使用iptables或ufw来限制对PHP-FPM套接字的访问。
sudo ufw allow unix:/run/php/php7.x-fpm.sock
确保你的PHP和PHP-FPM版本是最新的,以修复已知的安全漏洞。
sudo apt-get update
sudo apt-get upgrade php7.x php7.x-fpm
如果你的系统启用了SELinux或AppArmor,可以进一步限制PHP-FPM的权限。
sudo setsebool -P httpd_can_network_connect_db 0
sudo setsebool -P httpd_enable_homedirs 0
确保你的AppArmor配置文件正确设置了PHP-FPM的限制。
定期检查PHP-FPM的日志文件,监控异常行为。
tail -f /var/log/php-fpm/www-error.log
tail -f /var/log/php-fpm/www-slow.log
通过以上步骤,你可以显著提高Linux服务器上PHP-FPM的安全性。记住,安全是一个持续的过程,需要定期审查和更新配置。