Вы находитесь на странице: 1из 20

Annuaire LDAP + Samba

Ce document est de donner les bases ncessaires pour la cration d'un annuaire LDAP qui sera utilis pour l'authentification de comptes UNIX et Samba sur un serveur distant. L'objectif est de peupler l'annuaire LDAP avec les comptes du serveur de courriers lectroniques du laboratoire pour une authentification unique pour chaque service. Ce document,rdig au fil des test, dcrit tape par tape les problmes rencontrs et ne constitue qu'un point de dpart pour l'utilisation complte de LDAP avec Samba, car il ne traite que de l'authentification des utilisateurs, pas de la gestion de groupes.

Installation du serveur LDAP avec gestion des comptes Samba


serveur:~# apt-get install slapd ldap-utils phpldapadmin Lecture des listes de paquets... Fait Construction de l'arbre des dpendances... Fait Les paquets supplmentaires suivants seront installs : libiodbc2 libldap-2.3-0 libslp1 php5-ldap Paquets suggrs : slpd openslp-doc Les NOUVEAUX paquets suivants seront installs : ldap-utils libiodbc2 libldap-2.3-0 libslp1 php5-ldap phpldapadmin slapd 0 mis jour, 7 nouvellement installs, 0 enlever et 0 non mis jour. Il est ncessaire de prendre 2588ko dans les archives. Aprs dpaquetage, 8901ko d'espace disque supplmentaires seront utiliss. Souhaitez-vous continuer [O/n] ? Remarque : le mot de passe pour l'administration de la base est demand deux fois. Pour la configuration automatique, le logiciel utilise les paramtres renvoys par la commande hostname -f Dans notre cas: serveur.cem2.univ-montp2.fr Le fichier de configuration du serveur LDAP est /etc/ldap/slapd.conf. # The base of your directory in database #1 suffix "dc=cem2,dc=univ-montp2,dc=fr" # rootdn directive for specifying a superuser on the database. This is needed # for syncrepl. # rootdn "cn=admin,dc=cem2,dc=univ-montp2,dc=fr" # Where the database file are physically stored for database #1 directory "/var/lib/ldap"

Le nom du domaine est cem2.univ-montp2.fr La base de l'annuaire est dc=cem2,dc=univ-montp2,dc=fr L'administrateur de la base est admin. Configuration de LDAP pour l'utilisation de Samba L'utilisation de Samba ncessite l'utilisation de classes d'objets supplmentaires. apt-get install samba-doc cp /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz /etc/ldap/schema/ gunzip /etc/ldap/schema/samba.schema.gz Avec ces commandes, les fichiers dcrivant les classes d'objets sont rcuprs puis installs dans le rpertoire /etc/ldap/schema qui contient tous les schmas pour la description des attributs et des classes d'objets. Ajouter dans le fichier /etc/ldap/slapd.conf la ligne suivante : include /etc/ldap/schema/samba.schema # Schema and objectClass definitions include /etc/ldap/schema/core.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/inetorgperson.schema include /etc/ldap/schema/samba.schema

/etc/init.d/slapd restart pour prendre en compte les modifications. Les nouvelles classes d'objets relatives Samba ont t installes et dclares dans le fichier de configuration de LDAP. Le serveur LDAP est prt tre utilis. Pour visualiser le contenu actuel de la base il suffit de taper : slapcat | less Pour tester le fichier de configuration, taper : slaptest -f /etc/ldap/slapd.conf config file testing succeeded Remarque : Lors de l'installation sur un nouveau serveur avec recopie d'une ancienne base, vrifier que les bases LDAP (rpertoire /var/lib/ldap) appartiennent bien l'utilisateur openldap. Dans le cas contraire, le serveur ldap se lance sans aucun message d'erreur mais le port 389 n'est pas ouvert en coute, donc impossible de grer ou de s'authentifier sur la base. Remarque : Si un serveur web est install, il est possible d'administrer l'annuaire avec phpldapadmin (apt-get install phpldapadmin). Il suffit d'ajouter phpldapadmin au nom du serveur : le nom de connexion est le nom complet de l'administrateur. http://nom_serveur/phpldapadmin/ cn=admin,dc=cem2,dc=univ-montp2,dc=fr

