/var/www 文件夹归root root(用户、组)所有。这意味着www-data(apache/php 组)没有访问权限。这导致了写入错误,因为不允许 PHP 创建文件。
我通过 CHMOD 0777 解决了整个 /var/www 文件夹,因为它只是一个私人开发机器。但是,这仍然会导致问题,因为 CHMOD 仅适用于运行时存在的文件 - 而不是之后创建的文件。因此,如果我要创建一个新文件,那么 PHP 将无法 rwx 它。
现在我正在使用 git 来引入更多文件,我很难让 apache/php、git 和我自己的用户都能够很好地处理彼此的文件。
如何为我们三个人启用完全访问权限?
chmod 777 是一个坏习惯,即使它是一台私人机器……学习如何在安全的环境中正确地做事意味着当你需要在不安全的环境中做事时你知道如何去做。而且您不会想发布带有“chmod -R 777 /var/www/myapp”的安装说明的生产应用程序。
伯顿的回答就是我所做的。我的开发者帐户在组 www-data 中,www-data 是所有文件上设置的组。
查看“man 2 chmod”并阅读 group-sticky-bit 的作用。当您的主要组不是您想要分配给您在那里创建的新文件的组时,它会非常方便。它将允许您创建的文件自动设置到您设置它的目录中的 www-data 组。
如果您的网络服务器没有创建具有足够广泛权限的新文件(当您需要 0775 时它正在创建 0755),请查看其 umask 设置。
对于 Perl CGI,我通常使用 suexec,以便 CGI 作为特定用户而不是 www-data 运行。正如 jdoss 指出的那样,您需要一个特定于 PHP 的模块。还有一个 Apache2 mpm (prefork),它允许每个虚拟主机作为特定用户运行,即使是常规读取也是如此。我还没有尝试过这个,但如果它运作良好,它将有助于解决这种安全问题。
创建一个 www 或类似的命名组,并将您要写入 /var/www 的所有用户添加到该组。然后 chown -R www-data:www 完整的 /var/www 目录。这应该允许您访问所需的权限。
除此之外,只需清理 0777 权限并将其重置为正常。
我希望能解决:-)
您可以做的是设置一个 Apache vhost 并将其 docroot 到我用户的主目录 (/home/username/public_html) 内的一个目录中。这允许您的用户和 Git 操作文件,而不必过多担心权限/所有权。从那里您可以懒惰并更改 Apache/PHP 用户以作为您的用户运行(我认为这会起作用),或者您可以考虑设置 SuPHP(http://www.suphp.org/Home.html)将以其所有者的权限运行您的 PHP 脚本。