使用 mod_rewrite 在 apache 中实现动态 AuthUserFile。可能吗?

使用 mod_rewrite 在 apache 中实现动态 AuthUserFile。可能吗?

我有一台带有多个 scponly 帐户的服务器,并且我想在 Basic Auth 下提供 http 访问。

问题的第一部分已经解决,使用 mod_rewrite 为每个用户剪切并选择正确的目录。但是当我尝试为每个用户建立不同的 auth 用户文件时,问题出现了。我根本不知道该怎么做。

这是一个示例配置。

<VirtualHost an-ip-number-and:a-port>
    ServerName *.example.com
    RewriteEngine On
    UseCanonicalName Off

    RewriteCond %{HTTP_HOST} ^(.*).example.com
    RewriteCond /server/scponly/%1/incoming -d
    RewriteRule ^(.+)   %{SERVER_NAME}$1 [C]
    RewriteRule ^([^.]+)\.example\.com/(.*) /server/scponly/$1/incoming/$2 [L]

    RewriteRule ^(.+) http://FAIL.example.com

    <Directory /server/scponly/*/incoming>
        AuthType Basic
        AuthName "SFTP-HTTP Area"
        AuthUserFile  ???????   # <-- this!
        require valid-user
    </Directory>
</VirtualHost> 

笔记:

  • 我无法放弃 mod_rewrite,因为实际配置与其他服务器名称/目录检查/重写混合在一起以用于其他目的。
  • 我无法将身份验证详细信息移至 .htaccess 文件,因为用户可以删除它们。但我感兴趣的是这种方法是否可以作为部分解决方案。
  • 我也对其他方法感兴趣
  • 我需要为每个目录提供不同的身份验证文件,只有一个文件将授予每个用户访问所有目录的权限

答案1

为了扩展皮尔曼的答案,你必须为每个用户设置一个单独的部分:

<Directory /server/scponly/*/incoming>
    AuthType Basic
    AuthName "SFTP-HTTP Area"
    AuthUserFile  /path/to/user/htpasswd
</Directory>
<Directory /server/scponly/bob/incoming>
    require user bob
</Directory>
<Directory /server/scponly/smith/incoming>
    require user smith
</Directory>

一种激进的方法是使用 mod_perl,它允许您使用 perl 配置 apache。这将进入 apache 配置文件:

<Perl>

for $dir (glob "/server/scponly/*/incoming") {

  ($user) = $dir =~ m%/server/scponly/([^/]+)/incoming%;

  exists $Directory{$dir} or $Location{$dir} = { };
  $Directory{$dir}{AuthType} = 'Basic';
  $Directory{$dir}{AuthName} = 'SFTP-HTTP Area';
  $Directory{$dir}{AuthUserFile} = '/path/to/htpasswd';
  $Directory{$dir}{require} = "user $user";

}

</Perl>

(根据我的理解写下的。)

答案2

嗯?你可以只创建一个文件。你只需要将 Require 参数更改为 userid 而不是 valid-user。参见此处: Apache 文档

相关内容