Ubuntu PHP 安全策略配置清单
一 基础加固
- 更新系统与软件包,修复已知漏洞:执行 sudo apt update && sudo apt upgrade。
- 隐藏服务器与PHP版本信息:在 Apache 配置中设置 ServerTokens Prod、ServerSignature Off;在 php.ini 中设置 expose_php = Off。
- 错误与日志策略:生产环境关闭前台报错,开启日志记录,建议设置 display_errors = Off、log_errors = On、error_reporting = E_ALL,并配置 error_log = /var/log/php_errors.log。
- 禁用危险函数:在 php.ini 的 disable_functions 中禁用如 eval、exec、system、passthru、shell_exec、proc_open、popen、curl_exec、curl_multi_exec、parse_ini_file、show_source 等。
- 限制文件上传:按业务最小化设置 upload_max_filesize = 2M、post_max_size = 8M(可按需调整)。
- 限制可访问目录:使用 open_basedir = /var/www:/tmp(路径按实际站点调整)。
- 禁用远程包含与URL文件操作:设置 allow_url_fopen = Off、allow_url_include = Off。
- 资源与执行控制:设置 max_execution_time = 30、max_input_time = 30、memory_limit = 128M(按业务调整)。
- 会话安全:设置 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)。
二 运行时与隔离
- 确认配置文件路径:使用 php --ini 查看加载的 php.ini(区分 CLI 与 FPM/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_security、mod_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.log 与 Apache/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
说明:路径、函数白名单与资源阈值请结合业务实际调整,变更后按运行时重启相应服务。