У меня есть сервер с несколькими учетными записями scponly, и я хочу предоставить доступ по протоколу http с использованием Basic Auth.
Первая часть проблемы решается с помощью 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>
Ноты:
Чтобы расширить ответ Пилмана, вам нужно будет создать отдельный раздел для каждого пользователя:
<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, который позволяет настраивать apache с помощью 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>
(Записано с макушки.)
А? У вас может быть только один файл. Вам просто нужно изменить параметр Require на идентификатор пользователя вместо допустимого пользователя. Посмотреть здесь: Документы Apache.