温馨提示×

如何配置Ubuntu PHP安全策略

小樊
39
2025-12-10 14:34:00
栏目: 编程语言

Ubuntu PHP 安全策略配置清单

一 基础加固

  • 更新系统与软件包,修复已知漏洞:执行 sudo apt update && sudo apt upgrade。
  • 隐藏服务器与PHP版本信息:在 Apache 配置中设置 ServerTokens ProdServerSignature Off;在 php.ini 中设置 expose_php = Off
  • 错误与日志策略:生产环境关闭前台报错,开启日志记录,建议设置 display_errors = Offlog_errors = Onerror_reporting = E_ALL,并配置 error_log = /var/log/php_errors.log
  • 禁用危险函数:在 php.inidisable_functions 中禁用如 eval、exec、system、passthru、shell_exec、proc_open、popen、curl_exec、curl_multi_exec、parse_ini_file、show_source 等。
  • 限制文件上传:按业务最小化设置 upload_max_filesize = 2Mpost_max_size = 8M(可按需调整)。
  • 限制可访问目录:使用 open_basedir = /var/www:/tmp(路径按实际站点调整)。
  • 禁用远程包含与URL文件操作:设置 allow_url_fopen = Offallow_url_include = Off
  • 资源与执行控制:设置 max_execution_time = 30max_input_time = 30memory_limit = 128M(按业务调整)。
  • 会话安全:设置 session.cookie_secure = Onsession.cookie_httponly = Onsession.cookie_samesite = Strictsession.gc_maxlifetime = 1440
  • 性能与安全:启用 OPcache(示例:opcache.enable=1、opcache.memory_consumption=128、opcache.interned_strings_buffer=8、opcache.max_accelerated_files=4000、opcache.revalidate_freq=60)。

二 运行时与隔离

  • 确认配置文件路径:使用 php --ini 查看加载的 php.ini(区分 CLIFPM/Apache 实例)。
  • 按运行模式分别修改:
    • Apache 模块:编辑 /etc/php/{version}/apache2/php.ini
    • PHP-FPM:编辑 /etc/php/{version}/fpm/php.ini
    • CLI:编辑 /etc/php/{version}/cli/php.ini(仅影响命令行)。
  • 重启服务生效:
    • Apache:sudo systemctl restart apache2;
    • PHP-FPM:sudo systemctl restart php{version}-fpm;
    • Nginx+PHP-FPM:重启 php-fpm 与 nginx。
  • 目录与权限:站点目录建议 chown -R www-data:www-data /var/www/html,权限 chmod -R 755 /var/www/html;上传目录与可执行脚本分离,禁止上传目录执行脚本(如 Nginx 配置 location 段对 .php 返回 403)。

三 服务器与网络层加固

  • 启用 HTTPS:使用 Let’s Encrypt 获取免费证书,命令示例:sudo apt install certbot python3-certbot-apache;sudo certbot --apache(Nginx 使用 certbot --nginx)。
  • 防火墙:启用 UFW,仅开放必要端口,示例:sudo ufw enable;sudo ufw allow ‘Apache Full’;sudo ufw allow ‘OpenSSH’。
  • Web 应用防火墙与防护模块:在 Apache 上启用 mod_securitymod_evasive(示例:sudo a2enmod security2;sudo a2enmod evasive2)。
  • 入侵防护:部署 Fail2ban 监控 Apache/Nginx/PHP-FPM 日志,自动封禁暴力破解来源。

四 验证与维护

  • 配置生效验证:创建 /var/www/html/info.php,内容 ,访问确认关键项(如 expose_php、disable_functions、open_basedir、session.cookie_secure 等)已生效;完成后删除该文件。
  • 持续更新与依赖管理:定期执行 sudo apt update && sudo apt upgrade php*;应用侧执行 composer update 获取安全修复。
  • 日志与监控:持续关注 /var/log/php_errors.logApache/Nginx 访问与错误日志,结合 IDS/监控 工具发现异常。

五 安全基线示例 php.ini 片段

expose_php = Off
display_errors = Off
log_errors = On
error_reporting = E_ALL
error_log = /var/log/php_errors.log

allow_url_fopen = Off
allow_url_include = Off

disable_functions = eval,exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

upload_max_filesize = 2M
post_max_size = 8M
file_uploads = On

max_execution_time = 30
max_input_time = 30
memory_limit = 128M

open_basedir = /var/www:/tmp

session.cookie_secure = On
session.cookie_httponly = On
session.cookie_samesite = Strict
session.gc_maxlifetime = 1440

[opcache]
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60

说明:路径、函数白名单与资源阈值请结合业务实际调整,变更后按运行时重启相应服务。

0