Permissions utilisateurs par projets dans un dépôt Subversion
Tags : Astuces, Password, Sécurité, Apache, Subversion
J'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 !
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
- Rélever les astérisques des mots de passe
- Tutoriel création d'un réseau privé virtuel (VPN)
- Drivers Odbc 32 bits sur windows 2003/2008 64bits