Peupler l'annuaire
Il existe diffrentes manires d'administrer le serveur LDAP : Les commandes slap utilisables directement sur le serveur Les commandes slap accdent directement la base. Il est donc ncessaire d'arrter le serveur LDAP avant de les utiliser pour viter qu'un accs concurrent ne corrompe la base. Slapcat, trs utile, permet de faire un dump de la base et donc de faire une sauvegarde rgulire. Elle affiche le contenu de la base au format LDIF. slapcat > sauvegarde.ldif Slapadd permet de peupler l'annuaire, typiquement utilis pour restaurer une sauvegarde effectue par slapcat. slapadd < entree.ldif Dans l'tat actuel, slapcat nous renvoie : dn: dc=cem2,dc=univ-montp2,dc=fr objectClass: top objectClass: dcObject objectClass: organization o: cem2.univ-montp2.fr dc: cem2 structuralObjectClass: organization entryUUID: 0c10d87a-c29b-102d-8f39-dda6c2d14388 creatorsName: modifiersName: createTimestamp: 20090421083500Z modifyTimestamp: 20090421083500Z entryCSN: 20090421083500Z#000000#00#000000 dn: cn=admin,dc=cem2,dc=univ-montp2,dc=fr objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator userPassword:: e2NyeXB0fXdodDBXam1Idjh0T1k= structuralObjectClass: organizationalRole entryUUID: 0d5ff6ca-c29b-102d-8f3a-dda6c2d14388 creatorsName: modifiersName: createTimestamp: 20090421083502Z modifyTimestamp: 20090421083502Z entryCSN: 20090421083502Z#000000#00#000000 La base contient les objets de dn (Distinguished Name) dn: dc=cem2,dc=univmontp2,dc=fr et dn: cn=admin,dc=cem2,dc=univ-montp2,dc=fr Remarque : pour la suite, tous les comptes appartiendront une classe d'objet iesusers.

La gestion de la base par ces outils est trs limite, effacement, modification sont impossibles. De plus, lors d'un ajout il n'y a pas de vrification de cohrence des donnes. Les commandes ldap utilisables depuis un client ou un serveur Le paramtrage du fichier /etc/ldap/ldap.conf est effectu l'installation des paquets pour viter de fournir chaque entre d'une commande les paramtres (options) comme le nom de la base de donnes, le nom du serveur. Ces outils sont contenus dans le paquet ldap-utils. Tout ce qui suit peut tre fait indiffremment d'un serveur ou d'un client LDAP !!!! apt-get install ldap-utils installe les commandes ldap de gestion de l'annuaire. Quelques commandes ldap ldapadd Lien vers ldapmodify, permet d'ajouter un nouvel objet dans la base. ldapcompare Comparaison avec un autre serveur ldap. ldapdelete Supprime un objet. ldapdelete -x -D "cn=admin,dc=cem2,dc=univ-montp2,dc=fr" -w mot_de_passe "uid=arnal,ou=iesusers,dc=cem2,dc=univ-montp2,dc=fr" ldapmodify Permet de modifier un objet, elle est aussi utilise pour crer un objet avec l'option -a. Voici un exemple de l'utilisation de la commande ldapmodify, les attributs modifier sont spars par une ligne - dans le fichier ldif. L'exemple suivant modifie tous les mots de passe de l'utilisateur. La commande suivante associe au fichier tempo.ldif permet de modifier les mots de passe utilisateurs pour Samba : ldapmodify -x -D "cn=admin,dc=cem2,dc=univ-montp2,dc=fr" -w mot_de_passe -f tempo.ldif dn: uid=tempo6,ou=iesusers,dc=cem2,dc=univ-montp2,dc=fr changetype: modify replace: userPassword userPassword: {crypt}dUknctPdxaKGQ replace: sambaLMPassword sambaLMPassword: BBCB4942DD9DA506C482C03F54CDB5D9 replace: SambaNTPassword SambaNTPassword: 1B35029A05581E17F66382EB8A6BC026 ldapmodrdn Permet de renommer une entre. Modification du RDN.

ldappasswd Permet de dfinir les mots de passe des utilisateurs LDAP. Cela ne concerne pas les attributs sambaLMPassword et sambaNTPassword. ldapsearch Recherche dans l'annuaire. Configuration du fichier /etc/ldap/ldap.conf # $OpenLDAP: pkg/ldap/libraries/libldap/ldap.conf,v 1.9 2000/09/04 19:57:01 kurt Exp $ # # LDAP Defaults # # See ldap.conf(5) for details # This file should be world readable but not world writable. #BASE dc=example, dc=com #URI ldap://ldap.example.com ldap://ldap-master.example.com:666 BASE dc=cem2, dc=univ-montp2.fr, dc=fr URI ldap://162.38.134.18:389 #SIZELIMIT 12 #TIMELIMIT 15 #DEREF never Le premier test de remplissage de l'annuaire peut tre fait avec la commande ldapadd. Le but est de crer l'objet iesusers qui sera la racine de tous les comptes. Je rappelle qu'avec les commandes ldap, ce remplissage peut se faire indiffremment du serveur ou d'un client sur lesquels le paquet ldap-utils a t install. Dans ma configuration, le paquet ldap-utils a t install sur le client et le serveur, je peuple l'annuaire par le biais du serveur avec la commande ldapadd et je verifie sur mon client que la commande ldapsearch est aussi oprationnelle, donc que mon annuaire est accessible. ldapadd -x -D "cn=admin,dc=cem2,dc=univ-montp2,dc=fr" -w mot_de_passe -f iesusers.ldif Brivement pour les options : -x utilise l'authentification simple la place de SASL. -D binddn pour se lier l'annuaire. -W pour avoir une invite pour entrer le mot de passe. -w pour spcifier le mot de passe la suite. -f pour spcifier le fichier au format LDIF. Cration de l'entre iesusers ldapadd -x -D "cn=admin,dc=cem2,dc=univ-montp2,dc=fr" -w mot_de_passe -f iesusers.ldif adding new entry "ou=iesusers,dc=cem2,dc=univ-montp2,dc=fr" Le fichier iesusers.ldif contient:

