Назад | Перейти на главную страницу

Динамический файл 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> 

Ноты:

Чтобы расширить ответ Пилмана, вам нужно будет создать отдельный раздел для каждого пользователя:

<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.