/var/www 文件夹归根 根(用户、组)。这意味着www-数据(apache/php 组)没有访问权限。这会导致写入错误,因为不允许 PHP 创建文件。
我通过对整个 /var/www 文件夹执行 CHMOD 0777 解决了这个问题,因为它只是一台私人开发机器。然而,这仍然会导致问题,因为 CHMOD 只对运行时存在的文件有效,而不是之后创建的文件。所以如果我创建一个新文件,那么 PHP 将无法对其进行 rwx。
现在我正在使用 git 引入更多文件,并且在尝试获取 apache/php、git 和我自己的用户所有文件都可以很好地互相播放。
我如何才能让我们三个人都拥有完全访问权限?
答案1
创建一个 www 或类似名称的组,并将您想要写入 /var/www 的所有用户添加到该组。然后 chown -R www-data:www 完整的 /var/www 目录。这应该允许您获得所需的访问权限。
除此之外,只需清理 0777 权限并将其重置为正常。
我希望这能成功:-)
答案2
chmod 777 是个坏习惯,即使是私人机器……学习如何在安全的环境中正确地做事意味着您知道在需要时如何在不安全的环境中做事。而且您不会想发布带有“chmod -R 777 /var/www/myapp”安装说明的生产应用程序。
Burton 的回答就是我的做法。我的开发者账号在 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),它允许每个 vhost 以特定用户身份运行,即使是常规读取也是如此。我还没有尝试过这个,但如果它运行良好,它将对解决这种安全问题大有帮助。
答案3
您可以做的是设置一个 Apache vhost 并将其 docroot 到我用户主目录 (/home/username/public_html) 中的一个目录中。这样您的用户和 Git 就可以操作文件,而不必过多担心权限/所有权。从那里,您可以偷懒并将 Apache/PHP 用户更改为以您的用户身份运行(我认为这会起作用),或者您可以研究设置 SuPHP(http://www.suphp.org/Home.html) 将以所有者的权限运行您的 PHP 脚本。