Apache 中的动态身份验证领域

Apache 中的动态身份验证领域

我有一个前端服务器,充当许多(动态“许多”)带有嵌入式网络服务器的建筑监视器的网关代理。

可以通过如下 URL 来访问它们:

http://www.example.com/monitor1/
http://www.example.com/monitor2/
    ...

我正在尝试将这些监视器的访问权限限制为仅拥有它们的用户。因此,我需要一种为特定目录指定用户或组权限的方法。

我在 Apache 中看到的标准身份验证机制不起作用,因为我需要指定每个位置。我更喜欢一些动态地图或脚本。

有什么建议么?

答案1

好的,这里有一个快速且(非常)简单的方法。简而言之,没有一种方法(据我所知)可以用标准 Apache 工具动态地执行您的要求。需要额外的模块或代码。可能有人已经制作了一个可以执行您想要的操作的模块。我没有去寻找。

在 Apache 配置中安装并启用 mod_perl,然后将此块放在配置中 perl 的 LoadModule 之后的任意位置。它不必位于任何 VirtualHost 或 Directory 或类似位置。

<Perl>
 use Apache2::ServerUtil qw//;
 use Apache2::RequestRec qw//;
 use Apache2::RequestUtil qw//;
 use Apache2::Const qw/OK DECLINED/;

 my $s = Apache2::ServerUtil->server;

 $s->push_handlers(PerlHeaderParserHandler => sub { my($r) = @_;
  if ( $r->hostname eq 'www.example.com' &&
       $r->uri =~ m|^/(monitor\d+)/$| ) {
   my $monitorDirectory = $1;

   eval{$r->add_config([
    "AuthType basic",
    "AuthName 'secret $monitorDirectory'",
    "AuthUserFile /path/to/user/file",
    "require user $monitorDirectory"
   ])};
   if ( $@ ) { warn $@ }

   return OK;

  } else {
   return DECLINED;
  }
 });
</Perl>

基本上,它所做的就是查看每个请求的 URL,如果匹配,则在请求的身份验证和授权阶段之前动态插入一些配置规则。要修改它,请更改位www.example.com、正则表达式匹配^/(monitor\d+)/$和要插入的指令列表。

这将留下一个需要维护的用户文件,其中用户名是来自 URL 的目录名称。如果您希望每个目录有多个用户,则必须使用组并同时维护该文件。为此,请更改require user $monitorDirectoryrequire group $monitorDirectory并添加AuthGroupFile /path/to/group/file

相关内容