Apache+PHP 在 unix 上的写权限

Posted

技术标签:

【中文标题】Apache+PHP 在 unix 上的写权限【英文标题】:Apache+PHP write permissions on unix 【发布时间】:2011-01-16 18:24:36 【问题描述】:

我正在尝试在 fedora 上使用 apache 启动 php 站点,但我遇到了关于写入权限的问题。看起来 apache 对某些文件夹没有写权限,但我不明白为什么。

我检查了 httpd.conf,它有组:apache,用户:apache。 然后我做了: chown -R apache:apache www 并为文件夹设置 777 权限,但它仍然说:

警告:file_put_contents(/var/www/public/temp.txt) [function.file-put-contents]:无法打开流:/var/www/public/newtest.php 第 8 行的权限被拒绝

请指教。

更新: 顺便说一句,如果我从命令行创建“php newtest.php”,则文件 temp.txt 是使用组 root 和用户 root 创建的。它只是在浏览器中不起作用。

【问题讨论】:

文件temp.txt的权限呢? temp.txt 是我要创建的新文件,它还不存在 【参考方案1】:

将 chmod 775 转换为 newtest.php ;)

【讨论】:

正如我已经提到的,我对整个文件夹(当然包括 newtest.php)做了 777。 temp.txt 是我要创建的一个新文件,它还不存在。【参考方案2】:

ls -la /var/www/public

只是为了检查:-)

【讨论】:

好的,文件夹本身有这个:drwxrwxrwx 8 apache apache 4096 2010-02-13 04:08 public 我正在执行的文件:-rwxrwxrwx 1 apache apache 213 2010-02-14 06: 34 新测试.php 很奇怪。您确定 temp.txt 不存在吗?另外,如果你尝试“sudo -u apache echo test > /var/www/public/temp.txt”会发生什么? 是的,它不在那里。当我启动您建议的命令时(在根目录下),它已经创建了它,但是当我再次尝试我的 PHP 脚本时,即使文件在那里,它仍然显示相同的错误。我确定它与 apache 权限有关,但不确定到底是什么.. 嗯。其他原因可能是在 php.ini 或 apache config 或 .htaccess 中启用了 safe_mode 或 open_basedir 选项。但我认为它们应该产生稍微不同的警告。 ***.com/questions/1870875/… - 也许同样的问题? :-)【参考方案3】:

我建议将 apache 切换到 mod_itk 作为 mpm,并以所有者文档根目录的权限运行特定的 vhost,并包含 php 脚本。

【讨论】:

在 Apache 中至少有一个通常配置的默认虚拟主机。您可能想尝试在那里设置虚拟主机所有者。但是您可能还想改进您的问题,因为 mod_itk 在单个 vhost 设置中太过分了,那时我不会建议这样做。 ;-)【参考方案4】:

警告:file_put_contents(/var/www/public/temp.txt) [function.file-put-contents]:未能打开流:/var/www/public/newtest.php 第 8 行中的权限被拒绝

这里有很多不好的东西。

让我们从您确实希望将 httpd 可写文件远离您的代码的事实开始 - 当然是在一个单独的目录中,最好完全在文档根目录之外。

chown -R apache:apache www 并为文件夹设置 777 权限

您事后检查过实际的权限是什么吗?顺便说一句,也请参阅上面的观点 - 如果您已经让每个人都可以编写整个网站,那么您只是在自找麻烦。您当然不能同时更改所有者和权限。

您是否启用了 SELinux? (以 root 身份运行 sestatus)。如果是这样,那么您需要禁用它或学习如何配置它 - 但我建议您先掌握老式权限,然后禁用 SELinux。

C.

【讨论】:

好的,我知道777不是存储文件的方式,但是为了解决问题我不得不尝试一切。我现在禁用了 SELinux。 sestatus root 现在显示“SELinux 状态:已禁用”,但问题仍然存在 :( 有什么想法吗? 啊不,实际上它有帮助,只是在这里有具有 root 权限的旧文件。非常感谢

以上是关于Apache+PHP 在 unix 上的写权限的主要内容,如果未能解决你的问题,请参考以下文章

我可以将unix权限存储在zip文件(由apache ant构建)中吗?

如何比较 2 个文件夹在 Unix 上的权限?

如何使用 rmdir 删除 Windows 目录?

在 Unix 上的 C 中,进程如何在不打开文件的情况下知道它对文件具都有哪些权限?

为啥 Apache + PHP 需要执行权限才能写入文件?

使用 netstat 远程获取基于 unix 的操作系统上的所有进程连接需要哪些权限