经过数月的断断续续的尝试,我发现了强烈表明 Apache2 使用了实际链接的所有权和组的证据,以找出导致这些 Forbidden 错误的原因。
- 我有一个运行 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 似乎要求链接由与目标相同的用户拥有。
有谁知道是否有设置可以控制这种行为,或者可以解释这种行为是如何、为什么或为了什么?我所能想到的只是,这是某人为了增加安全性而提出的好主意,但确实给我带来了很多麻烦。
答案1
如果所有权匹配,则该SymlinksIfOwnerMatch
选项仅提供您所描述的行为。