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

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

我知道这个问题被问了很多次,但是我看到的解决方案对我来说不起作用。

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

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属于组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/envvars为以(我自己的用户名)运行 Apacheusername时,一切都正常。问题与权限有关,但我不明白我的情况如何;尤其是当我将权限设置为 时777。有什么想法吗?

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

答案1

chmod +x你的用户目录,然后重新启动 apache。755权限应该可以工作。我遇到了问题644

* 请注意,从 Ubuntu 22.04 开始用户目录750默认权限,而不是755

答案2

如果 SELinux 是问题所在,那么除了禁用它之外,这一页这一页, 和这一页给出授予访问权限的命令:

允许 httpd 读取访问 chcon -R -t httpd_sys_content_t ~/public_html/

允许 httpd 写入访问 chcon -R -t httpd_sys_rw_content_t ~/public_html/

允许 httpd 远程调用 sudo setsebool -P httpd_can_network_connect 1

第三个允许file_get_contents/curl被 SElinux 默认禁用的出站呼叫。

答案3

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

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

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

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

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

在我的例子中,我的路径中的一个目录具有权限 700,这导致了问题。将其更改为 701 后,问题得到解决。

答案4

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

sudo adduser www-data $(whoami)
sudo service apache2 reload

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

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

相关内容