Apache 中的符号链接曾经有效,但现在已被禁止

Apache 中的符号链接曾经有效,但现在已被禁止

我正在设置一台新电脑;旧设置是 Ubuntu 20.04 LTS;我已经放置了一个符号链接以允许 apache 访问我的内容。

sudo ln -s /home/ed/mystuff /var/www/html/stuff

这样我只需浏览 localhost/stuff 即可访问它,而且一切似乎都不需要进一步配置。我知道这已经存在安全隐患 但它仅供我内部使用。

我在新电脑上安装了 22.04 LTS,它的配置(我认为)完全相同,但现在导致 403/Forbidden 错误。阅读一些类似的问题,我看到很多关于文件归 www-data 所有的信息,但在我的 20.04 上,/var/www 端的所有内容都是 root,而用户端的所有内容仍归用户所有。没有 www-data。

在这一点上,我最好奇的是它在 20.04 之前是如何工作的,但在 22.04 上却只出现 403/forbidden?

编辑并添加:我没有更改任何配置文件,只是安装了 apache2。特别是我看到 /etc/apache2/apache2.conf 文件是相同的。

总结(?):为什么它在之前的 Ubuntu (20.04) 版本中可以运行,但在较新版本 (22.04) 中却不行,原因在于:无论出于何种原因,在过去,用户的主目录是用 755 的权限创建的;但在较新版本的 ubuntu 中,它是用 750 创建的...将其更改为 751 或 755 可以使它像以前一样工作。

答案1

如果在配置中启用符号链接不起作用,您可以改用绑定挂载:

  1. 清理和准备
sudo unlink /var/www/html/stuff # Remove old link
sudo mkdir /var/www/html/stuff # Create empty directory as mount target
  1. 在当前会话中测试
sudo mount --bind /home/ed/mystuff /var/www/html/stuff
  1. 通过附加以下内容使其在重新启动后仍然存在/etc/fstab
/home/ed/mystuff    /var/www/html/stuff    none    nodev,nosuid,noexec,noatime,bind    0    0

挂载的处理级别低于 Apache2 或其周围的沙箱所执行的操作。它看起来就像您最初放在 一样/home/ed/mystuff/var/www/html/stuff但它将保持完全同步。如果您在 下添加了自定义挂载/home/ed/mystuff,您可能还需要绑定它们,如果您希望它们可见而不是下面的内容可见。还要确保您要发布的文件树/home/ed/mystuff可由 Apache2 的用户读取。

答案2

Apache 有一个配置设置,Option FollowSymLinks用于控制这一点。如果配置中没有此选项,则默认设置为开启,而这很可能就是您以前的版本中的设置。在新版本中,默认配置文件可能在某处将此选项设置为关闭。您必须检查配置文件并将此选项更改为开启。

以下是有用文档的链接:https://httpd.apache.org/docs/2.4/mod/core.html#options

此外,整个路径必须能够被 Apache 运行的用户(即其自身)/home/ed/mystuff访问(也就是说,具有权限) ,并且。x/home/ed/mystuff/home/ed/home

相关内容