
複数の scponly アカウントを持つサーバーがあり、Basic 認証で http アクセスを提供したいと考えています。
問題の最初の部分は、mod_rewrite を使用して各ユーザーの適切なディレクトリを切り取って選択することで解決しました。しかし、各ユーザーに対して異なる認証ユーザー ファイルを作成しようとすると問題が発生します。単純に、その方法がわかりません。
サンプル設定は次のとおりです。
<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つのファイルだけで、各ユーザーにすべてのディレクトリへのアクセスが許可されます。
答え1
peelman の回答を拡張するには、ユーザーごとに個別のセクションを用意する必要があります。
<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>
根本的なアプローチとしては、Apache を Perl で設定できる mod_perl を使用することです。これは 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
えっ? ファイルは 1 つだけで済みます。Require パラメータを valid-user ではなく userid に変更するだけです。こちらを参照してください: Apache ドキュメント。