6 votes

Apache et DocumentRoot WebDAV par utilisateur

J'ai configuré un utilisateur WebDAV qui obtient actuellement des noms d'utilisateur et des mots de passe à partir de ma base de données MySQL. Je donne aux utilisateurs la possibilité d'utiliser WebDAV pour les téléchargements de gros fichiers (c'est pour un service de partage de fichiers que je développe actuellement) mais j'ai rencontré un petit problème que je n'arrive pas à résoudre.

Tout d'abord - comment pourrais-je faire en sorte que chaque utilisateur ait sa propre racine WebDAV afin qu'ils ne puissent pas consulter les fichiers d'autres utilisateurs? J'exécute déjà un cronjob qui vérifie les utilisateurs qui ont activé WebDAV et crée automatiquement les répertoires avec les autorisations appropriées. J'ai juste besoin d'une méthode pour indiquer cela à apache.

Merci pour toute aide, je l'apprécie vraiment.

Je sais aussi que je pourrais simplement exécuter un cronjob toutes les minutes pour me générer une configuration apache et recharger la configuration apache, mais cela ajouterait un peu trop de surcharge et je préférerais avoir plus de flexibilité.

0 votes

Une question par question, s'il vous plaît. Sinon, vous ne pourrez pas choisir une réponse acceptée pour chacune.

0 votes

D'accord, je me souviendrai de cela pour la prochaine fois que je posterai une question.

0 votes

Il serait utile de corriger (ou de remplacer) cette question, également. Je ne répondrai pas à celle-ci telle qu'elle est actuellement écrite.

4voto

Ryan Sampson Points 2898

C'est plutôt dommage que la configuration d'Apache ne soit pas aussi flexible que celle de nginx, donc vous pourriez faire quelque chose comme :

Alias /dav /chemin/vers/dav/magasin/$REMOTE_USER

Cependant, vous pouvez utiliser REMOTE_USER dans une règle de réécriture, comme ceci :

RewriteEngine On
RewriteRule ^/dav(.*)$ /__davinternal/%{LA-U:REMOTE_USER} [PT]

Ensuite, mettez toutes vos belles choses d'authentification/DAV dans un et le tour est joué.

Cela fonctionne très bien si vous avez des emplacements cohérents dans votre système de fichiers pour tous vos utilisateurs (par exemple /chemin/vers/dav/magasin/) ; si vous avez des dossiers d'utilisateurs dispersés dans le système de fichiers (avec un mapping dans MySQL), vous pouvez toujours mapper les emplacements de vos utilisateurs, mais vous devez utiliser un RewriteMap :

RewriteMap davdirs txt:/chemin/vers/carte/repertoire/utilisateur.txt
RewriteRule /^dav(.*)$ /__davinternal/${davdirs:%{LA-U:REMOTE_USER}}

Vous pouvez faire un RewriteMap directement depuis MySQL (via un script externe), mais je vous recommanderais de faire en sorte que votre application mette à jour un fichier dbm chaque fois que ces informations de mapping changent et d'utiliser une carte dbm à la place, pour de meilleures performances et sans surcharger votre base de données.

Je n'ai pas abordé les implications en termes de sécurité de ces configurations dans cette réponse, en partie parce que je ne suis pas entièrement sûr moi-même, et aussi parce que je ne connais pas exactement votre politique de sécurité.

0voto

El3k0n Points 13

À ce que je pouvais dire (il y a 2-3 ans), vous devez ajouter une configuration par utilisateur/répertoire.

# cat /etc/apache2/conf.d/dav_store.conf
# Tout d'abord, vous devez dire qu'un partage sous l'emplacement X sera un partage webdav:

Alias /store /home/davfs/storage/                                                                                                                                                 

        DAV On
        AuthType Basic
        AuthName "sample"

        Auth_MySQL On
        Auth_MySQL_Authoritative On
        Auth_MySQL_Host localhost
        Auth_MySQL_User _admin
        Auth_MySQL_Password 123
        Auth_MySQL_DB dav
        Auth_MySQL_Password_Table auth_user
        Auth_MySQL_Username_Field username
        Auth_MySQL_Password_Field password
        Auth_MySQL_Empty_Passwords Off
        Auth_MySQL_Encryption_Types Django #C'était personnalisé.
        #AuthMySQLUserCondition = "is_active = 1"

        # les utilisateurs non-root ne peuvent pas voir ce répertoire
        Options -Indexes -MultiViews
        AllowOverride None
        require user root;

        DAV On
        require user root;

Include /home/davfs/etc/conf.d/*.dvu

Et le fichier de configuration par utilisateur verrouille un utilisateur dans un répertoire. Voici un exemple

        # Nous en avons besoin dans les sous-répertoires.. sinon des messages d'erreur comme
        # "DAV Off" ne peuvent pas être utilisés pour désactiver un sous-arbre d'un emplacement activé pour DAV.
        # remplira votre journal
        DAV On

        require user lmwangi

Et c'est tout ce qu'il y a à faire. Je pense que vous devez recharger Apache à chaque modification de configuration. Ce serait merveilleux si ces tâches pouvaient être effectuées à l'aide d'un module Apache... (Plus de tâches planifiées pour générer des configurations, plus de rechargements, etc.)

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