Comment restreindre l'accès au référentiel via WebSVN?

8

J'ai plusieurs référentiels de subversion qui sont servis via 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 cependant abandonné l'utilisation de l'authentification de la base de données pour un simple fichier htpasswd).

Depuis lors, j'ai également commencé à utiliser WebSVN . Mon problème est que tous les utilisateurs du système ne devraient pas pouvoir accéder aux différents référentiels, et la configuration par défaut de WebSVN est d'autoriser quiconque peut s'authentifier.

Selon la documentation WebSVN, la meilleure solution consiste à utiliser le système d'accès au chemin de subversion, j'ai donc cherché à le créer à l'aide de la directive AuthzSVNAccessFile.

Cependant, lorsque je fais cela, je reçois des messages "403 interdits".

Mes fichiers ressemblent à ceci:

J'ai des 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 référentiel 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 fichier default_auth.conf contient ceci:

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

Je ne sais pas vraiment pourquoi j'ai besoin du deuxième 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 permissif

[/]
joebloggs = rw

le système a bien fonctionné (et est resté essentiellement inchangé), mais dès que j'ai commencé à essayer d'ajouter tout type de restrictions telles que

[sysadmin:/]
joebloggs = rw

au lieu de cela, je reçois à nouveau les erreurs «Autorisation refusée». Les entrées du fichier journal sont les suivantes:

[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? Vous avez mal configuré Apache ou ma compréhension du fichier svnaccess.conf est-elle incorrecte?

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

MISE À JOUR (20090528-1600):

J'ai essayé d'implémenter cette réponse , mais je n'arrive toujours pas à le 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 tous les accès corrects.

Quand j'essaie de me rendre spécifique au référentiel, faire quelque chose comme

[/]
joebloggs = rw

[sysadmin:/]
mickmurphy = rw

puis j'ai obtenu une autorisation refusée erreur 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

De plus, j'ai oublié d'expliquer précédemment que tous mes référentiels sont en dessous

/var/lib/svn/repository

MISE À JOUR (20090529-1245):

Pas de chance pour que cela fonctionne, mais tous les signes semblent indiquer que le contrôle d'accès au chemin dans Subversion ne fonctionne pas correctement. Mon hypothèse est que je n'ai pas configuré apache ou svn pour reconnaître correctement ma structure de référentiel.

En effet, l'entrée «[/]» semble fonctionner parfaitement.

Il me vient également à l'esprit que c'est une question qui pourrait mieux appartenir à StackOverflow?

MISE À JOUR (20090603-1740):

En réponse à l'un des commentaires de cette question, ma configuration WebDAV pour subversion elle-même reçoit l'emplacement / svn / repos mais websvn est défini sur / websvn.

kaybenleroll
la source
À quelle URL de serveur relative votre Websvn s'exécute-t-il? Dans ma configuration actuelle, websvn est dans / websvn, tandis que le référentiel lui-même est dans / svn
Sander Rijken
salut kaybenleroll pouvez-vous m'aider à ce sujet? stackoverflow.com/questions/13541629/…
juin

Réponses:

5

Le problème est probablement lié au fractionnement de la configuration entre deux directives d'emplacement, mais je ne suis pas sûr.

Plutôt que de définir des autorisations à deux endroits (config apache et le fichier authz), définissez-les simplement dans le fichier authz. Ainsi:

httpd.conf

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

  Require valid-user
  AuthType Basic
  AuthName "Subversion Repository"
  AuthUserFile /path/to/.htpasswd

  SVNPathAuthz on
  AuthzSVNAccessFile /path/to/svn.authz
</Location>

svn.authz

[groups]
sysadmins = joebloggs jimsmith mickmurphy

# By default, nobody has any permissions
[/]
* = 

# sysadmins get access to the sysadmin repository
[sysadmin:/]
@sysadmins = rw

Vous auriez également besoin des utilisateurs appropriés dans le fichier htpasswd.

Alex J
la source
pouvez-vous m'aider à ce sujet? stackoverflow.com/questions/13541629/…
juin
4

Je ne sais pas si vous avez résolu ce problème ou non, mais c'est la procédure qui fonctionne pour moi.

Oubliez de jouer avec les directives apache, éditez plutôt le fichier config.php de WebSVN et incluez / décommentez la directive suivante:

$ config-> useAuthenticationFile ('/ chemin / vers / votre / authz / fichier');


la source
Non, jamais complètement résolu. Je vais essayer votre idée. :)
kaybenleroll
+1 J'ai eu le même problème et cela l'a complètement résolu! Merci!
John Virgolino
2

cela fonctionne pour moi.

user1 peut voir "/" et "/ project1" user3 ne peut voir que "/ project1"

[groupes]

groupa = utilisateur1, utilisateur2

groupb = user3, user4

[/]

@groupa = rw

[/projet 1]

@groupb = rw


la source
1

J'ai eu beaucoup de mal avec cela, et la seule configuration qui fonctionne pour moi est la suivante:

Authz file
------
[groups]
group1=user1
group2=user2

#Read and write for everyone defined in some group, others denied
[/]
@group1=rw
@group2=rw
*=

[project1:/]
@group1=rw
*=

[project2:/]
@group2=r
*=
----end authz file

Par conséquent, groupe1 a un accès en lecture et en écriture à projet1 et groupe2 a un accès en lecture à projet2. Tout le monde n'a accès à aucun projet.

Je dois souligner que "project1" et "project2" sont des projets à l'intérieur du référentiel défini dans le fichier de configuration Apache subversion.confcomme.

Subversion.conf
----
LoadModule dav_module         modules/mod_dav.so
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

<Location /svn>
   DAV svn
   SVNParentPath /var/www/svn
   AuthType Basic
   AuthName "Name of the root repositories"
   Require valid-user
</Location>

<Location /svn/repos>
   AuthName "Subversion subrepository"
   AuthUserFile /var/www/svn/repos/conf/passwdfile
#Authz control
   AuthzSVNAccessFile /var/www/svn/repos/conf/authz
</Location>

-----end

Mon problème actuel est qu'il n'est pas possible de répertorier les projets dans le référentiel /svn/repos(bien qu'ils soient correctement accessibles). SVNListParentPathsur la directive, peu importe où vous le mettez, cela n'aide pas.

Actuellement, my /var/www/svnn'est pas un référentiel, mais juste un répertoire dans un système de fichiers de serveurs. /var/www/svn/reposest un référentiel créé avecsvnadmin create

Marko Kosunen
la source
0

Vous auriez dû lire la doc websvn et tout aurait été évident :)

Notez également que vous ne devez pas utiliser la commande AuthzSVNAccessFile pour définir le fichier d'accès.

Maintenant que vous avez défini votre authentification, il vous sera demandé votre nom d'utilisateur et votre mot de passe pour accéder au répertoire WebSVN. Il ne vous reste plus qu'à configurer WebSVN pour utiliser votre fichier d'accès Subversion pour contrôler l'accès. Ajoutez cette ligne à votre fichier config.php:

$ config-> useAuthenticationFile ('/ path / to / accessfile');

Bartek
la source