OpenLDAP comme backend pour Samba



LDAP signifie "Lightweight Directory Access Protocol", c'est un protocole pour accéder à un service d'annuaire, c'est-à-dire une application avec :
  • partage des informations (coordonnées d'entités et/ou de personnes, des données système...) ;
  • utilisation d'une base de données spécifique structurée dans une arborescence hiérarchique ;
  • une performance plus grande en consultation qu'un système de gestion de bases de données classiques.

LDAP a pour fonction de gérer des coordonnées, de servir des applications (SMTP, Groupware, etc.) ou pour gérer l'authentification (UNIX, Apache, IMAP, etc.). L'avantage est de gérer la base des utilisateurs Unix et celle des utilisateurs Samba de manière centralisée, sans aprler de la facilité des outils de maintenance si nous utilisons Samba avec LDAP.

LDAP donne la possibilité d'interagir avec Samba grâce à un schéma approprié, c'est le fichier sladp.conf :

Fichier sladp.conf :
include /etc/ldap/schema/samba.schema
index cn pres, sub,eq
index sn pres, sub,eq
index uid pres, sub,eq
index sambaSID eq
index sambaPrimaryGroupSID eq
index sambaDomainName eq
index default sub


Nous pouvons entrer des attributs / renseignements utilisés par Samba qui se retrouvaient dans smbpasswd : UID Windows, GUID Windows, les deux mots de passe Windows, un certain nombre de renseignements qui correspondent aux options shadow de UNIX, par exemple la durée de validité du mot de passe, sa date d'expiration...

Avec un Contrôleur de Domaine, c'est LDAP qui est souvent utilisé pour la gestion des utilisateurs parce que cela facilite les procédures grâce à des outils de maintenance. En effet, il existe plusieurs types d'interfaces pour gérer les utilisateurs depuis LDAP : en PHP, en PERL, en Python, etc. Ces outils permettent d'accéder à LDAP en faisant des opérations automatiques comme ajouter des utilisateurs, les modifier, changer des renseignements, faire des insertions. C'est très bien géré, et même assez facile dans ce cas.

Pour utiliser LDAP, nous modifions le smb.conf comme suit :

passdb backend = ldapsam:ldap:||127.0.0.1
ldap admin dn = "cn=Manager,dc=evolix,dc=net"
ldap suffix = dc=evolix,dc=net
ldap filter = (uid=%u)
ldap delete dn = no
ldap user suffix = ou=People
ldap group suffix = ou=Groups
ldap machine suffix = ou=Computers
ldap passwd sync = yes - - - - - - -> synchronisation entre les mots de passe Unix et Samba
obey pam restrictions = no


La synchronisation implique que si une personne change son mot de passe depuis Windows, cela va également le changer pour Linux. En fait, suite à une demande de changement de mot de passe, Samba convertit le nouveau mot de passe dans les algorithmes appropriés. En effet, le but est de centraliser les utilisateurs et les mots de passe grâce à une interface unifiée, ainsi le changement de mot de passe est répercuté pour la messagerie, le serveur IMAP, le serveur SMTP,... toutes les applications que vous pouvez avoir.

Une fois le fichier de configuration créé, il faut enregistrer le mot de passe de l'administrateur de l'annuaire LDAP (on stocke le mot de passe pour LDAP) :

# smbpasswd -w <pass-bind-LDAP> (motdepassedmin)

Exemple de profil utilisateur dans LDAP, par exemple celui de gcolpart qui est Gregory Colpart, le présentateur de la vidéoconférence sur Samba :


dn: uid=gcolpart,ou=people,dc=evolix,dc=net
uid: gcolpart
shadowMin: 1
shadowMax: 365
shadowWarning: 10
shadowInactive: 10
shadowExpire: 21915
objectClass: shadowAccount
objectClass: inetOrgPerson
objectClass: sambaSamAccount
objetcClass: posixAccount
displayName: Gregory Colpart
givenName: Colpart
sn: Colpart
cn: Gregory Colpart
sambaSID: S-1-5-21-112706504-53005086-128231200-21078 - - - - > prononcer samba-s-aïe-di
sambaLMPassword: F7BA8D4CA54E8524AAD3B435B51404EE
sambaNTPassword: AD8BB03DC2AFBE0696058C27093FF62E
sambaPwdLastSet: 1141759951
sambaKickoffTime: 1893488400
sambaAcctFlags: [XU
sambaHomeDrive: Z:
sambaPrimaryGroupSID: S-1-5-21-112706504-53005086-128231200-513
sambaDomainName: NT_DOMAINE
uidNumber: 10039
gidNumber: 10000
homeDirectory: /home/gcolpart
loginShell: /bin/bash - - - - - - - - - - - - - -> le shell est défini ici
userPassword: [SSHA]xxxxxxx


Donc, nous avons par exemple un réseau Windows et un réseau Linux où nous pourrons nous loguer sur toutes les machines avec le même compte, une situation fréquente dans les universités. Si un utilisateur sous Linux change son shell et que cet utilisateur a les droits de modifier cet attribut (loginShell) au niveau de son entrée (son profil) dans l'annuaire LDAP, ce changement sera répercuté. En effet, si l'utilisateur a les autorisations nécessaires pour changer son mot de passe, rien n'empêche de procéder de la même façon pour changer le shell. Habituellement, c'est un droit réservé à un administrateur, car nous pouvons interdire de changer le shell. On voit bien ici la différence entre LDAP et un fichier /etc/passwd, un tel changement avec /etc/passwd ne serait pas répercuté dans le réseau Windows.