Permissions utilisateurs par projets dans un dépôt Subversion

http://maraumax.fr/medias/Billets/tutoriels/logo-subversion-svn.pngJ'utilise Subversion alias svn depuis pas mal de temps afin de centraliser les sources d'un projet avec un autre développeur. Le projet étant "fermé" j'avais simplement mis en place une sécurisation par mot de passe.

Aujourd'hui j'avais envie d'y installer d'autres sources (sur un autre projet) sans que l'autre développeur ait accès à ces données. Et c'est la que ça se complique, mettre en place des permissions utilisateurs par projets et non pour le dépôt complet.

Je vais donc vous décrire la marche à suivre pour mettre en place ces permissions en partant du principe que subversion et apache sont déjà installés et configurés sur votre serveur ainsi que les dépôts crées !

Pour l'exemple, mon domaine est "domaine.ext", mes deux projets "projet1" dans "/home/svn/projet1" et "projet2" dans "/home/svn/projet2" ainsi que mes utilisateurs "utilisateur1", "utilisateur2" et "utilisateur3".

Voici les étapes pour mettre en place les permissions :
- Créer les utilisateurs
- Créer le fichier des permissions
- Configuration des projets
- Configuration du VirtualHost sous Apache

Création des utilisateurs

Nous allons créer un fichier "passwd" dans notre dossier svn dans lequel sera enregistré les utilisateurs ainsi que les mots de passes cryptés. Voici la marche à suivre :

# On se déplace dans le dossier
cd /home/svn
 
# Lors de l'ajout du premier utilisateur on utilise l'argument "c" pour "create"
# Le "m" permet lui de crypter le mot de passe
# "passwd" correspond à notre fichier et "utilisateur1"... notre premier utilisateur !
# Le mot de passe vous est ensuite demandé ainsi qu'une vérification
htpasswd -mc passwd utilisateur1
 
# Ajout du second utilisateur
htpasswd -m passwd utilisateur2
 
# Vous avez compris la démarche :)

On pense à modifier les permissions du fichier :

# Utilisateur / Groupe
chown subversion:www-data passwd
chmod 660 passwd

Nos utilisateurs sont désormais prêts ! On passe ensuite aux permissions !

Les permissions des utilisateurs

Le fichier contenant les permissions est commun à tous les dépôts. Voici le détail du fichier et des possibilités.

# Fichier des permissions
 
# Les groupes permettant de regrouper les utilisateurs par "paquets".
[groups]
groupe1 = utilisateur1, utilisateur3
# Syntaxe : nom_du_groupe = utilisateur, utilisateur
 
# Permissions de tous les dépôts
[/]
* =
# La syntaxe "* =" permet d'interdire l'accès à tout le monde.
# Je vous conseille de faire de même si vous ne souhaitez pas laisser
# votre dépôt en libre accès.
 
# Mon premier projet
[projet1:/]
* = # On interdit à tout le monde pour commencer...
utilisateur1 = r # utilisateur1 pourra consulter le dépôt
utilisateur2 = rw # utilisateur2 pourra lire ET écrire
# utilisateur3 ne pourra pas le consulter
 
[projet1:/trunk/sources/]
utilisateur3 = r
# utilisateur 3 aura accès en lecture au dossier "/trunk/sources" de mon premier projet
 
# Mon second projet
[projet2:/]
* = # On interdit à tout le monde pour commencer...
@groupe1 = r # Syntaxe permettant d'utiliser les groupes.
# Mes utilisateurs 1 et 3 pourrons donc lire ce dépôt !
# N'oubliez pas le "@" lorsque vous faites référence à un groupe !
utilisateur2 = rw # Autorisations en lecture ET écriture pour l'utilisateur2

Enregistrez votre fichier nommé "authz" avec vos permissions à la racine de votre dépôt. (Dans "/home/svn/authz" dans mon exemple)

La encore il faut modifier les permissions du fichier :

# Utilisateur / Groupe
chown subversion:www-data authz
chmod 660 authz

La partie des autorisations est désormais complète, on va rapidement configuré les dépôts.

Configuration des projets

Les utilisateurs et permissions sont désormais gérés dans nos deux fichiers, on peux donc désactiver cette option au niveau de la configuration des projets.

Cette étape est à répéter pour tous vos projets ! smile

Ouvrez le fichier "/home/svn/projet1/conf/svnserve.conf" et vérifiez la valeurs des paramètres

# On édite nos fichiers
vi /home/svn/projet1/conf/svnserve.conf
# En encore "nano" qui est plus facile d'utilisation :)
nano /home/svn/projet1/conf/svnserve.conf

Voici la valeurs correctes :

[general]
anon-access = none # Pas d'accès sans accès :)
auth-access = write 
# password-db = passwd # Ligne à commenter !
# authz-db = authz # Ligne à commenter !
realm = Projet1 Repository # Titre du dépot
[sasl]
# use-sasl = true # Options à dé-commenter si vous utilisez "ssl"

Cette partie est terminée, il ne nous reste plus qu'a configurer apache pour prendre en compte les utilisateurs et les permissions !

Configuration du VirtualHost

Vous n'avez pas eu le choix que de mettre en place un virtualhost pour votre svn.

J'ai placé la directive dans le fichier /etc/apache2/sites-enabled/default, libre à vous de le mettre dans le fichier de votre choix.

Voici la description de ma directive :

# Accès par ip/svn
<Location /svn>
DAV svn # Il s'agit d'un dépôt svn
SVNParentPath /home/svn # Adresse parent des dépots
AuthType Basic # Authentification de base
AuthName "Mon dépôt persos" # Titre des dépots (obligatoire) 
AuthUserFile /home/svn/passwd # Fichier des utilisateurs
AuthzSVNAccessFile /home/svn/authz # Fichier des permissions
Require valid-user # On souhaite que les utilisateurs soit authentifier
SVNListParentPath On # On utilise plusieurs dépôts
</Location>

Pour terminer le tout on redémarre apache !

# Redémarrage de apache
/etc/init.d/apache2 restart
# Et tout devrait désormais rouler !

En espérant avoir détaillé le plus possible les étapes de la mise en place ! N'hésitez pas à poser des questions à la suite !

Billets relatifs

Ajouter un commentaire





Les commentaires sont validés manuellement afin d'éviter le spam.