首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Apache不会遵循符号链接(403禁止)

Apache不会遵循符号链接(403禁止)
EN

Stack Overflow用户
提问于 2011-09-12 05:27:40
回答 9查看 144.1K关注 0票数 97

我在Ubuntu上安装Apache时遇到了一些问题。我一直在跟踪this guide

# /usr/sbin/apache2 -v
Server version: Apache/2.2.17 (Ubuntu)
Server built:   Feb 22 2011 18:33:02

我的公共目录/var/www可以成功地提供并执行放置在其中的PHP页面。但是,我想在/var/www中创建一个symlink,它指向我的home文件夹中的一个目录,并在那里提供页面。

[root /var/www]# ll
total 36
drwxr-xr-x  3 root root 4096 2011-09-11 14:22 .
drwxr-xr-x 14 root root 4096 2011-06-04 22:49 ..
lrwxrwxrwx  1 root root   16 2011-09-11 13:21 about -> /root/site/about

当我尝试在浏览器上访问/about时,我得到

Forbidden

You don't have permission to access /about on this server.

据我所知,我为我想要服务的文件提供了足够的权限:

[root ~/site/about]# ll
total 24
drwxr-xr-x 5 root root 4096 2011-09-11 13:20 .
drwxr--r-- 3 root root 4096 2011-09-11 13:19 ..
drwxr-xr-x 2 root root 4096 2011-09-11 13:21 contact
-rwxr-xr-x 1 root root 1090 2011-09-11 13:19 index.php
drwxr-xr-x 2 root root 4096 2011-09-11 13:20 me
drwxr-xr-x 2 root root 4096 2011-09-11 13:21 resume

我知道FollowSymLinks选项,并且我相信它是在我的/etc/apache2/sites-enabled/000-default文件中设置的:

DocumentRoot /var/www
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
<Directory /var/www/>
    Options FollowSymLinks Indexes MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>

你知道我会错过什么吗?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2011-09-12 05:46:31

检查Apache是否拥有/root/root/site/root/site/about的执行权限。

运行:

chmod o+x /root /root/site /root/site/about

你可以找到一个more secure way in Elijah's answer

票数 135
EN

Stack Overflow用户

发布于 2015-10-21 21:56:26

关于这个问题,我刚刚明白为什么我的vhost会给我那个403。

我已经测试了这个问题和其他问题的所有可能性,但运气不佳。它几乎把我逼疯了。

我正在通过符号链接的方式设置一个类似于Capistrano的发布部署的服务器,当我试图访问DocRoot文件夹(现在是指向当前发布文件夹的符号链接)时,它给了我403。

我的vhost是:

DocumentRoot /var/www/site.com/html
<Directory /var/www/site.com/html>
        AllowOverride All
        Options +FollowSymLinks
        Require all granted
</Directory>

我的主要httpd.conf文件是(默认安装Apache2.4):

DocumentRoot "/var/www"
<Directory "/var/www">
    Options -Indexes -FollowSymLinks -Includes
(...)

事实证明,主要选项的定义优先于我的vhosts fiel (对我来说,这是违反直觉的)。因此我将其更改为:

DocumentRoot "/var/www"
<Directory "/var/www">
    Options -Indexes +FollowSymLinks -Includes
(...)

还有尤里卡!(请注意主httpd.conf文件中FollowSymLinks之前的加号。希望这能帮助其他一些迷失的灵魂。

票数 7
EN

Stack Overflow用户

发布于 2021-04-21 11:00:29

正如在Arch wiki上的this讨论中所建议的,为另一组设置完整路径的默认方法是使用:

chmod o+x /root /root/site /root/site/about

不是最安全的方式,因为任何有权访问服务器的用户都能够访问和执行公开路径上的文件。

最好是使用ACL权限为特定用户设置权限。在Apache HTTP服务器的情况下,该用户将是"http",并且可以通过执行以下操作来设置权限(在arch中,您需要安装acl包):

setfacl -m "u:http:--x" /path/to/directory"

您必须递归地设置它(首先设置为/path,然后设置为/path/,依此类推)。

与投票最多的解决方案相比,只有特定用户可以访问此目录,因此安全性得到了提高。

额外提示:如果路径挂载在zfs池中,则需要在zpool配置中添加acltype选项。这可以通过以下方式完成:

zfs set acltype=posixacl your_zpool

然后,通过重新启动计算机,将使用正确的配置再次挂载该卷,并且上面的代码将正常工作。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7381371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档