=Samba et Winbind=
Cette article décrit l’installation d’un dépôt subversion accessible en http grâce à l'authentification ldap/AD d'Apache.
La configuration comprend un contrôle d’accès par utilisateur, par groupe et Organization Unit aux différentes dossiers du référentiel.
J’explique également comment installer l’application web trac.
Les outils utilisés sont les suivants : subversion, apache 2, trac, samba, Active Directory et winbind.
===Pré-requis===
Un système GNU/Linux Debian avec le minimum d'installé...
Pour que l'authentification active directory fonctionne sur Linux il faut bien entendu joindre la station linux à un domaine active directory.
Pour cela, nous devons d'abord installer et configurer les paquets winbind et samba sur Linux qui vont nous permettre de récupérer les groupes et les utilisateurs sur l'annuaire Active Directory.
===Intégration de la machine Linux au domaine===
Modifier le fichier ''/etc/hosts''
La 3ème ligne correspond au domaine svn
La 4ème ligne correspond au domain trac
La 5ème ligne correspond au contrôleur de domaine (DC)
Il faut savoir qu'Apache utilise le fichier hosts pour résoudre ses hôtes virtuels et ensuite il fait une requête dns.
127.0.0.1 localhost 127.0.1.1 SVN 172.16.88.25 SVN.iplinternet.local SVN 172.16.88.25 TRAC.iplinternet.local TRAC 172.16.0.18 MADOU.iplinternet.local MADOUOn installe les paquets nécessaire.
apt-get install samba krb5-user libpam-krb5 ntpdate winbind'''samba :''' qui servira à faire le lien entre des machines Linux et Windows.
ntpdate ip_du_DCOn peu également le faire en dur, pour cela éditez le fichier ''/etc/default/ntpdate'' et vous comprendrez...
date===Configuration de Kerberos=== Editez le fichier /etc/krb5.conf:
nano -w /etc/krb5.confet n'y placer que le contenu suivant:
[libdefaults] default_realm = DOMAINEAD.LOCAL clock_skew = 300 dns_lookup_realm = false dns_lookup_kdc = true [realms] DOMAINEAD.LOCAL = { kdc = madou admin_server = madou default_domain = DOMAINAD.LOCAL } [domain_realm] .domainad.local = DOMAINAD.LOCAL domainad.local = DOMAINAD.LOCALTestons ensuite les paramètres Kerberos en lançant la commande :
kinit Administrateur...entrez ensuite le mot de passe du compte administrateur du DC.
klistPour les détruire (sisi, on peu...):
kdestroy===Configuration de Samba=== Avant de procéder à cette étape, arrêter temporairement les services winbind et samba:
/etc/init.d/winbind stop && /etc/init.d/samba stopPuis éditons le fichier ''/etc/samba/smb.conf'':
nano -w /etc/samba/smb.confN'y placer ensuite que le contenu suivant:
[global] workgroup = DOMAINAD realm = DOMAINAD.LOCAL security = ADS encrypt passwords = yes password server = server.domainad.local idmap uid = 10000-20000 idmap gid = 10000-20000 winbind enum groups = yes winbind enum users = yes winbind use default domain = yesCe sera la configuration minimum pour samba...à titre d'exemple je vous donne la mienne qui est juste un peu plus garnie:
[global] workgroup = IPL_INTERNET realm = IPLINTERNET.LOCAL security = ADS encrypt passwords = true password server = madou.iplinternet.local idmap uid = 10000-20000 idmap gid = 10000-20000 winbind enum users = yes winbind enum groups = yes winbind use default domain = yes map to guest = Bad user template homedir = /home/%D/%U template shell = /bin/bash obey pam restrictions = yes os level = 2 domain logons = no local master = no domain master = no server string = %h server wins support = no dns proxy = no log file = /var/log/samba/log.%m max log size = 1000 syslog = 0 panic action = /usr/share/samba/panic-action %d [develop] path = /mnt/hdd2/dev read only = no writeable = yes browseable = no create mask = 0022 directory mask = 0022 valid users = @developpers comment = Tous_mes_projetsEnsuite, redémarrez les services Samba et Winbind en testant d'abord les paramètres samba:
testparmOK
/etc/init.d/winbind start && /etc/init.d/samba startA titre d'exemple je vous donne également la configuration du fichier /etc/nsswitch.conf:
passwd: compat winbind group: compat winbind shadow: compat hosts: files dns mdns4_minimal [NOTFOUND=return] dns mdns4 winbind networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: nisA titre d'exemple je vous donne également la configuration du fichier /etc/pam.d/common-account:
account sufficient pam_winbind.so account required pam_unix.soA titre d'exemple je vous donne également la configuration du fichier /etc/pam.d/common-auth:
auth sufficient pam_winbind.so auth required pam_unix.so use_first_passA titre d'exemple je vous donne également la configuration du fichier /etc/pam.d/common-session:
session required pam_mkhomedir.so skel=/etc/skel umask=0077 session sufficient pam_winbind.so session required pam_unix.so===Rejoindre le domaine=== Rejoindre le domaine Microsoft se fait avec la commande suivante:
net ads join -U Administrateursi cela ne fonctionne pas réessayer avec:
net rpc join -U AdministrateurEn réponse du contrôleur de domaine ---> Joined domain DOMAINAD.LOCAL. Le compte Administrateur doit avoir les droits pour ajouter une station au domaine active directory ! ===Erreurs éventuelles=== Si vous obtenez le message suivant:
The workgroup in smb.conf does not match the short domain name obtained from the server. Using the name [AUTRE_DOMAINE] from the server. You should set "workgroup = AUTRE_DOMAINE" in smb.conf.Alors modifiez votre fichier ''/etc/samba/smb.conf'' comme dit, puis redémarrez ensuite le service Samba et Winbind et recommencer.
ads_connect : No logon serversC'est que le service winbind n'est pas démarré ou installé. ===Tests=== Effectuer des tests afin de voir si tout s'est déroulé correctement: Testez la connexion au domaine:
net ads testjoinou
net rpc testjoin...devrait retourner Join is OK. On redémarre une dernière fois Winbind et Samba:
/etc/init.d/winbind restart && /etc/init.d/samba restartAfficher la liste des utilisateurs sur Active Directory:
wbinfo -uLa liste des groupes:
wbinfo -gSi cela ne fonctionne pas, vérifiez le fichier smb.conf et redémarrer les services samba et winbind.
aptitude install apache2 subversion subversion-toolsUne fois installé, on peut directement créer notre premier dépôt subversion. (On suppose qu'il y a déjà un utilisateur ''raphael'') enregistré sur le système.
mkdir -p /home/raphael/svn/projet/ cd /home/raphael/svn/projet/ svnadmin create altairNous avons désormais un dépôt subversion vide qui ne contient aucune donnée. :-((
aptitude install libapache2-svnOn active le module dav_svn:
a2enmod dav_svn /etc/init.d/apache2 reloadOn active le module authnz_ldap:
a2enmod authnz_ldap /etc/init.d/apache2 reloadOn active le module ldap:
a2enmod ldap /etc/init.d/apache2 reload===Configuration du VirtualHost pour l'authentification Active Directory=== Désormais le protocole ldap et dav_svn sont installés, il reste juste à configurer notre virtualhost.
Explication du module ldap:# Chargement du module subversion DAV svn # On indique le chemin complet vers le dépôt subversion SVNPath /home/raphael/svn/projet/altair/ # Ici on demande une identification avec Active Directory SVNPathAuthz off SVNListParentPath on Allow from all AuthType Basic AuthBasicProvider ldap AuthzLDAPAuthoritative off AuthName "Projet Altair : Authentification requise" AuthLDAPBindDN "testsvn@iplinternet.local" AuthLDAPBindPassword azerty AuthLDAPURL "ldap://madou.iplinternet.local:3268/DC=iplinternet,DC=local?sAMAccountName?sub?(objectClass=user)" NONE Require ldap-group cn=Altair,ou=svn,dc=iplinternet,dc=local # On indique ici le fichier de configuration des permissions d'accès au dépôt subversion AuthzSVNAccessFile /var/www/private/altairperm
mkdir /var/www/private touch /var/www/private/altairperm chown www-data: /var/www/private/altairpermVoici le contenu du fichier :
[groups] altair = raphaelsvn, oliviersvn, josesvn [/] anonymous = r raphaelsvn = rw [/trunk] @altair = rw [/branches] oliviersvn = r josesvn = r [/tags] oliviersvn = r josesvn = rExplications : la première ligne permet de définir des groupes. J’ai un groupe dev qui contient trois utilisateurs : raphael, olivier et jose.
chown -R raphael:www-data /home/raphael/svn/ chmod -R 775 /home/raphael/svnOn test la configuration d'apache avant de le relancer:
apache2ctl configtest /etc/init.d/apache2 reloadOn effectue un premier test en créant les 3 branches principales d’un dépôt subversion :
svn mkdir http://ip_du_serveur/altair/svn/trunk -m "Création des répertoires d'archivage Subversion." --username=raphael svn mkdir http://ip_du_serveur/altair/svn/branches -m "Création des répertoires d'archivage Subversion." --username=raphael svn mkdir http://ip_du_serveur/altair/svn/tags -m "Création des répertoires d'archivage Subversion." --username=raphaelou si cela ne marche pas, faites comme ceci:
svn mkdir file:///home/raphael/svn/projet/altair/trunk -m "Création des répertoires d'archivage Subversion." --username=raphael svn mkdir file:///home/raphael/svn/projet/altair/branches -m "Création des répertoires d'archivage Subversion." --username=raphael svn mkdir file:///home/raphael/svn/projet/altair/tags -m "Création des répertoires d'archivage Subversion." --username=raphaelOn pourra faire simplement des tests avec Tortoise sur Windows. =Installation de Trac= L'installation du mode python pour apache (qui est nécessaire pour le lancement de Trac) se fait simplement avec Debian :
aptitude install libapache2-mod-pythonOn va ensuite télécharger les sources de Trac et les installer manuelement:
cd /usr/share wget http://ftp.edgewall.com/pub/trac/Trac-0.11.5.tar.gz tar -zxf Trac-0.11.5.tar.gz cd Trac-0.11.5 python ./setup.py install cd ../ mv Trac-0.11.5 trac===Création du projet Trac=== Je place mes différents projets dans /home/raphael/trac.
mkdir /home/raphael/trac cd /home/raphael/trac trac-admin altair initenvEt répondre aux quelques questions posées : * Project Name [My Project]> Altaïr * Database connection string [sqlite:db/trac.db]> valider en appuyant sur entrée * Path to repository [/var/svn/test]> /home/raphael/svn/projet/altair * Templates directory [/usr/share/trac/templates]> valider en appuyant sur entrée ===Modifications des droits des fichiers=== Pour rendre accessibles les fichiers par Apache, il faut comme pour le dépôt subversion modifier les droits :
cd /home/raphael/trac chown -R raphael:www-data altair chmod -R 775 altair===Connexion à Trac avec le module LDAP=== Pour se connecter au trac, comme pour les utilisateurs subversion, on utilise le module authnz_ldap d'apache:
===Finalisation=== Et pour finir, un peu de sécurité au niveau des fichiers contenants les permissions :SetHandler mod_python PythonInterpreter main_interpreter PythonHandler trac.web.modpython_frontend PythonOption TracEnv /home/raphael/trac/altair/ PythonOption TracUriRoot / Order allow,deny Allow from all AuthType Basic AuthBasicProvider ldap AuthzLDAPAuthoritative off AuthName "Projet Altair : Authentification requise" AuthLDAPBindDN "testsvn@iplinternet.local" AuthLDAPBindPassword azerty AuthLDAPURL "ldap://madou.iplinternet.local:3268/DC=iplinternet,DC=local?sAMAccountName?sub?(objectClass=user)" NONE Require ldap-group cn=Altair,ou=svn,dc=iplinternet,dc=local
cd /var/www/private chown www-data:www-data * chmod 660 *===Exemple de VirtualHost en production=== Pour créer vos vhosts il suffit de désactiver le vhosts par défaut d'apache:
a2dissite default /etc/init.d/apache2 reloadet ensuite de créer deux fichiers dans ''/etc/apache2/sites-available'':
touch /etc/apache2/sites-available/trac touch /etc/apache2/sites-available/svnPuis de les activer:
a2ensite trac /etc/init.d/apache2 reload
a2ensite svn /etc/init.d/apache2 reloadJe vous ait mi mes 2 VirtualHost à titre d'exemple (trac et svn):
## Trac Config NameVirtualHost *:80Pour SVN:ServerAdmin webmaster@localhost ServerName trac.iplinternet.local ServerAlias altair.iplinternet.local DocumentRoot /home/raphael/trac/altair/ Options All -Indexes AllowOverride All Order allow,deny Allow from all SetHandler mod_python PythonInterpreter main_interpreter PythonHandler trac.web.modpython_frontend PythonOption TracEnv /home/raphael/trac/altair/ PythonOption TracUriRoot / Order allow,deny Allow from all AuthType Basic AuthBasicProvider ldap AuthzLDAPAuthoritative off AuthName "Trac : Professeurs Projet Altair Authentification requise" AuthLDAPBindDN "testsvn@iplinternet.local" AuthLDAPBindPassword azerty AuthLDAPURL "ldap://madou.iplinternet.local:3268/DC=iplinternet,DC=local?sAMAccountName?sub?(objectClass=user)" NONE Require ldap-group cn=Altair,ou=svn,dc=iplinternet,dc=local LogLevel warn ErrorLog /var/log/apache2/error.log CustomLog /var/log/apache2/access.log combined
## SVN configVous pouvez maintenant commencer à travailler sur svn a l'adresse http://svn.iplinternet.local (sur Windows, en général, les développeurs utilisent les logiciels Tortoise ou Eclipse (gratuits) pour travailler sur Subversion) ou sur trac à l'adresse http://trac.iplinternet.local On peu tout à fait désactiver l'authentification apache pour trac et laisser l'authentification pour svn, comme ça, les anonyme aurons accès en lecture seule au projet. That's all Folks...ServerAdmin webmaster@localhost ServerName svn.iplinternet.local DocumentRoot /home/raphael/svn/projet/altair/ Options All -Indexes AllowOverride All Order allow,deny Allow from all Order allow,deny Allow from all # Chargement du module subversion DAV svn # On indique le chemin complet vers le dépôt subversion SVNPath /home/raphael/svn/projet/altair/ # Ici on demande une identification avec Active Directory SVNPathAuthz off SVNListParentPath on AuthType Basic AuthBasicProvider ldap AuthzLDAPAuthoritative off AuthName "SVN : Professeurs Projet Altair Authentification requise" AuthLDAPBindDN "testsvn@iplinternet.local" AuthLDAPBindPassword azerty AuthLDAPURL "ldap://madou.iplinternet.local:3268/DC=iplinternet,DC=local?sAMAccountName?sub?(objectClass=user)" NONE Require ldap-group cn=Altair,ou=svn,dc=iplinternet,dc=local # On indique ici le fichier de configuration des permissions d'accès aux dossiers du projet... si nécessaire # AuthzSVNAccessFile /var/www/private/altairperm LogLevel warn ErrorLog /var/log/apache2/error.log CustomLog /var/log/apache2/access.log combined