gpt4 book ai didi

php - SessionHandler::gc():ps_files_cleanup_dir |权限被拒绝 (13)

转载 作者:可可西里 更新时间:2023-10-31 23:58:05 27 4
gpt4 key购买 nike

我在 CentoOS (WHM/CPANEL) 和 Prestashop 1.7 中遇到 PHP7 问题

系统给我这个消息:

Notice on line 429 in file /home/onywf3fr9a/public_html/app/cache/dev/classes.php

[8] SessionHandler::gc(): ps_files_cleanup_dir: opendir(/var/cpanel/php/sessions/ea-php70) 失败:权限被拒绝 (13)

最佳答案

背景

当 PHP 尝试对过期的 session 进行垃圾回收,但包含 session 文件的目录对于 PHP 运行的用户不可列出(缺少 r 访问位)时,会发生此错误。

这通常是针对 PHP session 劫持的安全措施。 Debian 将 session 目录的权限设置为 drwx-wx-wt。这些权限允许任何人创建 session ,创建 session 的用户如果知道文件名( session ID)可以再次阅读它,但只有 root 可以获取所有事件 session 的列表

具有此配置的发行版通常还会设置一个 cronjob 或计时器,定期清理 session 并在 php.ini 中禁用 native 垃圾收集:session.gc_probability = 0

可能的原因

  1. 您或其他人修改了 php.ini 并更改了 session.gc_probability0 以外的值。
  2. PHP 脚本使用 ini_set()在运行时修改 session.gc_probability。一些 PHP 框架容易出现这种情况。例如。 Symfony always sets session.gc_probability to 1 if not configured otherwise .
  3. 您或管理服务器的其他人在不使用 cronjob 或计时器清理过期 session 的系统上搞砸了 session 目录权限。

解决方案

  1. 在验证您的安装使用 cronjob/timer 进行 session 清理后,将 php.ini 中的 session.gc_probability 更改为 0

    • CPanel 使用 /usr/local/cpanel/scripts/clean_user_php_sessions 删除过期 session ,因此所有 CPanel 安装都使用 cronjob。
    • Debian、Ubuntu 和 Linux Mint 使用 systemd 计时器 phpsessionclean.timer 进行 session 清理。
  2. 防止 Web 应用程序覆盖 session.gc_probability。对于基于 Symfony 的应用程序,这可以通过修改 config/packages/framework.yaml 来完成:

    framework:
    session:
    gc_probability: null
  3. 如果您的系统确实使用 native session 垃圾收集而不是 cronjob 或计时器,请更改 session 文件夹的权限以允许列出运行 PHP 的用户:

    # Check beforehand which group php-fpm runs as. Here I assume www-data:
    chgrp www-data /var/cpanel/php/sessions/ea-php70
    chmod g+r /var/cpanel/php/sessions/ea-php70

    安全通知:更改权限允许任何 PHP 脚本枚举所有事件 session ID 并可能访问所有 session 。仅当您确定上述解决方案不适用时才执行此操作!

  4. (潜在危险) 更改 session.save_path/tmp 或 PHP 可以访问以进行读写的类似目录。

    安全通知:将 session 保存路径更改为世界可读目录允许任何程序和任何 PHP 脚本枚举所有事件 session ID 并可能访问所有 session 。仅当您确定上述解决方案不适用时才执行此操作!

关于php - SessionHandler::gc():ps_files_cleanup_dir |权限被拒绝 (13),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47043351/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com