Linux环境下PHP安全设置有哪些
导读:Linux环境下PHP安全设置清单 一 基础与运行环境 保持系统与PHP为最新稳定版,及时安装安全补丁,减少已知漏洞利用面。 仅安装与业务必需的扩展/模块,禁用不需要的模块以降低攻击面。 运行身份遵循最小权限原则:PHP-FPM 以非 r...
Linux环境下PHP安全设置清单
一 基础与运行环境
- 保持系统与PHP为最新稳定版,及时安装安全补丁,减少已知漏洞利用面。
- 仅安装与业务必需的扩展/模块,禁用不需要的模块以降低攻击面。
- 运行身份遵循最小权限原则:PHP-FPM 以非 root用户(如 www-data)运行;Web 服务器与 FPM 之间使用Unix 套接字并设置0660权限,例如:listen.owner=www-data、listen.group=www-data、listen.mode=0660。
- 在 Nginx 中仅通过 HTTPS 提供服务,禁止明文访问;正确设置 SCRIPT_FILENAME 并避免将 .php 映射到静态目录。
- 配置防火墙(如 ufw)仅开放必要端口(如 22/80/443)。
二 php.ini 关键安全参数
- 禁用危险函数:建议至少禁用 exec、system、passthru、shell_exec、proc_open、popen、eval、assert、symlink、link、escapeshellarg、escapeshellcmd,阻断命令执行与代码注入路径。
- 错误信息控制:生产环境将 display_errors=Off,开启 log_errors=On 并配置可写的 error_log(如 /var/log/php_errors.log),避免泄露路径与代码细节。
- 远程包含与URL访问:如无远程包含需求,设置 allow_url_fopen=Off、allow_url_include=Off,降低 RFI/LFI 风险。
- 目录访问限制:启用 open_basedir 将脚本访问范围限定在业务目录(如 /var/www/html:/tmp),注意 Linux 下分隔符为冒号。
- 资源与执行限制:设置 max_execution_time(如 30 秒)、memory_limit(如 128M)、max_input_time(如 60 秒)、upload_max_filesize(如 2M),并将 post_max_size 设为略大于上传上限,防止滥用与 DoS。
- 会话安全:开启 session.cookie_httponly=1、session.cookie_secure=1、session.use_strict_mode=1,并根据业务设置 session.gc_maxlifetime,缓解会话劫持与固定攻击。
三 Web 服务器与 FPM 配置
- PHP-FPM 池配置:使用 Unix 套接字通信,设置 listen.owner/listen.group=www-data、listen.mode=0660;确保进程以最小权限运行。
- Nginx 站点配置:仅通过 443/ssl 提供服务;在 location ~ .php$ 中正确包含 FastCGI 参数并设置 SCRIPT_FILENAME $document_root$fastcgi_script_name,避免将 .php 解析到非预期目录;可结合 try_files $uri $uri/ =404 减少错误路径被执行的风险。
- 访问与暴露面控制:禁用目录列表,限制对敏感目录的访问;隐藏 PHP 版本信息,减少针对性攻击线索。
四 文件系统与权限
- 目录与文件权限:网站根目录(如 /var/www/html)常用 755,文件 644;上传目录禁止脚本执行(如 chmod 750 uploads & & chown www-data:www-data uploads),上传文件存储在隔离目录并定期清理。
- 上传安全:仅在必要时开启 file_uploads;严格校验文件类型/大小/后缀,重命名上传文件,避免执行权限;必要时将上传目录置于 open_basedir 允许范围之外或单独挂载。
- 最小权限原则:确保 PHP 进程仅能访问必要文件与目录,避免越权读写系统或日志文件。
五 命令执行与输入验证
- 尽量避免在代码中调用系统命令;如确需执行,使用白名单校验输入,优先选择内置函数替代,并使用escapeshellarg/escapeshellcmd对参数进行转义。
- 对外部输入(GET/POST/Header)进行严格校验与过滤,拒绝非常规字符与超长输入,降低命令注入与代码注入风险。
六 加固与运维实践
- 启用 SELinux 或 AppArmor 实施强制访问控制(MAC),为 php-fpm 等进程定义细粒度策略,限制其访问范围与系统调用。
- 开启并集中审计日志(PHP 错误日志、FPM 访问日志、Nginx 访问/错误日志),定期审查异常与失败请求;结合安全扫描工具(如 OWASP ZAP)进行主动检测。
- 制定备份与恢复策略(代码与数据库定期备份),并进行恢复演练;持续监控与更新组件,形成闭环的安全运维流程。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux环境下PHP安全设置有哪些
本文地址: https://pptw.com/jishu/766315.html
