在Ubuntu上配置PHP-FPM以实现安全设置,可以遵循以下步骤:
确保系统和所有软件包都是最新的,以修复已知的安全漏洞。
sudo apt update
sudo apt upgrade -y
如果你还没有安装PHP-FPM,可以使用以下命令进行安装:
sudo apt install php-fpm -y
PHP-FPM的配置文件通常位于 /etc/php/{version}/fpm/pool.d/www.conf
,其中 {version}
是你的PHP版本号。
确保PHP-FPM以非特权用户和组运行,通常是 www-data
。
user = www-data
group = www-data
默认情况下,PHP-FPM监听在Unix socket上,而不是TCP端口,这样可以提高安全性。
listen = /run/php/php{version}-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
启用一些安全选项,例如限制进程数量和请求大小。
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
request_terminate_timeout = 30s
通过设置 open_basedir
来限制PHP可以访问的系统目录,防止非法访问。
open_basedir = /var/www/html:/tmp
编辑 /etc/php/{version}/fpm/pool.d/www.conf
文件,注释掉或删除不需要的模块。
;security.limit_extensions = .php .html .htm
屏蔽PHP错误输出,将 display_errors
设置为 Off
,并将错误信息记录到日志文件中。关闭全局变量 register_globals
,以防止表单数据被自动注册为全局变量。
display_errors = Off
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT & ~E_USER_NOTICE & ~E_USER_WARNING
register_globals = Off
Suhosin是一个PHP程序的保护系统,可以抵御一些常见的攻击。
extension=suhosin.so
使用 ufw
(Uncomplicated Firewall)来限制对PHP-FPM端口的访问。
sudo ufw allow 9000/tcp
sudo ufw reload
如果使用SELinux或AppArmor,可以进一步限制PHP-FPM的权限。
sudo semanage fcontext -a -t httpd_sys_content_t /var/www/html(/.)?
sudo restorecon -Rv /var/www/html
编辑相应的配置文件来限制PHP-FPM的权限。
sudo aa-disable /etc/apparmor.d/usr.sbin.php-fpm7.4
定期更新PHP和PHP-FPM到最新版本,以确保安全漏洞得到修复。
sudo apt update && sudo apt upgrade -y
配置PHP-FPM的日志记录,并定期检查日志文件以发现任何异常活动。
access.log = /var/log/php-fpm/access.log
error.log = /var/log/php-fpm/error.log
通过以上步骤,你可以大大提高在Ubuntu上运行PHP-FPM的安全性。记住,安全性是一个持续的过程,需要定期审查和更新配置。