
У меня есть сервер с несколькими учетными записями scponly, и я хочу предоставить 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
Чтобы расширить ответ Пилмана, вам придется создать отдельный раздел для каждого пользователя:
<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>
(Написано спонтанно.)
решение2
А? У вас может быть только один файл. Вам просто нужно изменить параметр Require на userid вместо valid-user. Смотрите здесь: Документация Apache.