Dynamisches AuthUserFile in Apache mit mod_rewrite. Ist das möglich?

Dynamisches AuthUserFile in Apache mit mod_rewrite. Ist das möglich?

Ich habe einen Server mit mehreren scponly-Konten und möchte HTTP-Zugriff unter Basic Auth bereitstellen.

Der erste Teil des Problems ist gelöst, indem man mod_rewrite verwendet, um für jeden Benutzer das richtige Verzeichnis auszuwählen. Das Problem tritt jedoch auf, wenn ich versuche, für jeden Benutzer eine andere Authentifizierungsdatei zu erstellen. Ich kann einfach nicht herausfinden, wie das geht.

Hier ist eine Beispielkonfiguration.

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

Anmerkungen:

  • Ich kann mod_rewrite nicht löschen, da die aktuelle Konfiguration mit anderen Servernamen/Verzeichnisprüfungen/Umschreibungen für andere Zwecke vermischt ist.
  • Ich kann Authentifizierungsdaten nicht in .htaccess-Dateien verschieben, da Benutzer sie löschen könnten. Aber ich bin daran interessiert, ob dieser Ansatz eine Teillösung wäre.
  • Ich bin auch an anderen Ansätzen interessiert
  • Ich brauche unterschiedliche Authentifizierungsdateien für jedes Verzeichnis. Mit nur einer Datei erhält jeder Benutzer Zugriff auf alle Verzeichnisse

Antwort1

Um auf Peelmans Antwort einzugehen, müssen Sie für jeden Benutzer einen separaten Abschnitt haben:

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

Ein radikaler Ansatz wäre die Verwendung von mod_perl, mit dem Sie Apache mit Perl konfigurieren können. Dies würde in eine Apache-Konfigurationsdatei gehen:

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

(Aus dem Stegreif geschrieben.)

Antwort2

Hä? Sie können nur eine Datei haben. Sie müssen nur Ihren Require-Parameter so ändern, dass er die Benutzer-ID anstelle des gültigen Benutzers ist. Siehe hier: Apache-Dokumente.

verwandte Informationen