1 votes

AuthUserFile dynamique dans apache avec mod_rewrite. Est-ce possible ?

J'ai un serveur avec plusieurs comptes scponly et je veux fournir un accès http sous Basic Auth.

La première partie du problème est résolue, en utilisant mod_rewrite pour hacher et sélectionner le bon répertoire pour chaque utilisateur. Mais le problème survient lorsque j'essaie d'établir un fichier d'authentification différent pour chaque utilisateur. Je n'arrive tout simplement pas à trouver comment le faire.

Voici un exemple de configuration.

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

Notes :

  • Je ne peux pas abandonner mod_rewrite car la configuration actuelle est mélangée à d'autres noms de serveur, vérifications de répertoire et réécritures à d'autres fins.
  • Je ne peux pas transférer les informations d'authentification dans des fichiers .htaccess car les utilisateurs pourraient les effacer. Mais je suis intéressé si cette approche serait une solution partielle.
  • Je suis également intéressé par d'autres approches
  • J'ai besoin de fichiers d'authentification différents pour chaque répertoire, car un seul fichier donnera accès à tous les répertoires à chaque utilisateur.

1voto

songsong Points 173

Pour développer la réponse de Peelman, vous devrez avoir une section séparée pour chaque utilisateur :

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

Une approche radicale serait d'utiliser mod_perl qui vous permet de configurer apache avec perl. Cela serait placé dans un fichier de configuration d'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>

(Ecrit au pied levé.)

0voto

veggerby Points 5824

Hein ? Vous pouvez avoir un seul fichier. Vous devez juste changer votre paramètre Require pour qu'il soit l'userid au lieu de valid-user. Voir ici : Docs Apache .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X