经过几个月的间歇性尝试,以发现导致这些 Forbidden 错误的原因,我发现了强烈表明 Apache2 使用实际链接的所有权和组的证据。
- 我有一个运行 ubuntu 14.04 的 VPS
- 我已经安装并运行了 apache2。
我的默认文档根目录是 /var/www/html
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html <Directory /> Options FollowSymLinks AllowOverride None </Directory>
文档根目录的完整权限层次结构是:
drwxr-xr-x 21 root root 4096 Jun 10 2014 /
drwxr-xr-x 13 root root 4096 Sep 7 2014 /var
drwxrwxr-x 13 www-data www-data 4096 Nov 15 15:25 /var/www
drwxr-xr-x 2 jesse jesse 4096 Nov 15 15:25 /var/www/html
我在我的主目录下对 /var/www 进行了符号链接。
lrwxrwxrwx 1 jesse jesse 9 Sep 8 2014 /home/jesse/www -> /var/www/
现在因为我正在开发的网站有多个版本,所以我喜欢将所有网站保存在 /var/www 中,然后将符号链接到 /var/www/html 中的正确生产版本
root@vpn:/home/jesse# ls -l /var/www/html/
total 4
lrwxrwxrwx 1 jesse jesse 16 Sep 29 2014 storytellingaustralia -> ../joomla_3.3.4/
lrwxrwxrwx 1 jesse jesse 17 Oct 4 2014 tealeaftroubadours -> ../wordpress_4.0/
lrwxrwxrwx 1 jesse jesse 17 Oct 5 2014 tealeaftroubadours.com.au -> ../wordpress_4.0/
lrwxrwxrwx 1 wp-user wp-user 8 Nov 15 15:25 test -> ../test/
lrwxrwxrwx 1 jesse jesse 19 Jun 9 20:36 wa.storyguild.org.au -> ../wordpress_4.2.2/
lrwxrwxrwx 1 jesse jesse 19 Nov 15 13:32 windwanderer.com.au -> ../wordpress_4.3.1/
现在这里是异常
当前权限设置如下,并且该站点可以按预期访问。
root@vpn:/home/jesse/www/html# ls -l test
lrwxrwxrwx 1 wp-user wp-user 8 Nov 15 15:25 test -> ../test/
root@vpn:/home/jesse/www/html# ls -lLd test
drwxr-x--- 2 wp-user www-data 4096 Nov 15 15:24 test
但是,如果我随后更改链接的所有权,它本身就是 apache2 为我提供“禁止”通知。
root@vpn:/home/jesse/www/html# chown -h www-data test
root@vpn:/home/jesse/www/html# ls -l test
lrwxrwxrwx 1 www-data wp-user 8 Nov 15 15:25 test -> ../test/
root@vpn:/home/jesse/www/html# ls -lLd test
drwxr-x--- 2 wp-user www-data 4096 Nov 15 15:24 test
禁止的
您无权访问此服务器上的 /test/index.html。
如果我然后将目标的所有权更改为相同
root@vpn:/home/jesse/www/html# chown www-data test
root@vpn:/home/jesse/www/html# ls -l test
lrwxrwxrwx 1 www-data wp-user 8 Nov 15 15:25 test -> ../test/
root@vpn:/home/jesse/www/html# ls -lLd test
drwxr-x--- 2 www-data www-data 4096 Nov 15 15:24 test
该网站可再次访问。
似乎 Apache2 要求链接由拥有目标的同一用户拥有。
有谁知道是否有控制这种行为的设置,或者可以阐明这种行为的方式、原因或目的是什么?我所能想到的是,这是某人增加安全性的好主意,但确实让我很头疼。
如果所有权匹配,该
SymlinksIfOwnerMatch
选项会提供您仅在链接后描述的行为。