我有一台带有多个 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 文档。