如何从PHP写入644权限文件?

时间:2015-11-29 19:00:37

标签: php apache permissions

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

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

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

这里发生了什么,我应该怎么做才能在第一台服务器上缺少写权限?

1 个答案:

答案 0 :(得分:1)

644是对所有者的读/写权限以及对组和世界的只读权限。因此,如果文件不是由运行Web服务器的同一用户所有,则无论组如何,PHP都无法写入该文件。如果(正如你所说)似乎这样做,那么web-server用户就是文件所有者的别名,即他们共享同一个uid。

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

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

编辑: 如果需要检查webserver用户/组,请暂时将目录chmod到777并让它写入文件。然后检查文件所有者和组。只是不要忘记将其恢复到更安全的设置

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

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

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