我在 Apache Web 服务器上使用 PHP,但 PHP 缺乏写入权限,无法创建新文件或修改现有文件,尽管需要修改的文件设置为通常的 644(以及文件夹)是 755)。
我的第一个猜测是问题是 PHP 以与文件所有者不同的用户身份运行,并运行“posix_getpwuid(posix_geteuid());”我发现 PHP 以“www-data”运行,而文件的所有者和组设置为“company123”。所以也许我应该简单地将文件的所有者更改为“www-data”?
但后来我决定检查我一直在使用的其他一些网络服务器。在我尝试的第一个文件中,我使用 PHP 创建或修改 644 个文件没有任何问题,但是所有者和组被命名为“600”,而 PHP 以用户“wse253421”运行。显然,PHP 作为一个用户运行并写入另一个用户拥有的 644 个文件是可以的。这是如何运作的?
这是怎么回事,对于第一台服务器上的 PHP 缺乏写权限我该怎么办?
最佳答案
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
关于php - 如何使 644 权限文件可从 PHP 写入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33986734/