权限问题:Apache 如何访问我的主目录中的文件?

ric*_*lla 34 permissions

我知道这里之前已经介绍了文件权限,但我正在努力理解我的场景的概念。

  • 我在旧的 ubuntu 安装上创建了这些文件。
  • 我已经将文件复制到我的新 ubuntu 安装中,并将它们放在我的 webroot 中。
  • 当我尝试运行文件(它们是 PHP 文件)时,出现与权限相关的错误

为了解决这个问题,我假设它们仍然必须由以前的所有者拥有,所以我chown -R在目录上运行,以我的用户名作为参数,以便获得目录中所有文件的所有权。应该注意的是,新旧 ubuntu 安装之间的用户名是相同的。

当我尝试再次运行文件时,同样的问题:由于权限问题导致 500 错误。谁能告诉我我应该采取哪些其他步骤?

我的 apache 安装的 webroot 位于我的主文件夹中。如果我在 webroot 中创建新文件,它们也会按预期工作,只是导致问题的旧文件。

小智 45

如果您的服务器文档在/home/$USER/public_html您需要运行的目录中

sudo chown -R www-data:www-data /home/$USER/public_html
Run Code Online (Sandbox Code Playgroud)

将 DocumentRoot 文件夹的所有权授予用户www-data和组www-data

然后你就可以把自己加到群里了 www-data

sudo adduser $USER www-data
Run Code Online (Sandbox Code Playgroud)

最后,您需要使 DocumentRoot 文件夹可由所有者(www-data 用户)和您自己(作为www-data组的一部分)写入:

sudo chmod -R 775 /home/$USER/public_html
Run Code Online (Sandbox Code Playgroud)

为方便起见,您可以public_html_fix.sh使用内容命名脚本:

#!/bin/bash

sudo adduser $USER www-data
sudo chown -R www-data:www-data /home/$USER/public_html
sudo chmod -R 775 /home/$USER/public_html
Run Code Online (Sandbox Code Playgroud)

将其保存在其中/home/$USER/bin并使用以下命令使其可执行:

sudo chmod +x /home/$USER/bin/public_html_fix.sh
Run Code Online (Sandbox Code Playgroud)

然后你在任何需要的时候调用它,从文件系统的任何地方你碰巧发现自己是这样的:

public_html_fix.sh
Run Code Online (Sandbox Code Playgroud)

  • 如果这是在共享主机上完成的,您如何阻止 `www-data` 组中的其他用户读取您的文件或写入文件? (3认同)
  • `chmod -R 775 /home/$USER/public_html` 真的很糟糕。`find /home/$USER/public_html -type d -exec chmod 775 {} \;` 和 `find /home/$USER/public_html -type f -exec chmod 664 {} \;` 好多了 (2认同)

Lek*_*eyn 15

webroot 上面的目录应该设置执行位以允许 Apache 进入目录。

如果你有你的根目录位于/home/user/htdocs//home/home/user并且/home/user/htdocs应该有执行位。


上述解决方案“有效”,但并不理想。如果您创建了一个文件夹,Apache 将无法写入该文件夹。反过来也会发生。

这可以通过设置 umask 0007 并将自己添加到 Apache 组(如果我没记错的话,www-data)来“修复”,以便该组可以写入新创建的文件和文件夹。

或者,您可以安装替代的 Apache MPM:Apache2 MPM ITK配置信息)并调整配置,以便 Apache 在您的用户下运行。

  • @hobs 更好,http://askubuntu.com/a/46371/6969 (3认同)