我知道这个问题被问了很多次,但是我看到的解决方案对我来说不起作用。
我只启用了一个虚拟主机,并尝试启用对不在文档根目录下的文件夹的访问
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
答案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
属于默认用户组。)
当有多个用户时,这一点很重要,并且不允许用户访问彼此的主文件夹。