温馨提示×

PHP-FPM在Linux上的安全设置方法

小樊
63
2025-09-22 22:54:35
栏目: 编程语言

PHP-FPM在Linux上的安全设置方法

1. 最小化进程权限

确保PHP-FPM以非root用户(如www-data)运行,降低权限滥用风险。修改配置文件(路径通常为/etc/php/{version}/fpm/pool.d/www.conf/etc/php-fpm.d/www.conf),设置:

user = www-data
group = www-data

若使用Unix socket通信,还需明确socket文件的归属与权限:

listen.owner = www-data
listen.group = www-data
listen.mode = 0660

修改后重启服务使配置生效:sudo systemctl restart php{version}-fpm

2. 限制通信访问

  • 优先使用Unix socket:相较于TCP端口,Unix socket仅允许本地进程访问,减少远程攻击面。将listen指令设置为:
    listen = /run/php/php{version}-fpm.sock
    
  • 若使用TCP端口:修改listen指令为127.0.0.1:9000(仅本地访问),并通过防火墙(如ufw)限制端口访问:
    sudo ufw allow from 192.168.1.0/24 to any port 9000  # 仅允许可信IP段
    sudo ufw enable
    

3. 禁用危险功能与函数

  • 禁用高危PHP函数:在www.conf中通过disable_functions指令禁用可能执行系统命令的函数,如:
    disable_functions = exec,shell_exec,system,passthru,curl_exec,fopen,file_put_contents
    
  • 限制URL操作:在php.ini中关闭远程文件包含和打开URL的功能,防止恶意代码远程执行:
    allow_url_fopen = Off
    allow_url_include = Off
    
  • 隐藏PHP信息:关闭expose_php以避免暴露PHP版本信息,减少针对性攻击:
    expose_php = Off
    

4. 配置文件与目录权限

  • Web根目录权限:确保Web目录(如/var/www/html)仅能被Web服务器用户读写,避免其他用户修改文件:
    sudo chown -R www-data:www-data /var/www/html
    sudo find /var/www/html -type d -exec chmod 755 {} \;
    sudo find /var/www/html -type f -exec chmod 644 {} \;
    
  • 上传目录隔离:将上传目录(如uploads)设置在Web根目录之外(如/var/uploads),并禁止脚本执行:
    sudo mkdir /var/uploads
    sudo chown www-data:www-data /var/uploads
    sudo chmod 755 /var/uploads
    
    在Web服务器配置中添加规则,禁止上传目录执行PHP:
    location ~* ^/uploads/.*\.php$ {
        deny all;
    }
    

5. 错误处理与日志监控

  • 关闭错误显示:在php.ini中设置display_errors = Off,避免将敏感信息(如数据库凭据、路径)暴露给用户。
  • 启用日志记录:将错误日志集中记录到安全位置(如/var/log/php-fpm/error.log),便于后续审计:
    log_errors = On
    error_log = /var/log/php-fpm/error.log
    
    定期检查日志文件,关注异常请求(如大量404错误、可疑POST请求)。

6. 使用安全模块增强防护

  • 启用OPcache:通过缓存编译后的PHP脚本提高性能,同时减少源代码暴露风险。在php.ini中启用:
    opcache.enable = 1
    opcache.enable_cli = 1
    opcache.memory_consumption = 128
    opcache.interned_strings_buffer = 8
    opcache.max_accelerated_files = 4000
    opcache.revalidate_freq = 60
    
  • 部署Web应用防火墙(WAF):使用ModSecurity等WAF工具,过滤恶意请求(如SQL注入、XSS攻击),增加一层安全防护。

7. 防火墙与网络隔离

  • 配置防火墙规则:使用ufwiptables限制对PHP-FPM端口(TCP 9000或Unix socket)的访问,仅允许可信IP地址连接。
  • 隔离服务器角色:将PHP-FPM服务器与应用服务器、数据库服务器分离,减少单点故障风险,避免横向渗透。

8. 定期更新与审计

  • 更新软件包:定期更新PHP-FPM、PHP核心及依赖库到最新版本,修复已知安全漏洞:
    sudo apt update && sudo apt upgrade -y
    
  • 审计配置与进程:定期检查PHP-FPM配置文件(如www.conf)中的权限设置、禁用函数列表,确保无遗漏;使用ps命令监控PHP-FPM进程,确认其以www-data用户运行。

9. SELinux/AppArmor配置(可选)

  • SELinux:若系统启用SELinux,可通过setsebool命令限制PHP-FPM的网络访问:
    sudo setsebool -P httpd_can_network_connect_db 0  # 禁止PHP连接数据库(按需调整)
    sudo setsebool -P httpd_enable_homedirs 0       # 禁止访问用户家目录
    
  • AppArmor:编辑PHP-FPM的AppArmor配置文件(如/etc/apparmor.d/usr.sbin.php-fpm),限制其对系统目录(如/etc/root)的访问权限,增强进程隔离。

0