Apache:由于缺少搜索权限,访问被拒绝


75

我知道这个问题经常被问到,但是我看到的解决方案对我没有用。

我只启用了一个虚拟主机,并且试图启用对不在文档根目录下的文件夹的访问

ServerAdmin webmaster@localhost
DocumentRoot /var/www/html

Alias /movies /home/username/Videos/Movies

<Directory /home/username/Videos/Movies/>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

我设定/etc/apache2/envvars如下

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=public

我确保/ home / username / Videos /及其子文件夹归所有者所有username:public,将权限设置为777(在775不起作用之后),并确保该用户www-data属于group public

现在,当我浏览到http://localhost/movies我得到

[Mon Apr 21 11:28:14.971844 2014] [core:error] [pid 1385:tid 140067725104896] (13)Permission denied: [client 127.0.0.1:46603] AH00035: access to /movies/ denied (filesystem path '/home/username/Videos') because search permissions are missing on a component of the path

但是当我设置/etc/apache2/envvarsusername(我自己的用户名)运行Apache时,一切正常。问题是与权限有关,但我不知道如何处理;尤其是当我将权限设置为时777。有任何想法吗?

PS Ubuntu版本是14.04,Apache版本是2.4.7,我没有编辑其他配置文件。



正如我写的,我做了他们在那儿建议的所有事情,但没有帮助
Yotam 2014年

您是否有/home启用ACL 挂载的机会?(在这种情况下,权限位的末尾会有一个“ +”号(请选中ls -l))
Polosson 2014年

不,我没有这样做。目前,我正在用户下运行Apache,因此可以正常工作,但是出于安全原因,我想在其他用户下运行Apache。
Yotam

我是第一次使用Linux。我下载了Ubuntu 14.04 LTE版本。我正面临着同样的问题。有人可以帮忙吗?
Imdad 2014年

Answers:


95

做一个chmod +x对你的用户目录,并重新启动Apache。755权限应该起作用。我在644时遇到问题。


6
确实,要仔细检查文件和目录的权限(如果可用),可以使用namei -m /home/youruser/public_html/yourfile.ext或尝试使用people.apache.org/~igalic/hacks/parsepath
Junior M

2
澄清一下,您希望Apache读取的任何目录必须对Apache用户可读。用户主文件夹很可能不属于您的用户和组,因此您必须设置755权限才能/home/username快速访问它。
ruuter's

我在OSX Mac OS High Sierra上遇到了此问题,并且此解决方案对我有用。甚至不必重启Apache。

经过数小时的搜索,事实证明,该权限对于DocumentRoot的父目录也应该是正确的。非常感谢你 。顺便说一句,这不需要重新启动Apache
会计师م18年

27

如果是selinux的问题,而不仅仅是禁用它,则此页面此页面将提供授予访问权限的命令:

chcon -R -t httpd_sys_content_t ~/public_html/

1
我确定这是我的问题。该死的CentOS!Thx命令,完美地工作。
Balmipour

2
谢谢,只需~/public_html/要用我要提供的内容的根目录替换该部分。
trpt4him

chcon -R -t httpd_sys_content_t /var/www/html/phpmyadmin/(以我的情况)
cssyphus

发现的selinux无法处理简单的homedirs,只有这些功能之一是必需的,而另一个则是可选的。感谢您提供此修复程序的提醒-在每个新版本的强制性重新测试期过后,以及令人失望的是,我通常只是在kickstart上破解它。现在用于systemd。
user2066657

17

您可能启用了selinux。尝试

getenforce

如果显示“正在执行”,请尝试

setenforce 0

然后尝试解决此问题。


4
不要只是禁用SELinux作为修复程序。通过重新分配端口或设置布尔值来解决SELinux问题。
siride

1
该答案有助于确定该问题与SELinux有关。但是不建议禁用它。
Rajkumar R

15

经过数小时的尝试,我遇到了同样的问题,我找到了一个解决问题的解决方案:

https://wiki.apache.org/httpd/13PermissionDenied

基本上,Apache服务器不仅需要其服务的所有文件的读取权限,而且还需要虚拟主机路径中所有目录的执行权限。

可以使用实用程序namei通过列出路径的每个部分的权限来帮助查找权限问题:

namei --modes /usr/local/apache2/htdocs/foo/bar.html

在我的情况下,我的路径中的目录具有权限700,这会引起问题。将其更改为701后,问题得以解决。


1
此处的链接很有用,因为它可以说明问题:目录路径中的节点之一缺少搜索权限。使用“纳美”命令,找到这个,然后在“文件模式”为755
user3751385

它解释了真正的原因以及解决方案。感谢
Emdadul Sawon '18

1

当我尝试在使用4.4内核而不是4.10的Ubuntu 16.04主机上的docker容器中运行apache时遇到了此问题。

在主机上运行此命令并重新部署后,我就很好了:

sudo apt-get install --install-recommends linux-generic-hwe-16.04 

我遇到了这个问题,但是我可以在容器内chmodchown容器内产生奇怪的效果,并且它在一段时间内抑制了Apache 403错误,直到稍后恢复。据我所知,没有发生容器重启或其他实质性变化的情况。由于我确实在运行16.04,因此我尝试安装此二进制文件,并且我的403s暂时被搁置了。我会一直盯着它,谢谢!
Halfer
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.