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

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

我知道这里之前已经介绍过文件权限,但我还是很难理解我的场景中这个概念。

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

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

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

我的 Apache 安装的 webroot 位于我的主文件夹中。如果我在 webroot 中创建新文件,它们也会按预期工作,只有旧文件才会引发问题。

答案1

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

sudo chown -R www-data:www-data /home/$USER/public_html

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

然后你可以将自己添加到群组中www-data

sudo adduser $USER www-data

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

sudo chmod -R 775 /home/$USER/public_html

为了方便起见,你可以使用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

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

sudo chmod +x /home/$USER/bin/public_html_fix.sh

然后,您可以在需要时随时调用它,无论在文件系统的哪个位置,您都会发现自己像这样:

public_html_fix.sh

答案2

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

如果您的 webroot 位于/home/user/htdocs,则//home/home/user应该/home/user/htdocs已设置执行位。


上述解决方案“有效”,但并不理想。如果您创建了一个文件夹,Apache 就无法写入该文件夹。反之亦然。

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

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

答案3

除了修改文件权限和编辑 apache .conf 文件之外,我想说的是,我什么都做不了,因为我的文件位于我通过 nautilus 自动挂载的分区上。这会将分区限制为您的用户。

www-root要检查您的文件是否可被任何运行 apache 的用户看到(运行ps -aux | grep apache2检查),请运行以下命令:

sudo su -l www-data -s /bin/bash

并尝试从文档根目录读取文件。

如果文件不可读,请检查:

1)您已设置所有其他文件权限

2)如果需要的话,你已经FollowSymlinks在你的.conf文件中使用了

3)您已经设置了 DocumentRoot

3) 为所有用户挂载您的分区。我必须/etc/fstab通过其 UUID 编辑并指定我的分区:

UUID=afdee1d3-5bb8-4652-892f-e83a9b5ff72e /mnt/4tb      ext4    rw,nosuid,nodev,errors=remount-ro

然后通过 nautilus 卸载您的分区并执行sudo mount -a。如果一切顺利,您的文件现在位于 下/mnt。更新您的符号链接,您就可以开始了。

答案4

我发现设置此功能的最佳方式是 VirtualMin 的方式。

创建用户和组“myhome”

让 apache 用户成为“myhome”组的成员。而不是像这里的一些解释所描述的那样反过来

因此现在 apache 除了对 /home/myhome/www 有读取和执行权限外,还对 /home/myhome 有读取和执行权限

“myhome”用户有写权限

相关内容