dn: ou=iesusers,dc=cem2,dc=univ-montp2,dc=fr ObjectClass: top objectClass: organizationalUnit ou: iesusers Entre des utilisateurs existants dans l'annuaire LDAP : Pour entrer un utilisateur dans l'annuaire, j'utilise un script shell recup qui rcupre les donnes obligatoires de la classe posixAccount. Ce script balaye les fichiers /etc/passwd pour rcuprer les paramtres concernant l'utilisateur, et /etc/shadow pour le mot de passe crypt. Le script est lanc via la commande /travail/ldap/recup arnal. Le fichier rcupr la sortie du script : dn: uid=arnal,ou=iesusers,dc=cem2,dc=univ-montp2,dc=fr objectClass: top objectClass: account objectClass: posixAccount cn: Stephane ARNAL uid: arnal uidNumber: 40198 gidNumber: 40200 homeDirectory: /home/arnal userPassword: {crypt}$1$Z2uny1Nt$ftxSbxUUBJ1Em6qpufXqx1

Attention : sur ce fichier exemple il manque la ligne concernant le shell utilis : loginShell: /bin/bash Cet oubli n'tait pas volontaire, l'erreur est laisse ici mais sera corrige par la suite avec la commande ldapmodify. ldapadd -x -D "cn=admin,dc=cem2,dc=univ-montp2,dc=fr" -w mot_de_passe -f arnal.ldif adding new entry "uid=arnal,ou=iesusers,dc=cem2,dc=univ-montp2,dc=fr" L'utilisateur arnal vient d'tre rentr. Il est possible de le vrifier par: serveur:~# ldapsearch -x -b "dc=cem2,dc=univ-montp2,dc=fr" "(uid=arn*)" # extended LDIF # # LDAPv3 # base <dc=cem2,dc=univ-montp2,dc=fr> with scope subtree # filter: (uid=arn*) # requesting: ALL # # arnal, iesusers, cem2.univ-montp2.fr dn: uid=arnal,ou=iesusers,dc=cem2,dc=univ-montp2,dc=fr objectClass: top objectClass: account

objectClass: posixAccount cn: Stephane ARNAL uid: arnal uidNumber: 40198 gidNumber: 40200 homeDirectory: /home/arnal # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1 Commande ldapmodify Arriv cette tape, il peut tre ncessaire de modifier les donnes entres dans l'annuaire. La commande ldapmodify est utilise cet effet. Elle est un peu plus complique que ldapadd. Elle utilise aussi le format ldif avec l'ajout d'un attribut changetype. C'est une commande trs complte. Pour modifier une entre, l'attribut de changetype est modify. Il faut ajouter ensuite dans le fichier ldif la ligne add : nom_attribut. Dans le cas prsent, je veux ajouter l'attribut loginShell: /bin/bash pour l'utilisateur arnal. Le fichier arnal_modif.ldif a la forme suivante: dn: uid=arnal,ou=iesusers,dc=cem2,dc=univ-montp2,dc=fr changetype: modify add: loginShell loginShell: /bin/bash

ldapmodify -x -D "cn=admin,dc=cem2,dc=univ-montp2,dc=fr" -w mot_de_passe -f arnal_modif.ldif La commande ldapsearch -x -b "dc=cem2,dc=univ-montp2,dc=fr" "(uid=arn*)" nous indique bien que l'attribut a t rajout. Remarque : Pour supprimer cette entre il est possible d'utiliser la commande ldapdelete: ldapdelete -x -D "cn=admin,dc=cem2,dc=univ-montp2,dc=fr" -w mot_de_passe "uid=arnal,ou=iesusers,dc=cem2,dc=univ-montp2,dc=fr"

Configuration d'un client pour authentification


Les premiers utilisateurs sont crs .Dans un premier temps, il est ncessaire de vrifier que notre annuaire peut tre utilis afin d'authentifier des utilisateurs sur une machine cliente. Pour l'authentification, il est ncessaire d'installer des paquets supplmentaires pour pam. apt-get install libpam-ldap libnss-ldap

