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

我知道之前已经介绍过文件权限,但是我很难理解我的方案的概念。

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

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

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

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

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

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


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

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

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

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

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

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

然后,您可以将自己添加到组www-data

 sudo adduser $USER www-data 

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

 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 

除了chmoding文件和编辑apache .conf文件之外,我想说没有什么对我有用,因为我的文件在我通过nautilus自动挂载的分区上。 这仅限制用户的分区。

要检查www-root或任何用户运行apache是​​否可见文件(运行ps -aux | grep apache2进行检查),请运行以下命令:

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

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

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

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

2)如果需要,您已在.conf文件中使用了FollowSymlinks

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 。 更新你的符号链接,你很高兴。

我发现总是设置它的最好方法是VirtualMin的方式。

创建用户和组“myhome”

使apache用户成为“myhome”组的成员。 不像其他方式那样描述了一些解释

所以现在除了/ home / myhome / www之外,apache已经读取并执行了对/ home / myhome的访问权限

“myhome”用户具有写入权限