【问题标题】:Apache+php doesn't open php script from certain directoryApache+php 不会从某个目录打开 php 脚本
【发布时间】:2014-09-04 11:37:51
【问题描述】:

我在/var/www 中有两个目录:

root@user:/var/www# ls -l
drwxrwxrwx 2 root root      4096 Июл 14 17:59 first
drwxrwxrwx 2 root root      4096 Июл 14 18:00 second

使用完全相同的 php 脚本:

root@user:/var/www# ls -l first/
-rwxrwxrwx 1 root root 20 Июл 14 16:37 info.php

root@user:/var/www# ls -l second/
-rwxrwxrwx 1 root root 20 Июл 14 16:37 info.php

info.php:

<?php
phpinfo();
?>

但是Apache从first/目录打开脚本,从second/拉取错误:

( ! ) Warning: Unknown: failed to open stream: Operation not permitted in Unknown on line 0

( ! ) Warning: Unknown: failed to open stream: Operation not permitted in Unknown on line 0

( ! ) Fatal error: Unknown: Failed opening required '/var/www/second/info.php' (include_path='.:/usr/share/php:/usr/share/pear') in Unknown on line 0

可能是什么原因?

目录配置:

DocumentRoot "/var/www"

<Directory "/var/www">
        Options Indexes FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
</Directory>

【问题讨论】:

  • 这些目录中还有其他文件吗?您可以发布主机和目录的 apache 配置吗?
  • 你可以试试吗,sudo chown -R www-data.www-data /var/www 然后sudo service apache2 restart
  • 我真的很抱歉,我点击错误并选择了错误的问题来开始赏金:)
  • 也许是 selinux,尝试使用 sestatus 检查状态,如果它的强制列表是 ls -Z /var/www
  • ...并检查 httpd.conf 中的 .htaccess 文件和目录特定配置

标签: php linux apache


【解决方案1】:

试试这个:

sudo chmod -R 755 /var/www

【讨论】:

  • 切换到 lower 权限集究竟如何解决问题?这里没有意义。
  • 用于静置;在某些系统上,文件和文件夹必须具有特定权限才能访问脚本(apache Web 服务器)。 “无法打开流”通常与权限问题有关。
  • @sitilge 我做了一些搜索,因为我也很好奇。 serverfault.com/questions/390484/suexec-group-writeable-files
  • 确实有些时候需要特定的权限,有时太开放太不安全了:)
  • 为什么修复有效:让这些文件可以被全世界写入是一个安全漏洞,尤其是那些标记为可执行文件并由 ROOT 拥有的文件。
【解决方案2】:

您也可以尝试:

sudo chown -R apache:apache /var/www

【讨论】:

  • 依赖于系统,但此处无关,因为 777 权限同时设置为 dir 和 file。
  • 在 fedora 核心上这很好用不太确定其他平台我已经多次使用这个命令但我不会说 apache:apache 这会让你编辑站点文件有点困难在您的本地计算机上,我只需使用此命令 sudo chown my_current_name:apache -R /var/www
【解决方案3】:

sudo chown -R www-data:www-data /var/www/

sudo service apache2 restart

该组是 root 可能就是这个问题

【讨论】:

    【解决方案4】:

    这里有很多东西可以尝试 1) 你的.htaccess 有哪个文件夹? 2)您提供的错误提示 php 会在 include_path='.:/usr/share/php:/usr/share/pear' 中查找脚本 这表明脚本仅存在于以下路径中。 3)您可能想检查 ls -Z 是否可以揭示目录安全上下文的差异。

    【讨论】:

      【解决方案5】:

      有时你需要设置 SeLinux 上下文。在这种情况下:

      ls -lZ
      

      如果你有类似的东西

      rw-r--r--. root root unconfined_u:object_r:etc_t:s0 
      

       drwxr-xr-x. root root system_u:object_r:etc_t:s0 
      

      你需要运行

      chcon -R -t httpd_sys_content_t /var/www
      

      那你就有了

      drwxr-xr-x  root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/
      

      类似的东西

      【讨论】:

        【解决方案6】:

        您需要将这两个文件夹的所有者从“root”更改为 apache。

        试试 sudo chown -R [yourusername]:www-data /var/www

        这应该会有所帮助。

        【讨论】:

          猜你喜欢
          • 2021-07-12
          • 1970-01-01
          • 2017-06-17
          • 2015-11-30
          • 1970-01-01
          • 2019-08-10
          • 1970-01-01
          • 2012-08-01
          • 1970-01-01
          相关资源
          最近更新 更多