9/16/2011

Mise en place d'une authentification forte pour SVN


Application SVN & OTP

Ce billet vise à renforcer l'authentification fournie par l'http authentification d'Apache. Nous prendrons comme exemple d'application Subversion installé par l'intermédiaire du module Apache : mod_dav_svn.

Introduction

En guise de rappel, Subversion est un système permettant de gérer les différentes versions de fichiers. A l'origine utilisé par les développeurs, il peut être utilisé à des fins de partage, stockage de fichiers pour les particuliers. Il peut être utilisé de deux manières :

  • par un serveur SVN. Cette méthode est plus rapide que la deuxième car moins lourde cependant elle contient uniquement les éléments nécessaires au fonctionnement. Ce mode est déconseillé.
  • par un module Apache. Cette méthode vous donne accès à l'http authentication et autres configurations d'Apache (SSL, traçabilité des connexions,...).

Voici un schéma décrivant le fonctionnement de SVN :

Les fichiers se trouvent sur le serveur Apache (ou le serveur SVN, suivant le mode choisi) ainsi que sur tous les pc en local de chaque individu ayant accès au repository et les synchronisant.

Pré-requis : Le module Subversion d'Apache est installé. Ce billet étant sous centos, vous pouvez trouver un tutoriel, pour l'installer et importer quelques fichiers pour l'exemple, sur ce site : http://wiki.centos.org/HowTos/Subversion


1. Installer le module otp pour Apache


Le module s'occupant de la vérification du bon otp pour Apache est téléchargeable sur le site : http://code.google.com/p/mod-authn-otp/downloads/list

Ce module a été utilisé car il est écrit en langage C, ce qui facilite son utilisation avec d'autres composants.

Une fois téléchargé, installez le suivant la procédure habituelle :

  • dézipez/tarez le
  • ./configure dans le répertoire ainsi créé
  • make install
  • make
  • make clean

Ce dossier contient otptool qui sert au calcul et à la vérification des différents otp. A l'issue de l'installation, un fichier « mod_authn_otp.so » avec les autres modules Apache.


2. Charger le module dans le fichier de configuration de Subversion


cd httpd/conf.d           (dav_svn.conf sous debian)
vi subversion.conf

Ajoutez la ligne suivante en tête du fichier, à la suite des autres chargements de modules :

LoadModule authn_otp_module   modules/mod_authn_otp.so


3. Créer un ficher otp-utilisateur


Ce fichier contient le nom utilisateur, la seed, le type d'algorithme utilisé. Un exemple type ; intitulé users.sample, est présent dans le répertoire mod_authn_otp.

 vi votre_fichier_otp_utilisateurs

Editez votre fichier avec les informations nécessaires.

Exemple :

HOTP/T60       toto      1234    0123456789abcdef0123456789abcdef01234567   1  0
type token name pin seed décalage nombre de raté permis


Au vu des informations sensibles contenues dans ce fichier, il est nécessaire d'effectuer quelques modifications dessus :

chown apache.apache votre_fichier_otp_utilisateurs
chmod 700 votre_fichier_otp_utilisateurs

L'exemple d'application étant Subversion, on considérera que le fichier de contrôle d'accès et utilisateurs classique sont créés (cf. premier lien pour l'installation de Subversion).

On rappelle que le fichier utilisateurs classique comprendra le code pin de l'utilisateur associé.

Il se créé bien comme le login/password habituel :

htpasswd -cm /etc/votre_fichier_de_pin   votre_login
New password : 1234
Re-type new password : 1234

De même pour le fichier de contrôle d'accès, par exemple :

vi votre_fichier_d_acl
[votre_repo:/votre/path/vers/le/repo]
votre_login=rw


Même modifications sur ces deux fichiers en ce qui concerne le propriétaire et les permissions :

chown apache.apache vos_deux_fichiers
chmod 700 vos_deux_fichiers


4. Configurer Subversion


Editez le fichier subversion.conf :

AuthUserFile "/etc/votre_fichier_de_pin"
OTPAuthUsersFile "/etc/votre_fichier_otp_utilisateurs"
OTPAuthLogoutOnIPChange On
OTPAuthPINAuthProvider votre_prov
OTPAuthMaxOTPFailure 5
DAV svn
SSLRequireSSL
SVNPath /var/www/svn/votre_repo
AuthzSVNAccessFile /etc/votre_fichier_d_acl
AuthType basic
AuthName "My otp authentication"
AuthBasicProvider votre_alias
AuthName "Subversion repo"
Require valid-user


Pour mémoire, l'http authentication peut se faire de deux manières :

  • La Basic. Elle transmet le couple (login ; password) en clair, codé en Base64.
  • La Digest. Elle transmet le hash MD5 du password.

Actuellement la version du module otp pour Apache ne permet pas d'utiliser un code pin pour la méthode Digest. La procédure consiste à conserver l'http authentification basic mais de forcer l'utilisation du protocole https, d'où l'utilisation de SSLRequireSSL.

Redémarrer ensuite le service Apache puis accéder à votre repo en https pour profiter de votre nouvelle authentification forte.

Ainsi, vous envoyez votre couple (login ; pincode+tokencode) par https. Est vérifié que le login soit bien autorisé ainsi que les permissions associées, votre tokencode, ensuite votre pincode.


5. SVN côté client


Vous pouvez désormais consulter vos fichiers situés dans votre repository SVN via :

  • votre browser par l’url http://ip_server/repo_name avec une authentification forte par OTP.

  • un client quelconque comme TortoiseSVN.

Voici des tutoriels pour :

  • l’utilisation de TortoiseSVN sous windows http://www.cent20.net/spip.php?article155.
  • l’utilisation de RabbitVCS sous ubuntu http://blog.nicolargo.com/2010/04/rabbitvcs-le-tortoisesvn-pour-linux.html



  • Aucun commentaire: