【问题标题】:How do I make 644 permission files writable from PHP?如何使 644 个权限文件可从 PHP 写入?
【发布时间】:2016-03-03 09:19:11
【问题描述】:

我在 Apache Web 服务器上使用 PHP,但 PHP 缺乏写入权限,无法创建新文件或修改现有文件,尽管需要修改的文件设置为通常的 644(和文件夹是 755)。

我的第一个猜测是问题在于 PHP 以与文件所有者不同的用户身份运行,并且运行“posix_getpwuid(posix_geteuid());”我发现 PHP 作为“www-data”运行,而文件的所有者和组设置为“company123”。所以也许我应该简单地将文件的所有者更改为“www-data”?

但后来我决定检查我一直在使用的其他一些 Web 服务器。在我尝试的第一个中,我使用 PHP 创建或修改 644 个文件没有问题,然而,所有者和组被命名为“600”,而 PHP 以用户“wse253421”运行。显然,PHP 可以作为一个用户运行,并写入另一个用户拥有的 644 个文件。它是如何工作的?

这是怎么回事,PHP在第一台服务器上没有写权限该怎么办?

【问题讨论】:

  • 您也可以创建一个文件夹并允许“写入”该文件夹权限,如果没有,请在google n中输入权限文件php您会找到答案
  • 我已经花了几个小时在网上搜索答案。 “允许'写入'文件夹权限”是什么意思?该文件夹已经具有通常的 755 权限。我需要更改的文件有 644 权限,但将其更改为 664 没有任何区别。从我所见,权限与其他服务器上的权限相同,运行良好。那么你建议我改变什么?

标签: php apache permissions


【解决方案1】:

644 是所有者的读/写权限和组和世界的只读权限。因此,如果该文件不属于运行 Web 服务器的同一用户,则 PHP 将无法写入该文件,无论组如何。如果(如您所说)它似乎正在这样做,那么网络服务器用户是文件所有者的别名,即他们共享相同的 uid。

对于组写入,文件需要为 664,并且组需要与网络服务器运行的组相同(通常是 www-data,但不能保证!)。如果文件属于不同的组,664 将无济于事。 666 会,但不推荐,因为它允许任何人写入文件。

要创建新文件,目录的权限是重要因素。 755 是所有者的读/写/执行和组和世界的读/执行。如果您想要组写入,您需要 775,并且该组需要与运行网络服务器的组相同。

编辑: 如果您需要检查网络服务器用户/组临时 chmod 目录到 777 并让它写入一个文件。然后检查文件所有者和组。只是不要忘记将其 chmod 恢复为更安全的设置

您的第一台服务器的最佳解决方案可能是将您需要写入的文件和目录 chgrp 到您的网络服务器组(可能是 www-data),将文件 chmod 到 664 并将目录 chmod 到 775

https://www.ics.uci.edu/computing/linux/file-security.php

另请参阅 Thomas Rutter 的回答:https://askubuntu.com/questions/386928/default-permissions-for-var-www

【讨论】:

  • “因此,如果该文件不属于运行 Web 服务器的同一用户,则 PHP 将无法写入该文件,无论组如何”。那为什么我可以在另一台服务器上写入(644权限)文件,用户为“wse253421”,文件所有者名为“600”?
  • 我怀疑 600 是 wse253421 的别名,即它们共享相同的 uid
  • 谢谢!事实证明是这样的。我不知道 uid 和别名。您是否知道让 PHP 作为一个用户运行而另一个用户拥有文件(出于安全原因是故意的?)是否很常见,或者这可能是一个错误?
  • 我认为 Apache 服务器作为别名是比较常见的,是的,但我找不到支持该 atm 的参考
  • 如果我不清楚,请原谅。我的意思不是“使用别名很常见吗?”,我的意思是“不让 PHP 写入 Web 服务器很常见吗?”。每当我购买虚拟主机时,我都可以使用 PHP 写入服务器,但出于安全原因,也许公司通常不允许在他们自己的网站上进行此类操作?
猜你喜欢
  • 2014-11-19
  • 2018-03-05
  • 1970-01-01
  • 2015-12-31
  • 1970-01-01
  • 1970-01-01
  • 2012-06-12
  • 1970-01-01
  • 2011-11-14
相关资源
最近更新 更多