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


33

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

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

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

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

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


我不确定文件是在复制文件权限时,有人可以确认吗?否则,是否可以将文件提供给其他用户(或root),然后将其回收?
塔格(Tagger)

好的,我已经解决了文件无法执行的问题,但是我只是通过chmod -R 777 dir在相关目录上运行来解决了。不过,我不禁想到有更好的方法
richzilla 2011年

3
文件中的777权限将使每个人都可以写入您的文件,这可能会导致页面损坏或黑客入侵。您应该尝试使用通常用于php文件的755。确保不需要启用文件的“允许执行”,在这种情况下,您可以运行chmod [filename] -x。有关chmod命令的信息,请单击以下链接:catcode.com/teachmod/chmod_cmd.html
Geppettvs D'Constanzo

Apache错误日志显示什么?
Kees Cook

Answers:


14

您的Webroot上方的目录应设置execute位,以允许Apache进入目录。

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


上面的解决方案“有效”,但是并不理想。如果创建了文件夹,则Apache无法写入该文件夹。反之亦然。

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

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


有关如何做到这一点的明确说明,请参见下面的
滚刀

2
@hobs甚至更好,askubuntu.com/a
46371/

44

如果您的服务器文档在/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

1

好答案!-附带示例,甚至一个方便脚本,以及如何使用/安装优秀!
安德烈(Andre)

2
如果在共享主机上完成此操作,您如何阻止该www-data组中的其他用户读取文件或对此进行写操作?
jozxyqk 2015年

真正真棒的答案...你救了我的命
NullPoiиteя

1
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 {} \;好多了
iharob

1

除了更改文件和编辑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。更新您的符号链接,您就很好。


1

我发现始终设置此功能的最佳方法是VirtualMin的设置方法。

创建用户和组“ myhome”

使apache用户成为“ myhome”组的成员。并非像这里的一些解释所描述的那样

因此,除了/ home / myhome / www之外,现在apache还可以读取和执行对/ home / myhome的访问权限

“ myhome”用户具有写权限


我喜欢这个概念,但似乎对我没有用。用户www-data属于myhome。所有文件和目录均具有组写入权限,并且属于myhome:myhome。我重新启动了Apache。Apache仍然无法编写新文件和文件夹。(使用www-data:www-data用户/组的PHP脚本)
squarecandy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.