2009-06-02 7 views
1

Note: À l'origine, j'ai posé cette question sur serverfault.com mais je n'ai reçu qu'une seule réponse à ce jour, et plus j'y pense, plus je me rends compte que c'est probablement mieux sur stackoverflow.Comment restreindre l'accès au référentiel via WebSVN?

J'ai plusieurs dépôts subversion qui sont servis par Apache 2.2 et WebDAV. Ils sont tous situés dans un endroit central, et j'ai utilisé cet article debian-administration.org comme base (j'ai abandonné l'utilisation de l'authentification de base de données pour un simple fichier htpasswd cependant).

Depuis lors, j'ai également commencé à utiliser WebSVN. Mon problème est que tous les utilisateurs du système ne devraient pas être en mesure d'accéder aux différents référentiels, et la configuration par défaut de WebSVN est de permettre à tous ceux qui peuvent s'authentifier. Selon la documentation de WebSVN, le meilleur moyen d'y parvenir est d'utiliser le système d'accès de chemin subversion. J'ai donc cherché à le créer en utilisant la directive AuthzSVNAccessFile. Lorsque je fais cela, je continue à recevoir des messages "403 Interdits".

Mes fichiers se présenter comme suit:

Je paramètres de stratégie par défaut dans un fichier:

<Location /svn/> 
    DAV svn 
    SVNParentPath /var/lib/svn/repository 

    Order deny,allow 
    Deny from all 
</Location> 

Chaque dépôt obtient un fichier de stratégie comme ci-dessous:

<Location /svn/sysadmin/> 
    Include /var/lib/svn/conf/default_auth.conf 
    AuthName "Repository for sysadmin" 
    require user joebloggs jimsmith mickmurphy 
</Location> 

Le default_auth. fichier conf contient:

SVNParentPath  /var/lib/svn/repository 
AuthType   basic 
AuthUserFile  /var/lib/svn/conf/.dav_svn.passwd 
AuthzSVNAccessFile /var/lib/svn/conf/svnaccess.conf 

Je ne suis pas tout à fait sûr de savoir pourquoi j'ai besoin du second SVNParentPath dans default_auth.conf, mais je viens d'ajouter cela aujourd'hui car je recevais des messages d'erreur suite à l'ajout de la directive AuthzSVNAccessFile.

Avec un fichier d'accès totalement permissive

[/] 
joebloggs = rw 

le système a bien fonctionné (et est resté pratiquement inchangé), mais comme je l'ai dès que je commence à essayer d'ajouter tout type de restrictions telles que

[sysadmin:/] 
joebloggs = rw 

à la place, j'obtiens à nouveau les erreurs 'Permission denied'. Les entrées du fichier journal sont:

[Thu May 28 10:40:17 2009] [error] [client 89.100.219.180] Access denied: 'joebloggs' GET websvn:/ 
[Thu May 28 10:40:20 2009] [error] [client 89.100.219.180] Access denied: 'joebloggs' GET svn:/sysadmin 

Que dois-je faire pour que cela fonctionne? Avez-vous mal configuré apache, ou ma compréhension du fichier svnaccess.conf est-elle incorrecte?

Si je m'y prends mal, je n'ai aucun attachement particulier à mon approche globale, alors n'hésitez pas à proposer des alternatives.

MISE À JOUR (20090528-1600):

j'ai essayé de mettre en œuvre this answer, mais je ne peux toujours pas faire fonctionner correctement.

Je sais que la plupart de la configuration est correcte, comme je l'ai ajouté

[/] 
joebloggs = rw 

au début et « joebloggs » a alors tout l'accès correct.

Lorsque je tente d'aller spécifiques au dépôt cependant, faire quelque chose comme

[/] 
joebloggs = rw 

[sysadmin:/] 
mickmurphy = rw 

puis je me suis une erreur de permission refusée pour mickmurphy (joebloggs fonctionne toujours), avec une erreur similaire à ce que j'avais déjà précédemment

[Thu May 28 10:40:20 2009] [error] [client 89.100.219.180] Access denied: 'mickmurphy' GET svn:/sysadmin 

aussi, j'ai oublié d'expliquer précédemment que tous mes dépôts sont sous

/var/lib/svn/repository 

MISE À JOUR (20090529-1245):

Toujours pas de chance pour que cela fonctionne, mais tous les signes semblent pointer vers la question étant avec un contrôle chemin d'accès à la subversion ne fonctionne pas correctement. Mon hypothèse est que je n'ai pas configuré apache ou svn pour reconnaître correctement la structure de mon référentiel. Ceci est dû au fait que l'entrée '[/]' semble fonctionner parfaitement.

Il me vient aussi à l'esprit que c'est une question qui pourrait être mieux sur StackOverflow?

Répondre

1

Vous pouvez générer des fichiers de mot de passe md5 à l'aide de l'utilitaire htpasswd d'apache (situé dans le répertoire bin).

Ensuite, dans votre httpd.conf:

<Location /svn> 
    DAV svn 
    SVNParentPath "repo path" 
    AuthType Basic 
    AuthName "Repository" 
    AuthUserFile "password file path" 
    Require valid-user 
    SVNListParentPath on #if you want a repository listing for the whole svn directory 
</Location> 

Cela nécessite l'authentification des utilisateurs, et que des combinaisons nom d'utilisateur/mot de passe situés dans le fichier de mot de passe (de htpasswd) sera acceptée pour l'accès.

En outre, vous pouvez également spécifier un accès en lecture seule à tout le monde, mais utiliser le fichier de mot de passe pour commits, etc par ce qui suit (dans la balise de localisation):

<LimitExcept GET PROPFIND OPTIONS REPORT> 
    Require valid-user 
</LimitExcept> 

Si je comprends ce que vous avez besoin, cela devrait le résoudre pour l'accès au niveau de l'utilisateur.

EDIT:

J'ai oublié de mentionner que si vous utilisez un fichier de mot de passe, assurez-vous qu'il est pas accessible par le web (aucun alias ou un répertoire sont attribués dans apache où il est stocké).

+0

J'ai déjà un fichier .htpasswd et que tout fonctionne bien. Le problème se produit lorsque j'essaie d'utiliser le contrôle d'accès basé sur le chemin de subversion, en utilisant le fichier svnaccess.conf que j'ai listé ci-dessus.Mon instinct me dit que la configuration ci-dessus est PRESQUE correcte, et que je laisse une directive Apache, ou que je manque quelque chose dans la façon dont j'ai écrit le fichier svnaccess.conf pour obtenir ce dont j'ai besoin. – kaybenleroll

+0

Salut @Chris S pouvez-vous m'aider sur ce http://stackoverflow.com/questions/13541629/websvn-doesnt-ask-for-authentication-for-using-a-repository – juned

0

Vous devez donner à tous l'accès en lecture à la racine. Supprimez ensuite les accès en lecture de référentiels spécifiques, si nécessaire. Travailler avec des groupes d'utilisateurs peut aider à garder la configuration petite.

Vous pourriez essayer comme ceci:

[/] 
* = r 

[sysadmin:/] 
mickmurphy = 
joebloggs = rw 
Questions connexes