Apache:访问被拒绝,因为缺少搜索权限

Yot*_*tam 88 permissions apache2

我知道这个问题经常被问到,但我看到的解决方案对我不起作用。

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

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>
Run Code Online (Sandbox Code Playgroud)

我设置/etc/apache2/envvars如下

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=public
Run Code Online (Sandbox Code Playgroud)

我确保 /home/username/Videos/ 及其子文件夹归 拥有username:public,将权限设置为 777(775 后不起作用)并确保用户www-data属于组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
Run Code Online (Sandbox Code Playgroud)

但是当我设置/etc/apache2/envvarsusername(我自己的用户名)下运行 Apache 时,一切正常。问题与许可有关,但在我的情况下我不知道如何;特别是当我将权限设置为777. 有任何想法吗?

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

小智 113

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

  • 确实,要仔细检查文件和目录权限(如果可用),您可以使用 `namei -m /home/youruser/public_html/yourfile.ext` 或尝试 http://people.apache.org/~igalic/hacks/parsepath (8认同)
  • 澄清一下,您希望 Apache 读取的任何目录都必须对 Apache 用户可读。很可能您的用户主文件夹不属于您的用户和组,因此您必须将 755 权限设置为 `/home/username` 才能快速访问它。 (3认同)
  • 我在 OSX Mac OS High Sierra 上遇到了这个问题,这个解决方案对我有用。甚至不需要重新启动 Apache。 (2认同)

joz*_*yqk 35

如果在 selinux 出现问题的情况下,而不是仅仅禁用它,则此页面此页面会提供授予访问权限的命令:

chcon -R -t httpd_sys_content_t ~/public_html/
Run Code Online (Sandbox Code Playgroud)

  • 我确定这是我的问题。该死的 CentOS!Thx 用于命令,完美运行。 (2认同)
  • 谢谢,只需用我尝试提供的内容的根目录替换 `~/public_html/` 部分。 (2认同)

小智 21

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

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

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

实用程序 namei 可用于通过列出路径的每个组件的权限来帮助查找权限问题:

namei --modes /usr/local/apache2/htdocs/foo/bar.html
Run Code Online (Sandbox Code Playgroud)

就我而言,我路径中的目录具有 700 权限,这会导致问题。改成701后,问题解决。

  • 这里的链接很有帮助,因为它解释了问题:目录路径中的一个节点缺少搜索权限。使用“namei”命令找到这个,然后“chmod”到755。 (2认同)
  • 它解释了真正的原因以及解决方案。谢谢 (2认同)

小智 18

您可能启用了 selinux。尝试

getenforce
Run Code Online (Sandbox Code Playgroud)

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

setenforce 0
Run Code Online (Sandbox Code Playgroud)

并尝试这是否能解决您的问题。

  • 不要只是禁用 SELinux 作为修复。通过重新分配端口或设置布尔值来修复 SELinux 问题。 (4认同)
  • 此答案有助于确定该问题与 SELinux 相关。但是不建议禁用它。 (2认同)

tin*_*lyx 13

另一种方法是将apache2 用户(通常用于 Ubuntu)添加到当前用户的个人组(与用户名同名的组),而不是将主目录~和(例如by )的访问权限授予所有用户。 :~/public_htmlchmod 755 ...www-data

sudo adduser www-data $(whoami)
sudo service apache2 reload
Run Code Online (Sandbox Code Playgroud)

(假设~/public_html属于默认用户组。)

当有多个用户时,这一点很重要,并且不允许用户访问彼此的主文件夹,这一点很重要。