温馨提示×

php-fpm在ubuntu上如何实现安全加固

小樊
85
2025-03-18 14:48:04
栏目: 编程语言

在Ubuntu上实现php-fpm的安全加固,可以遵循以下步骤:

更新系统和软件包

确保系统和软件包是最新的,以修复已知的安全漏洞。

sudo apt update
sudo apt upgrade

安装PHP和PHP-FPM

安装PHP及其相关扩展,以及PHP-FPM。

sudo apt install php php-fpm php-mysql php-curl php-gd php-imagick php-mbstring php-zip

配置PHP.ini

编辑PHP的配置文件php.ini,进行以下安全设置:

  • 限制内存使用:通过memory_limit设置内存使用上限,防止单个脚本消耗过多内存。
  • 限制上传文件大小:通过upload_max_filesizepost_max_size限制上传文件的大小。
  • 禁用危险函数:注释掉或删除如eval()exec()等危险函数。
  • 设置正确的错误报告级别:在生产环境中,将display_errors设置为Off,并通过error_reporting设置错误报告级别。
# Example php.ini settings
memory_limit = 256M
upload_max_filesize = 128M
post_max_size = 128M
display_errors = Off
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT & ~E_USER_NOTICE & ~E_USER_WARNING

配置PHP-FPM

编辑PHP-FPM的配置文件/etc/php/{version}/fpm/pool.d/www.conf,进行以下安全设置:

  • 使用非root用户运行PHP-FPM:通过usergroup配置项指定非root用户和用户组运行PHP-FPM。
  • 配置监听地址和端口:默认情况下,PHP-FPM监听127.0.0.1:9000,确保只接受本地访问。
  • 设置进程池参数:通过pm.max_childrenpm.start_serverspm.min_spare_serverspm.max_spare_serverspm.max_requests等参数设置进程池的行为,例如限制最大子进程数和每个进程的最大请求数。
# Example www.conf settings
user = www-data
group = www-data
listen = 127.0.0.1:9000
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500

重启服务

重启PHP-FPM和Web服务器(如Nginx)以应用配置更改。

sudo systemctl restart php{version}-fpm
sudo systemctl restart nginx

配置防火墙

使用ufw配置防火墙,允许必要的端口和服务通过。

sudo ufw allow 'Nginx Full'
sudo ufw enable

SELinux/AppArmor配置(可选)

如果使用SELinux或AppArmor,可以进一步配置以增强安全性。

# Example SELinux policy
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
sudo restorecon -Rv /var/www/html

通过上述步骤,可以有效地加固Ubuntu上的php-fpm环境,提高系统的安全性。

0