Voici les paramtres fournis lors de l'installation des paquets, pour les options les choix par dfaut sont laisss : ldap://162.38.134.12:389 dc=cem2,dc=univ-montp2,dc=fr Version de LDAP utiliser 3 Compte LDAP superutilisateur : cn=admin,dc=cem2,dc=univ-montp2,dc=fr Mot de passe de l'administrateur : mot_de_passe Configuration de NSS pour LDAP Le fichier de configuration de libnss-ldap est /etc/libnss-ldap.conf, il a t rempli lors de l'installation des paquets. Si ce n'est pas le cas il est possible de le faire avec la commande dpkg-reconfigure libnss-ldap. Il faut maintenant indiquer NSS d'utiliser LDAP pour obtenir des informations. Le fichier /etc/nsswitch.conf n'a pas t modifi, modifier les lignes suivantes pour l'authentification : passwd: group: shadow: files ldap files ldap files ldap

Cela signifie que pour ces trois entres c'est le serveur LDAP qui sera interrog en dernier par NSS pour valider un utilisateur, en cas d 'chec c'est ldap qui se chargera de l'authentification. En tapant maintenant getent passwd utilisateur (utilisateur contenu dans l'annuaire LDAP prcdemment cr), nous devrions avoir les informations sur celui-ci. getent passwd donne la liste des comptes utilisateurs dans laquelle apparaissent les comptes crs dans l'annuaire. Si je tape getent passwd arnal j'obtiens : arnal:$1$Z2uny1Nt$ftxSbxUUBJ1Em6qpufXqx1:40198:40200:Stephane ARNAL:/home/arnal: Configuration de PAM pour LDAP PAM va permettre d'authentifier les utilisateurs via LDAP. Comme pour libnss-ldap les questions poses l'installation ont permis de remplir le fichier /etc/pam_ldap.conf. ATTENTION Une erreur dans la modification des fichiers de configuration de PAM peut entraner limpossibilit de se connecter, mme avec root. Avant de modifier la configuration, il est fortement recommand de se connecter sous une autre console en root pour pouvoir corriger le problme. Les fichiers de configuration d'authentification de PAM se trouvent dans /etc/pam.d. Il y a un fichier par service. Heureusement ces services incluent dans leur fichier de configuration des fichiers communs qui sont /etc/pam.d/common-auth, /etc/pam.d/common-account, /etc/pam.d/common-session et /etc/pam.d/common-passwd. L'ordre d'apparition des lignes est important, required indique que si le rsultat est

positif les autres modules seront quand mmes analyss avant de prendre une dcision, sufficient indique qu'un rsultat positif est suffisant pour valider la vrification. Configuration de common-session # # /etc/pam.d/common-session - session-related modules common to all services # # This file is included from other service-specific PAM config files, # and should contain a list of modules that define tasks to be performed # at the start and end of sessions of *any* kind (both interactive and # non-interactive). The default is pam_unix. # #session required pam_unix.so session required pam_limits.so session optional pam_ldap.so session required pam_mkhomedir.so skel=/etc/skel

La ligne contenant pam_mkhomedir.so indique que lors de l'ouverture de la session le rpertoire de l'utilisateur sera cr s'il n'existe pas. Pour cela il est ncessaire d'installer le paquet libpam-mkhomedir si celui-ci n'a pas t install. apt-get install libpam-mkhomedir Remarque : le rpertoire /etc/skel (rpertoire modle pour la cration des rpertoires) contient les fichiers de configuration tels que .bashrc, .bash-profile, et .bash-logout. Ce sont des copies des fichiers contenus dans le rpertoire courant de l'utilisateur. Configuration de common-password Il suffit de rajouter la ligne suivante au dbut du fichier password sufficient pam_ldap.so ## /etc/pam.d/common-password - password-related modules common to all services # # This file is included from other service-specific PAM config files, # and should contain a list of modules that define the services to be #used to change user passwords. The default is pam_unix # # The "obscure" option replaces the old `OBSCURE_CHECKS_ENAB' option in # login.defs. Also the "min" and "max" options enforce the length of the # new password. password sufficient pam_ldap.so password required pam_unix.so nullok obscure min=4 max=8 md5

Configuration de common-account Presque la mme opration, ajouter la ligne suivante au dbut du fichier : account sufficient pam_ldap.so # # /etc/pam.d/common-account - authorization settings common to all services # # This file is included from other service-specific PAM config files, # and should contain a list of the authorization modules that define # the central access policy for use on the system. The default is to # only deny service to users whose accounts are expired in /etc/shadow. # account sufficient pam_ldap.so account required pam_unix.so

Configuration de common-auth Ajouter la ligne suivante au dbut de fichier . auth sufficient pam_ldap.so # # /etc/pam.d/common-auth - authentication settings common to all services # # This file is included from other service-specific PAM config files, # and should contain a list of the authentication modules that define # the central authentication scheme for use on the system # (e.g., /etc/shadow, LDAP, Kerberos, etc.). The default is to use the # traditional Unix authentication mechanisms. # auth sufficient pam_ldap.so auth required pam_unix.so nullok_secure Il est maintenant possible de se connecter via ssh ou en local sur le client avec le compte arnal qui a t ajout dans l'annuaire ldap. On constate que la cration du rpertoire personnel est faite automatiquement sur le client lors de la premire connexion.

Prparation des comptes Samba


La partie configuration Samba avec LDAP est relativement simple et assez rapide. La difficult est de gnrer les mots de passe pour chaque utilisateur. J'ai opt pour un script perl (perl doit tre install sur le serveur avec la librairie libcrypt-smbhashperl , Sup perl). Dans le cas prsent, les mots de passe UNIX et Samba pour les comptes dj existants seront diffrents puisque je n'ai aucun moyen de rcuprer cette information. Mais par la suite, le mme script Perl sera utilis pour gnrer les nouveaux mots de passe ou pour modifier ceux existants. Les deux chanes $nt et $lm sont rcupres pour obtenir les valeurs de

sambaLMPassword et sambaNTPassword (voir plus loin). Exemple de cration des mots de passe samba avec Perl, script mots.pl #!/usr/bin/perl -w use strict; use Crypt::SmbHash; my $lm; my $nt; my $mot="mot_de_passe"; #ntlmgen $mot, $lm, $nt; ( $lm, $nt ) = ntlmgen $mot; # $nt = nthash(mot); # $lm = lmhash(mot); print "${lm} : ${nt}\n";

Lancement du scipt: perl -w mots.pl qui donne pour notre mot de passe: 476944521C17CE5836077A718CCDF409 : 9B7C14D2110FD451980963B585BB267A Rcupration d'un SID Remarque : Samba doit tre oprationnel. Un SID de domaine est ncessaire pour Samba. Dans ce cas, le serveur que je dois remplacer existe dj et je rcupre son SID avec : net getlocalsid 1. SID for domain BACKUP2 is: S-1-5-21-1835574758-856875503-2789082536 Pour le calcul du dernier numro du SID d'un utilisateur il est possible d'utiliser la formule: (2 x uidNumber) + 1000. Dans un premier temps, et pour les tests, seuls les paramtres obligatoires ont t utiliss, pour les connatre il est ncessaire de visualiser le contenu du fichier de description de la classe sambaSamAccount /etc/ldap/schema/samba.schema. objectclass ( 1.3.6.1.4.1.7165.2.2.6 NAME 'sambaSamAccount' SUP top AUXILIARY DESC 'Samba 3.0 Auxilary SAM Account' MUST ( uid $ sambaSID ) MAY ( cn $ sambaLMPassword $ sambaNTPassword $ sambaPwdLastSet $ sambaLogonTime $ sambaLogoffTime $ sambaKickoffTime $ sambaPwdCanChange $ sambaPwdMustChange $ sambaAcctFlags $ displayName $ sambaHomePath $ sambaHomeDrive $ sambaLogonScript $ sambaProfilePath $ description $ sambaUserWorkstations $ sambaPrimaryGroupSID $ sambaDomainName $ sambaMungedDial $ sambaBadPasswordCount $ sambaBadPasswordTime $ sambaPasswordHistory $ sambaLogonHours))

Configuration du serveur Samba qui va s'authentifier sur l'annuaire


Le fichier /etc/pam.d/samba contient les lignes suivantes. Il n'y a donc rien configurer de ce cot l, ces fichiers ont dj t modifis prcdemment. @include common-auth @include common-account @include common-session Aprs l'installation de samba, il est ncessaire d'effectuer quelques modifications dans le fichier /etc/samba/smb.conf, comme transformer la ligne passdb backend = tdbsam en passdb backend = ldapsam:ldap://162.38.134.18/ et rajouter les lignes suivantes pour indiquer Samba que l'authentification se fait par LDAP. Modifier le fichier /etc/samba/smb.conf comme suit: # passdb backend = tdbsam passdb backend = ldapsam:ldap://162.38.134.18/ ldap admin dn = cn=admin,dc=cem2,dc=univ-montp2,dc=fr ldap suffix = dc=cem2,dc=univ-montp2,dc=fr #ldap group suffix = ou=Groups ldap user suffix = ou=iesusers #ldap machine suffix = ou=Machines Ne pas oublier de rendre les rpertoires accessibles en criture: [homes] comment = Home Directories # browseable = no browseable = yes # By default, the home directories are exported read-only. Change next # parameter to 'yes' if you want to be able to write to them. # writable = no writable = yes

Il est ncessaire de rentrer ensuite le mot de passe de l'administrateur de la base LDAP pour Samba dans /var/lib/samba/secrets.db, puis de redmarrer samba: smbpasswd -w mot_de_passe /etc/init.d/samba restart Inconvnient, le rpertoire n'est pas directement cr par samba, il suffit de crer un script qui s'excutera la connexion de chaque utilisateur. Cration automatique des rpertoires Dans la section [homes] de /etc/samba/smb.conf on ajoute:

root preexec = /travail/samba/creation.sh %U [homes] comment = Home Directories path = /home/%U root preexec = /travail/samba/creation.sh %U browseable = yes writeable= yes Ensuite on cr le fichier /travail/samba/creation.sh #!/bin/bash #!/bin/bash if [ ! -e /home/$1 ]; then mkdir /home/$1 chown $1 /home/$1 chmod 700 /home/$1 fi exit 0

On donne ensuite les

droits:

chmod +x /travail/samba/creation.sh

Cration des comptes finaux sur le serveur


Pour tester le fonctionnement, il suffit de crer un utilisateur compltement virtuel dans l'annuaire et d'essayer de se connecter partir d'une machine sous Windows sur le serveur. Cration de l'utilisateur avec le fichier test.ldif sur le serveur qui reprend l'ancien utilisateur arnal et les mots de passe gnrs par le script mots.pl. test.ldif dn: uid=sambatest,ou=iesusers,dc=cem2,dc=univ-montp2,dc=fr objectClass: top objectClass: account objectClass: posixAccount objectClass: sambaSamAccount cn: Stephane ARNAL uid: sambatest uidNumber: 2000 gidNumber: 2000 homeDirectory: /home/sambatest userPassword: {crypt}$1$Z2uny1Nt$ftxSbxUUBJ1Em6qpufXqx1 loginShell: /bin/bash sambaSID: S-1-5-21-1835574758-856875503-2789082536-5000 sambaLMPassword: S-1-5-21-1835574758-856875503-2789082536 sambaNTPassword: 9B7C14D2110FD451980963B585BB267A

La commande suivante cr l'utilisateur: ldapadd -x -D "cn=admin,dc=cem2,dc=univ-montp2,dc=fr" -w mot_de_passe -f test.ldif adding new entry "uid=sambatest,ou=iesusers,dc=cem2,dc=univ-montp2,dc=fr"

Finalisation sur le serveur


Gnration des mots de passe crypts pour samba pour un utilisateur l'aide d'un script perl dont la sortie est rcupre par un script shell. #!/usr/bin/perl -w use strict; use Crypt::SmbHash; my $lm; my $nt; ( $lm, $nt ) = ntlmgen $ARGV[1]; print "$ARGV[0]:${lm}:${nt}\n"; La variable $ARGV[0] contient le nom de l'utilisateur et $ARGV[1] son mot de passe en clair. La sortie se fait sur l'cran, le programme sera appel par un script shell qui redirigera la sortie vers un fichier pour traitement et cration du fichier LDIF. ./crypte.pl arnal mot_de_passe Remarque : Perl doit tre install sur le serveur avec la librairie libcrypt-smbhash-perl (Sup perl). Les bases pour l'utilisation de LDAP avec Samba sont maintenant poses et le mcanisme principalement dcortiqu. Il est possible d'tendre l'utilisation aux groupes et aux machines ce qui n'tait pas l'objectif premier. Ci-dessous, la procdure qui permet d'installer un autre serveur Samba utilisant l'annuaire mis en place.

Installation d'un autre client


Installation de Samba apt-get install samba Vrifier que le serveur est oprationnel avec les comptes locaux. Installation authentification LDAP apt-get install libpam-ldap libnss-ldap Voici les paramtres fournis lors de l'installation des paquets, pour les options les choix

par dfaut sont laisss : ldap://162.38.134.12:389 dc=cem2,dc=univ-montp2,dc=fr Version de LDAP utiliser 3 Compte LDAP superutilisateur: cn=admin,dc=cem2,dc=univ-montp2,dc=fr Mot de passe de l'administrateur : mot_de_passe Configuration de NSS pour LDAP Le fichier de configuration de libnss-ldap est /etc/libnss-ldap.conf, il a t rempli lors de l'installation des paquets ou avec la commande dpkg-reconfigure libnss-ldap. Il faut maintenant indiquer NSS d'utiliser LDAP pour obtenir des informations. Le fichier /etc/nsswitch.conf n'a pas t modifi, changer les lignes suivantes pour l'authentification: passwd: group: shadow: files ldap files ldap files ldap

/etc/init.d/nscd start si l'installation ne l'a pas lanc, sans cela il ne sera pas possible par la suite un utilisateur contenu dans l'annuaire de s'identifier.. En tapant maintenant getent passwd utilisateur (utilisateur contenu dans l'annuaire LDAP prcdemment cr), nous devrions avoir les informations sur celui-ci. getent passwd donne la liste des comptes utilisateurs dans laquelle apparaissent les comptes crs dans l'annuaire. Si je tape getent passwd arnal j'obtiens: arnal:$1$Z2uny1Nt$ftxSbxUUBJ1Em6qpufXqx1:40198:40200:Stephane ARNAL:/home/arnal: Configuration de PAM pour LDAP PAM va permettre d'authentifier les utilisateurs via LDAP. Comme pour libnss-ldap, les questions poses l'installation ont permis de remplir le fichier /etc/pam_ldap.conf. ATTENTION Une erreur dans la modification des fichiers de configuration de PAM peut entraner limpossibilit de se connecter, mme sous root. Avant de modifier la configuration, il est fortement recommand de se connecter sous une autre console en root pour pouvoir corriger le problme. Les fichiers de configuration d'authentification de PAM se trouvent dans /etc/pam.d. Il y a un fichier par service. Heureusement ces services incluent dans leur fichier de configuration des fichiers communs qui sont /etc/pam.d/common-auth, /etc/pam.d/common-account, /etc/pam.d/common-session et /etc/pam.d/common-passwd. L'ordre d'apparition des lignes est important, required indique que si le rsultat est positif les autres modules seront quand mmes analyss avant de prendre une dcision, sufficient indique qu'un rsultat positif est suffisant pour valider la vrification.

Configuration de common-session # # /etc/pam.d/common-session - session-related modules common to all services # # This file is included from other service-specific PAM config files, # and should contain a list of modules that define tasks to be performed # at the start and end of sessions of *any* kind (both interactive and # non-interactive). The default is pam_unix. # #session required pam_unix.so session required pam_limits.so session optional pam_ldap.so session required pam_mkhomedir.so skel=/etc/skel La ligne contenant pam_mkhomedir.so indique que lors de l'ouverture de la session le rpertoire de l'utilisateur sera cr s'il n'existe pas. Pour cela il est ncessaire d'installer le paquet libpam-mkhomedir, si celui-ci n'a pas t install. apt-get install libpam-mkhomedir Remarque : le rpertoire /etc/skel (rpertoire modle pour la cration des rpertoires) contient les fichiers de configuration tels que .bashrc, .bash-profile, et .bash-logout. Ce sont des copies des fichiers contenus dans le rpertoire courant de l'utilisateur. Configuration de common-password Il suffit de rajouter la ligne suivante au dbut du fichier password sufficient pam_ldap.so # # /etc/pam.d/common-password - password-related modules common to all services # # This file is included from other service-specific PAM config files, # and should contain a list of modules that define the services to be #used to change user passwords. The default is pam_unix # The "nullok" option allows users to change an empty password, else # empty passwords are treated as locked accounts. # # (Add `md5' after the module name to enable MD5 passwords) # # The "obscure" option replaces the old `OBSCURE_CHECKS_ENAB' option in # login.defs. Also the "min" and "max" options enforce the length of the # new password. password sufficient pam_ldap.so password required pam_unix.so nullok obscure min=4 max=8 md5 Configuration de common-account Presque la mme opration, ajouter la ligne suivante au dbut du fichier :

account sufficient

pam_ldap.so

# # /etc/pam.d/common-account - authorization settings common to all services # # This file is included from other service-specific PAM config files, # and should contain a list of the authorization modules that define # the central access policy for use on the system. The default is to # only deny service to users whose accounts are expired in /etc/shadow. # account sufficient pam_ldap.so account required pam_unix.so

Configuration de common-auth Ajouter la ligne suivante au dbut de fichier . auth sufficient pam_ldap.so # # /etc/pam.d/common-auth - authentication settings common to all services # # This file is included from other service-specific PAM config files, # and should contain a list of the authentication modules that define # the central authentication scheme for use on the system # (e.g., /etc/shadow, LDAP, Kerberos, etc.). The default is to use the # traditional Unix authentication mechanisms. # auth sufficient pam_ldap.so auth required pam_unix.so nullok_secure Il est maintenant possible de se connecter via ssh ou en local sur le client avec le compte arnal qui a t ajout dans l'annuaire ldap avec le mme mot de passe que celui utilis sur le serveur. On constate aussi que la cration du rpertoire personnel est faite automatiquement sur le client lors de la premire connexion (avec ssh, et non Samba !). Configuration de Samba Le fichier /etc/pam.d/samba contient les lignes suivantes. Il n'y a donc rien configurer de ce cot l, ces fichiers ont dj t modifis prcdemment. @include common-auth @include common-account @include common-session Aprs l'installation de samba il est ncessaire d'effectuer quelques modifications dans le fichier /etc/samba/smb.conf, comme transformer la ligne passdb backend = tdbsam en passdb backend = ldapsam:ldap://162.38.134.18/ et rajouter les lignes suivantes pour indiquer Samba d'accder la base LDAP. Modifier le fichier /etc/samba/smb.conf comme suit:

# passdb backend = tdbsam passdb backend = ldapsam:ldap://162.38.134.18/ ldap admin dn = cn=admin,dc=cem2,dc=univ-montp2,dc=fr ldap suffix = dc=cem2,dc=univ-montp2,dc=fr #ldap group suffix = ou=Groups ldap user suffix = ou=iesusers #ldap machine suffix = ou=Machines Ne pas oublier de rendre les rpertoires accessibles en criture: [homes] comment = Home Directories # browseable = no browseable = yes # By default, the home directories are exported read-only. Change next # parameter to 'yes' if you want to be able to write to them. # writable = no writable = yes

Il est ncessaire de rentrer ensuite le mot de passe de l'administrateur de la base LDAP pour Samba dans /var/lib/samba/secrets.db, puis de redmarrer samba: smbpasswd -w mot_de_passe /etc/init.d/samba restart Inconvnient, le rpertoire n'est pas directement cr par samba, il suffit donc de crer un script qui s'excutera la connexion de chaque utilisateur. Cration automatique des rpertoires Dans la section [homes] de /etc/samba/smb.conf, ajouter : root preexec = /travail/samba/creation.sh %U
[homes] comment = Home Directories path = /home/%U root preexec = /travail/samba/creation.sh %U browseable = yes writeable= yes

Ensuite crer le fichier /travail/samba/creation.sh #!/bin/bash #!/bin/bash if [ ! -e /home/$1 ]; then mkdir /home/$1 chown $1 /home/$1 chmod 700 /home/$1 fi exit 0

Donner ensuite les droits d'excution chmod +x /travail/samba/creation.sh Il ne reste plus qu' essayer de copier des fichiers sur le serveur samba dont les comptes sont entirement grs par des scripts remplissant l'annuaire ldap.

Restauration du serveur LDAP avec gestion des comptes Samba


Les rpertoires indispensables au fonctionnement d'openldap sont : /etc/ldap et /var/lib/ldap. Mais la solution idale est de faire une sauvegarde rgulire du fichier /etc/ldap/slapd.conf et de l'annuaire par la commande slapcat, pour une procdure plus simple en cas de restauration. Faire une sauvegarde de l'annuaire : slapcat > sauvegarde.ldif Installer les diffrents paquets si ce n'est dj fait : apt-get install slapd ldap-utils samba-doc cp /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz /etc/ldap/schema/ gunzip /etc/ldap/schema/samba.schema.gz Avec ces commandes, les fichiers dcrivant les classes d'objets sont rcuprs puis installs dans le rpertoire /etc/ldap/schema qui contient tous les schmas pour la description des attributs et des classes d'objets. Ajouter dans le fichier /etc/ldap/slapd.conf la ligne suivante : include /etc/ldap/schema/samba.schema # Schema and objectClass definitions include /etc/ldap/schema/core.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/inetorgperson.schema include /etc/ldap/schema/samba.schema

Il est possible de copier tel quel le fichier si les versions d'openldap sont les mmes. En cas de problmes utiliser la commande dpkg-reconfigure slapd en faisant attention au type de base : hdb ou bdb. /etc/init.d/slapd stop pour arrter le service. Editer le fichier sauvegarde.ldif pour supprimer toutes les premires entres principales lies la configuration de l'annuaire. Garder toutes les informations relatives aux branches que vous avez cres. Restaurer votre annuaire avec la commande slapadd < sauvegarde.ldif

/etc/init.d/slapd restart pour prendre en compte les modifications. La commande slapcat permet de vrifier que la base de l'annuaire est valide et bien remplie avec les anciennes valeurs. Remarque : Une copie brute du rpertoire entier /var/lib/ldap peut entraner un mauvais fonctionnement de LDAP et gnrer de nombreuses erreurs qui apparaissent dans le fichier /var/log/syslog. La commande slapcat permet de vrifier que la base de l'annuaire est valide et remplie avec les anciennes valeurs. Test de l'installation La gestion de l'annuaire peut se faire par phpldapadmin si un serveur web est install. apt-get install phpldapadmin Dans un navigateur taper http://adresse_ip_serveur/phpldapadmin Entrer le nom complet de l'administrateur, ici cn=admin,dc=cem2,dc=univmontp2,dc=fr Puis entrer le mot de passe. Si la connexion russit et l'annuaire apparat, l'installation est complte et fonctionnelle. Vrifier malgr tout, cela dans le fichier /var/log/syslog aprs redmarrage de slapd.

Remarques importantes
* Dans le fichier /etc/smb.conf ne pas oublier dans la partie domains l'option domain logons = yes Dans le cas contraire des problmes de SID se poseront. * Attention : Les nouvelles versions de Samba contlent maintenant le champ sambaAcctFlags qui indiquent le comportement du compte. Il est donc ncessaire de rajouter ce champ dans notre base annuaire pour ces versions l ! SambaAcctFlags: [UX] (X indique que le mot de passe n'expire jamais).

Stephane.Arnal@ies.univ-montp2.fr