升级Kubuntu到22.04.2 LTS后Apache2.4访问跨磁盘符号链接返回403/Forbidden错误
升级Kubuntu到22.04.2 LTS后Apache2.4访问跨磁盘符号链接返回403/Forbidden错误
嗨,我仔细梳理了你的问题细节,升级后Apache访问跨磁盘符号链接报403,结合你贴出的权限、配置信息,大概率是AppArmor安全限制或者目标目录的访问权限这两个容易忽略的点导致的,咱们一步步排查解决:
第一步:排查目标目录的访问权限问题
你提到自己加入了www-data组,但Apache是运行在www-data用户身份下的,咱们先验证这个用户能不能直接访问符号链接的目标目录:
sudo -u www-data ls /home/dracos/graphics/knotwork
如果这条命令返回Permission denied,那问题就出在权限上:
- 当前
/home/dracos的权限是0750,组归属是dracos,但www-data用户并不在dracos组里,所以它没有权限进入/home/dracos目录。 - 解决方法二选一:
- 放宽
/home/dracos的目录权限,让其他用户拥有执行权限(允许进入目录):chmod o+x /home/dracos - 把
www-data用户加入dracos组,让它继承组的访问权限:sudo usermod -aG dracos www-data sudo systemctl restart apache2
- 放宽
第二步:检查AppArmor的限制(这是22.04升级后最容易踩的坑)
Kubuntu 22.04默认启用了AppArmor,并且对Apache的访问范围做了更严格的限制——默认情况下Apache是不允许访问/home目录的,这会直接阻断跨磁盘符号链接的访问(毕竟你的/home在单独的磁盘上)。
解决步骤:
先确认AppArmor对Apache的规则处于生效状态:
sudo aa-status你会看到
usr.sbin.apache2处于enforcing模式(强制生效)。编辑Apache的AppArmor配置文件:
sudo nano /etc/apparmor.d/usr.sbin.apache2在文件中找到类似以下的目录权限规则块:
/var/www/ r, /var/www/** rw,在它下面添加允许访问你的目标目录的规则(尽量精确,避免过于宽泛的权限):
/home/dracos/graphics/knotwork/ r, /home/dracos/graphics/knotwork/** rw,如果有多个需要访问的目录,也可以统一添加:
/home/dracos/graphics/ r, /home/dracos/graphics/** rw,重新加载AppArmor规则:
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.apache2最后重启Apache让配置生效:
sudo systemctl restart apache2
额外确认Apache配置
虽然你的配置里已经设置了FollowSymLinks,但还是要快速检查一遍:
- 确认
apache2.conf和你的虚拟主机配置中,对应/var/www/ref/htdocs/的Directory块里,Options确实包含FollowSymLinks,并且没有被-FollowSymLinks这类否定选项覆盖。
按照上面的步骤操作后,应该就能解决跨磁盘符号链接的403问题了。之前18.04没问题,是因为当时的AppArmor对Apache的限制没这么严格,升级后这个安全规则默认生效了,很容易被忽略。
备注:内容来源于stack exchange,提问作者Marty Vance
相关产品推荐
相关产品推荐

