Динамический AuthUserFile в apache с mod_rewrite. Является ли это возможным?

У меня есть сервер с несколькими учетными записями 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> 

Заметки:

  • Я не могу удалить mod_rewrite, потому что фактическая конфигурация смешана с другим именем сервера / каталог-проверки / перезаписывает для других целей.
  • Я не могу переместить данные аутентификации в файлы.htaccess, потому что пользователи могут их стереть. Но мне интересно, будет ли такой подход частичным решением.
  • Я также заинтересован в других подходах
  • Мне нужны разные файлы аутентификации для каждого каталога, поскольку только один файл предоставит доступ ко всем каталогам для каждого пользователя

2 ответа

Решение

Чтобы расширить ответ 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>

Радикальным подходом будет использование 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, чтобы он стал идентификатором пользователя вместо valid-user. Смотрите здесь: Apache Docs.

Другие вопросы по тегам