【问题标题】:Acces Control only works inside <Location> directive, Apache/2.4.6 (CentOS)访问控制仅适用于 <Location> 指令,Apache/2.4.6 (CentOS)
【发布时间】:2023-01-26 23:02:20
【问题描述】:

有一台运行着多个 Apache 实例的服务器。一个实例需要从任何地方访问,但仅限于授权用户。实例由 systemctl 脚本启动,其中 -f 选项指向 /opt/ 中的配置文件。

Config 包括来自 /opt/ 下同一文件夹中的另一个文件的指令。所包含指令的相关部分目前如下所示:

[...]

  <Location "/subfolder">
      <RequireAll>
        Require all granted
        Require valid-user
      </RequireAll>
   LimitRequestBody <someNumber>
  </Location>

[...]

  DavLockDB /somepath/webdav/DavLock

  Alias /subfolder /mainfolder/subfolder
  <Directory /mainfolder/subfolder>
      Dav on
      AuthType Basic
      AuthName "Restricted Files"
      AuthUserFile /somepath/webdav/.htpasswd
      <RequireAll>
        Require all granted
        Require valid-user
      </RequireAll>
      AllowOverride All
      SSLRequireSSL
      Options FollowSymLinks Indexes
  </Directory>

[...]

这到目前为止有效,如果您输入用户名和密码,它只允许访问文件夹。

问题是,如果我注释掉 &lt;Location 指令以符合安全建议,那么访问将被完全拒绝。没有办法输入用户名和密码,如果我在命令行上提供它们,它们将被忽略,而它们以前使用 &lt;Location 块完好无损。

&lt;Directory&gt; 指令中的 &lt;RequireAll&gt; 块完全无效。事实上,如果我在那里评论它,它不会改变 httpd 实例的行为。只有当它被放置在 &lt;Location 块中时它才有效。另一方面,&lt;Directory&gt; 块的其余部分似乎在工作。

有人对我在这里可能遗漏的东西有任何提示吗?提前致谢!

【问题讨论】:

    标签: apache2.4


    【解决方案1】:

    H/T 至Apache Basic Auth not working in .htaccess or Directory blocks; works fine in Location blocks

    问题在于启动 Apache 实例的配置文件包含 /etc/ 中的系统范围配置之一,其中包含默认位置块,类似于以下内容:

    <Location />
      Require all denied
      [...]
    </Location>
    

    当我从此处注释掉行 Require all denied 时,&lt;Directory&gt; 块中的访问控制指令开始按预期工作。

    上面的解释是,与“完全在文件系统之外运行”的“普通”&lt;Location&gt; 指令不同,&lt;Location /&gt; 指的是整个服务器(参见 Apache 文档:https://httpd.apache.org/docs/2.4/mod/core.html#location),所以它的意思差不多与 &lt;Directory /&gt; 相同(至少在其范围内),除了它只能被另一个 &lt;Location&gt; 指令覆盖。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-12
      • 1970-01-01
      • 2017-05-27
      • 2018-11-08
      • 1970-01-01
      • 2015-06-19
      • 2014-01-03
      • 1970-01-01
      相关资源
      最近更新 更多