J'ai choisi d'intégrer l'installation et le paramétrage d'Openldap dans cette procédure au lieu de faire un chapitre à part, car l'utilisation des smbldap tools présentée plus loin permet en une seule commande de créer un utilisateur système + samba + ldap . Samba, LDAP et la gestion des utilisateurs système sont donc intimement liés.

Installation de linux debian 5 (Lenny)

Ici, on part du principe que Linux Debian Lenny est déjà installé. Néanmois, on commence par reconfigurer debconf pour que le niveau des questions qu'il pose à l'installation des paquets soit positionné sur Intermédiaire.

Configuration de Debconf

monserveur:~# dpkg-reconfigure debconf

Répondre aux questions suivants :

Interface à utiliser : Dialogue
Ignorer les questions de priorité inférieurs à :
Intermédiaire

Installation de openldap

Installation des paquets

monserveur:~# aptitude install slapd ldap-utils ldapvi

Répondre aux questions suivantes :

Faut il omettre la configuration d'OpenLDAP ? Non
Nom de domaine :
antiseches.net
Nom de votre organisation :
antiseches.net
Mot de passe administrateur : ********
Faut-il autoriser le protocole LDAPv2 :
Non

Note importante: le mot de passe entré ici correspond à l'utilisateur cn=admin,dc=antiseches,dc=net. Cet utilisateur est différent du superutilisateur qui sera déclaré dans le fichier de configuration /etc/ldap/slapd.conf. Cependant pour éviter les confusions, on veillera à prendre toujours le même mot de passe.

Configuration de base du serveur LDAP

On génère le mot de passe crypté pour le compte d’administration de slapd (celui de /etc/ldap/slapd.conf). La sortie sera à coller dans le fichier de configuration :

monserveur:~# slappasswd
New password:
********
Re-enter new password:
********
{SSHA}Y4m58WY9h057RZ2UbcAbW1wsT0C84jG4

Note : le mot de passe à générer doit être le même que celui qui a été rentré précédement.

Maintenenant, il faut éditer le fichier de configuration /etc/ldap/slapd.conf et vérifier ou corriger les lignes suivantes :

Paramètres de domaine (le mot de passe rootpw est celui de la commande slappasswd)

suffix "dc=antiseches,dc=net"
rootdn "cn=admin,dc=antiseches,dc=net"
rootpw {SSHA}Y4m58WY9h057RZ2UbcAbW1wsT0C84jG4

Backend de base de données

moduleload back_hdb
backend hdb
database hdb

Restrictions d'accés à certains attributs

access to attrs=userPassword,shadowLastChange
    by dn="cn=admin,dc=antiseches,dc=net" write
    by anonymous auth
    by self write
    by * none
#
access to dn.base="" by * read
#
access to *
    by dn="cn=admin,dc=antiseches,dc=net" write
    by * read

Optionnel : pour que le serveur slapd démarre en ne prenant en compte que TCP/IP v4, on rajoute la ligne suivante dans le fichier /etc/default/slapd

SLAPD_OPTIONS="-4"

Note annuaire est maintenant installé. Pour l'instant il est vide et ne sert pas à grand chose. On peut néanmoins vérifier qu'il fonctionne en se connectant avec un client LDAP comme LDAP Browser/Editor. C'est un client LDAP développé en Java par Jarek Gawor qui fonctionne trés bien sur plateformes Windows, MacOSX et Linux. On peut également utiliser ldapvi que l'on a installé plus haut et qui est une interface à la mode "vi" pour lire et éditer le contenu de la base LDAP.

Installation de Samba

L'une des utilisation d'un home serveur doit être de pouvoir partager des fichiers ou de sauvegarder des données sur un disque réseau. Pour ce faire, nous allons installer Samba, puis nous créerons des zones de stockages privées et publiques.

Modification du schéma LDAP

Nous allons installer Samba de telle sorte que l'authentification des ressources s'appuie sur l'annuaire LDAP précédement installé. On va donc commencer par modifier le schéma LDAP pour qu'il intègre Samba. Pour ce faire, on utilise l'exemple fournit avec la documentation Samba. On l'installe sur notre système puis on l'intégre au système :

monserveur:~# aptitude install samba-doc
monserveur:~# gunzip -c /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz > /etc/ldap/schema/samba.schema

On édite ensuite le fichier de configuration /etc/ldap/slapd.conf pour qu'il prenne en charge ce nouveau schéma :

monserveur:~# vi /etc/ldap/slapd.conf

On rajoute la ligne qui contient samba.schema à la fin de la série des "include" :

# 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

C'est fait. Pour terminer, on redémarre le service LDAP :

monserveur:~# /etc/init.d/slapd restart

Installation des paquets samba

monserveur:~# aptitude install samba smbclient smbfs smbldap-tools

Répondre aux questions suivantes :

Nom du domaine ou groupe de travail : ANTISECHES
Voulez vous chiffrer les mots de passe :
Oui
Modifier smb.conf pour utiliser les paramètres WINS fournis par DHCP :
Non
Comment voulez-vous lancer Samba :
Démon
Faut-il créer une base de données /var/lib/samba/passdb.tdb :
Non (voir note ci dessous)

Note : si on répond Oui à la dernière question, le programme d'installation de Samba va importer tous les comptes locaux déjà présent dans /etc/passwd. Ca inclut les comptes comme root, daemon, nobody, www-data, game, etc. Sur un serveur fraichement installé, il vaut mieux répondre Non. On pourra les rajouter à la main plus tard en cas de besoin.

Une fois l'installation terminée, on arrête samba car on n'a pas terminé la configuration.

monserveur:~# /etc/init.d/samba stop

Configuration de Samba

Il faut maintenant configurer Samba pour qu'il intègre LDAP et les outils SMBLDAP que l'on installera dans la foulée. Un fichier de configuration /etc/samba/smb.conf est déjà présent, mais il n'est pas trés lisible car il contient beaucoup de zones de commentaire.Un fichier de départ lisible, c'est à dire débarassé de tous ses commentaires peut être obtenu de la façon suivante :

monserveur:~# cp /etc/samba/smb.conf /etc/samba/smb.conf.master
monserveur:~# testparm -s /etc/samba/smb.conf.master > /etc/samba/smb.conf

Maintenant qu'il est créé, on le modifie pour qu'il ressemble à ceci :

monserveur:~# vi /etc/samba/smb.conf

[global
workgroup = ANTISECHES
server string = Server de fichiers
netbios name = monserveur
domain master = yes
local master = yes
domain logons = yes
# On met security = user pour un controleur de domaine
# domain pour un serveur membre
# share pour un serveur stand alone
security = user
os level = 40
ldap passwd sync = yes
passdb backend = ldapsam:ldap://127.0.0.1/
ldap admin dn = cn=admin,dc=antiseches,dc=net
ldap suffix = dc=antiseches,dc=net
ldap group suffix = ou=Groups
ldap user suffix = ou=Users
ldap machine suffix = ou=Machines
add user script = /usr/sbin/smbldap-useradd -m "%u"
ldap delete dn = yes
delete user script = /usr/sbin/smbldap-userdel "%u"
add machine script = /usr/sbin/smbldap-useradd -w "%u"
add group script = /usr/sbin/smbldap-groupadd -p "%g"
#delete group script = /usr/sbin/smbldap-groupdel "%g"
add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g"
delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g"
set primary group script = /usr/sbin/smbldap-usermod -g "%g" "%u"
logon path = \\%L\profiles\%U
logon drive = P:
logon home = \\%L\%U
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
case sensitive = No
default case = lower
preserve case = yes
short preserve case = Yes
#character set = iso8859-1
#domain admin group = @admin
dns proxy = No
wins support = Yes
hosts allow = 192.168.129. 127.
winbind use default domain = Yes
nt acl support = Yes
msdfs root = Yes
hide files = /desktop.ini/ntuser.ini/NTUSER.*/
# autre possibilité : "veto files = "
#
# Reglage de l'encodage des caracteres :
unix charset = iso-8859-15
display charset = iso-8859-15
dos charset = 850
#
[netlogon]
path = /home/samba/netlogon
writable = No
browseable = No
write list = Administrateur
#
[profiles]
path = /home/samba/profiles
browseable = No
writeable = Yes
profile acls = yes
create mask = 0700
directory mask = 0700
#
[homes]
comment = Repertoire Personnel
browseable = No
writeable = Yes
#
[partage]
comment = Repertoire commun
browseable = Yes
writeable = Yes
public = No
path = /home/partage
#
[printers]
comment = All Printers
path = /var/spool/samba
create mask = 0700
printable = Yes
browseable = No
#
[print$]
comment = Printer Drivers
path = /var/lib/samba/printers

Il faut ensuite créer les répertoires nécessaires à la bonne exécution de samba et leur donner les droits nécesaires :

monserveur:~# mkdir /home/samba/netlogon
monserveur:~# mkdir /home/samba/profiles && chmod -R 777 /home/samba/profiles
monserveur:~# mkdir /home/partage

Les répertoires utilisateurs seront créés en même temps que la créations des comptes.

Samba doit connaître le mot de passe administrateur du serveur slapd pour l’administration LDAP. Ca lui donnera l'autorisation de créer, supprimer, modifier des entrées pour les comptes utilisateurs, groupes et machines. La commande suivante permet de le faire:

monserveur:~# smbpasswd -w 'mot_de_passe'
Setting stored password for "cn=admin,dc=antiseches,dc=net" in secrets.tdb

Le fichier secrets.tdb se trouve dans le répertoire /var/lib/samba.

Configuration de smbldap-tools

Ces outils sont des scripts perl qui permettront de créer les utilisateurs POSIX, Samba et LDAP de manière automatisée.

La configuration des outils smbldap se fait par l'intermédiaire des 2 fichiers de configurations : smbldap.conf et smbldap_bind.conf qui se trouvent dans /etc/smbldap-tools :

Les outils smbldap vont utiliser le fichier /etc/smbldap-tools/smbldap_bind.conf pour s’authentifier auprès du serveur LDAP.

monserveur:~# vi /etc/smbldap-tools/smbldap_bind.conf

masterDN="cn=admin,dc=antiseches,dc=net"
masterPw="mot_de_passe"
slaveDN="cn=admin,dc=antiseches,dc=net"
slavePw="mot_de_passe"

Note : dans ce fichier, le mot de passe apparait en clair, il faut donc restreindre son droit d'utilisation :

monserveur:~# chmod 600 /etc/smbldap-tools/smbldap_bind.conf

Il faut maintenant déterminer le SID du domaine et le renseigner dans le fichier /etc/smblsap/smbldap.conf

monserveur:~# net getlocalsid
SID for domain monserveur is: S-1-5-21-906464913-1234567890-391352000

Il faut également éditer le fichier /etc/smbldap-tools/smbldap.conf pour qu’il corresponde à notre configuration :

monserveur:~# vi /etc/smbldap-tools/smbldap.conf

SID="S-1-5-21-906464913-1234567890-391352000"
masterLDAP="127.0.0.1"
masterPort="389"
slaveLDAP="127.0.0.1"
slavePort="389"
ldapTLS="0"
verify="require"
suffix="dc=antiseches,dc=net"
usersdn="ou=Users,${suffix}"
computersdn="ou=Machines,${suffix}"
groupsdn="ou=Groups,${suffix}"
idmapdn="ou=Idmap,${suffix}"
# La ligne ci-dessous est commentee pour eviter une erreur lors de
# l'execution de la commande smbldap-populate.
# sambaUnixIdPooldn="cn=NextFreeUnixId,${suffix}"
scope="sub"
hash_encrypt="SSHA"
crypt_salt_format="%s"
userLoginShell="/bin/bash"
userHome="/home/%U"
userHomeDirectoryMode="700"
#Nom d'affichage - utiliser smbldap-useradd -c
userGecos="User"
defaultUserGid="513"
defaultComputerGid="515"
skeletonDir="/etc/skel"
#Les mots de passe expirent dans 10ans
defaultMaxPasswordAge="3650"
with_smbpasswd="0"
smbpasswd="/usr/bin/smbpasswd"
with_slappasswd="0"
slappasswd="/usr/sbin/slappasswd"
# mk_ntpasswd="/usr/local/sbin/mkntpwd"

Création de l'arbre LDAP

Il est maintenant temps de créer l'arbre LDAP de base pour Samba. On va le faire en utilisant le script smbldap-populate :

monserveur:~# smbldap-populate

Populating LDAP directory for domain ANTISECHES (S-1-5-21-906464913-1234567890-391352000)
(using builtin directory structure)
entry dc=antiseches,dc=net already exist.
adding new entry: ou=Users,dc=antiseches,dc=net
adding new entry: ou=Groups,dc=antiseches,dc=net
adding new entry: ou=Computers,dc=antiseches,dc=net
adding new entry: ou=Idmap,dc=antiseches,dc=net
adding new entry: uid=root,ou=Users,dc=antiseches,dc=net
adding new entry: uid=nobody,ou=Users,dc=antiseches,dc=net
adding new entry: cn=Domain Admins,ou=Groups,dc=antiseches,dc=net
adding new entry: cn=Domain Users,ou=Groups,dc=antiseches,dc=net
adding new entry: cn=Domain Guests,ou=Groups,dc=antiseches,dc=net
adding new entry: cn=Domain Computers,ou=Groups,dc=antiseches,dc=net
adding new entry: cn=Administrators,ou=Groups,dc=antiseches,dc=net
adding new entry: cn=Account Operators,ou=Groups,dc=antiseches,dc=net
adding new entry: cn=Print Operators,ou=Groups,dc=antiseches,dc=net
adding new entry: cn=Backup Operators,ou=Groups,dc=antiseches,dc=net
adding new entry: cn=Replicators,ou=Groups,dc=antiseches,dc=net
entry sambaDomainName=ANTISECHES,dc=antiseches,dc=net already exist. Updating it...
Please provide a password for the domain root:
Changing UNIX and samba passwords for root
New password: ********
Retype new password: ********

Notes :
- Le mot de passe à entrer est toujours le même
- Par défaut, l'administrateur du domaine ne sera pas Administrateur comme sous Windows, mais root. Si on veut que l'administrateur soit Administrateur, il faut lancer la commande avec le paramètre -a :

monserveur:~# smbldap-populate -a Administrateur

L'arbre du serveur LDAP est maintenant créé. Pour le visualiser, on peut utiliser une interface graphique en java : LDAP Browser/Editor. On peut également utiliser la commande slapcat ou ldapvi.

Gestion des utilisateurs

Création d'un utilisateur

Maintenant que la base est installée, on peut commencer à créer des utilisateurs avec les scripts smbldap-tools.

Pour créer un utilisateur :

monserveur:~# smbldap-useradd -a -c "Remi TAUPIN" -m -P rtaupin
Changing UNIX and samba passwords for rtaupin
New password: ********
Retype new password: ********

-a : D ésigne l'utilisateur Windows
-c : Le champ Gecos de l'utilisateur (un commentaire qui est souvent le nom de l'utilisateur)
-m : Crée le répertoire de base de l'utilisateur et copie le contenu de /etc/skel/
-P : Demande la mot de passe qui sera attribué à l'utilisateur en appelant smbldap-passwd

On vérifie avec LDAP Browser que le compte soit bien créé dans l'OU Users, puis on vérifie également que le répertoire de base de l'utilsateur soit bien créé :

monserveur:~# ls -al /home
drwx------  2 rtaupin Domain Users 4096 2007-04-18 07:13 rtaupin

On vérifie maintenant que le compte Samba existe :

monserveur:~# smbldap-usershow rtaupin

dn: uid=rtaupin,ou=Users,dc=antiseches,dc=net
objectClass: top,person,organizationalPerson,inetOrgPerson,posixAccount,shadowAccount,sambaSamAccount
cn: rtaupin
sn: rtaupin
givenName: rtaupin
uid: rtaupin
uidNumber: 1000
gidNumber: 513
homeDirectory: /home/rtaupin
loginShell: /bin/bash
gecos: Remi TAUPIN
sambaLogonTime: 0
sambaLogoffTime: 2147483647
sambaKickoffTime: 2147483647
sambaPwdCanChange: 0
displayName: Remi TAUPIN
sambaSID: S-1-5-21-906464913-1234567890-391352000-3000
sambaPrimaryGroupSID: S-1-5-21-906464913-1234567890-391352000-513
sambaLMPassword: 54B53DA495E9EBAAECD3B435B51404EE
sambaAcctFlags: [U]
sambaNTPassword: BFAD8787F5AB64B735528C20A64EFA94
sambaPwdLastSet: 1194016271
sambaPwdMustChange: 1509376271
userPassword: {SSHA}airX8WBHwDUGBLxbpboOFA0X+mYueUEz

Si on utilise la commande pdbedit pour lister les comptes présents, il est possible que la sortie présente un message d'erreur au niveau du Primary Group SID :

monserveur:~# pdbedit -vL
Unix username:        rtaupin
NT username:          rtaupin
Account Flags:        [U          ]
User SID:             S-1-5-21-906464913-1234567890-391352000-3000
--- >>> pdb_get_group_sid: Failed to find Unix account for rtaupin
--- >>> Primary Group SID: (NULL SID)
Home Directory:       \\monserveur\rtaupin
HomeDir Drive:        H:
Logon Script:         logon.bat
Profile Path:         \\monserveur\profiles\rtaupin
Domain:               ANTISECHES
Account desc:
Workstations:
Munged dial:
Logon time:           0
Logoff time:          mar, 19 jan 2038 04:14:07 CET
Kickoff time:         mar, 19 jan 2038 04:14:07 CET
Password last set:    mer, 18 avr 2007 07:11:01 CEST
Password can change:  0
Password must change: sam, 02 jun 2007 07:11:01 CEST
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

Cette erreur sera corrigée plus tard quand on aura installé et configuré la librairie libnss-ldap

Par contre, si on regarde dans le fichier /etc/passwd, on s'apercoit que l'utilisateur que l'on vient de créer n'y est pas. C'est LDAP qui gére les utilisateurs.

A ce stade, bien que le compte Unix soit créé on ne peut pas l'utiliser car le système ne le reconnait pas encore. Un su - rtaupin donnerait le message d'erreur suivant :

monserveur:~# su - rtaupin
identifiant inconnu : rtaupin

De même, une tentative de connexion à un répertoire partagé sur le serveur samba se solderai par un echec.

Supprimer d'un utilisateur :

La commande pour supprimer un compte d'utilisateur est dans la même logique :

monserveur:~# smbldap-userdel –r rtaupin

L'utilisateur n'est plus dans la base LDAP, et son répertoire de base a disparu.

Configuration de linux pour une authentification par LDAP

Nous allons configurer linux pour que les utilisateurs puissent s'authentifier grâce à l'annuaire LDAP. La première étape va être d'installer et de configurer une librairie qui permet d'utiliser l'annuaire (libnss-ldap), puis une deuxième librairie qui permettra à pam.d de s'appuyer sur LDAP (pam_ldap) pour l'authentification.

Installation des librairies libnss-ldap et libpam-ldap

monserveur:~# aptitude install libnss-ldap libpam-ldap nscd

Répondre aux questions posées par les programmes d'installation :

Configuration de libnss-ldap :

URI du serveur ldap : ldap://127.0.0.1
Nom distinctif (DN) de la base de recherche : dc=antiseches,dc=net
Version de LDAP à utiliser : 3
La base LDAP demande-t-elle une identification : non
Privilèges LDAP spécifiques pour le superutilisateur : oui
Rendre le fichier de configuration lisible et modifiable uniquement par son propriètaire : oui
Compte LDAP pour le superutilisateur (« root ») : cn=admin,dc=antiseches,dc=net
Mot de passe du compte du superutilisateur LDAP : ********

Configuration de libpam-ldap :

Le superutilisateur local doit-il être un administrateur de la base LDAP ? Oui
Faut-il créer une base de données locale pour l'administrateur :
oui
La base LDAP demande-t-elle une identification : non
Compte LDAP pour le superutilisateur (« root ») : cn=admin,dc=antiseches,dc=net
Mot de passe du compte du superutilisateur LDAP : ********
Méthode de chiffrement pour les changements de mots de passe  : chiffré

Maintenant que l'installation est faite, il faut vérifier le contenu des fichiers de configuration.

Vérifier le contenu du fichier de configuration /etc/libnss-ldap.conf pour être certain qu'il ressemble à çà :

# Emplacement du serveur
# host 127.0.0.1
uri ldap://127.0.0.1/
port 389
#
# Racine de l'annuaire
base dc=antiseches,dc=net
#
# Version du protocole a utiliser
ldap_version 3
#
# Superutilisateur. Note : le mot de passe se trouve en clair
# dans le fichier /etc/libnss-ldap.secret
rootbinddn cn=admin,dc=antiseches,dc=net
#
# Peut eviter un bloquage au boot si le serveur LDAP est down et qu'un process le sollicite
bind_policy soft
#
# Portee de la recherche par defaut
# scope sub
#
# Emplacement des comptes
# nss_base_passwd dc=antiseches,dc=net?sub
# nss_base_group ou=groups,dc=antiseches,dc=net?one

Vérifier le contenu du fichier de configuration /etc/pam_ldap.conf pour vérifier qu'il ressemble à ceci :

# Emplacement du serveur
# host 127.0.0.1
uri ldap://127.0.0.1/
port 389
#
# Racine de l'annuaire
base dc=antiseches,dc=net
#
# Version du protocole a utiliser
ldap_version 3
#
# Superutilisateur. Note : le mot de passe se trouve en clair
# dans le fichier /etc/pam_ldap.secret
rootbinddn cn=admin,dc=antiseches,dc=net
#
pam_password crypt
#
# Portee de la recherche par defaut
# scope sub
#
# Emplacement des comptes
# nss_base_passwd dc=antiseches,dc=net?sub
# nss_base_group ou=groups,dc=antiseches,dc=net?one

Pour plus de sécurité, les fichiers /etc/libnss-ldap.* et /etc/pam_ldap.* doivent être en chmod 600 :

monserveur:~# chmod 600 /etc/libnss-ldap.*
monserveur:~# ls -al /etc/libnss-ldap.*
-rw------- 1 root root 468 2007-04-11 13:16 /etc/libnss-ldap.conf
-rw------- 1 root root 7 2007-04-11 12:55 /etc/libnss-ldap.secret
monserveur:~#
chmod 600 /etc/pam_ldap.*
monserveur:~# ls -al /etc/pam_ldap.*
-rw------- 1 root root 468 2007-04-11 13:16 /etc/pam_ldap.conf
-rw------- 1 root root 7 2007-04-11 12:55 /etc/pam_ldap.secret

Maintenant que les librairies sont configurées, on doit activer la recherche LDAP en modifiant le fichier de configuration /etc/nsswitch.conf pour que les lignes passwd, group et shadow ressemblent à ceci :

passwd: compat ldap
group: compat ldap
shadow: compat ldap

Il faut aussi modifier 4 fichiers présents dans /etc/pam.d pour leur ajouter la prise en charge du module pam_ldap.so au début des lignes :

Dans le fichier /etc/pam.d/common-account, modifier les lignes suivantes :

account sufficient pam_ldap.so
account required pam_unix.so try_first_pass

Dans le fichier /etc/pam.d/common-auth, modifier les lignes suivantes :

auth sufficient pam_ldap.so
auth required pam_unix.so nullok_secure use_first_pass

Dans le fichier /etc/pam.d/common-password, modifier les lignes suivantes :

password sufficient pam_ldap.so
password required pam_unix.so nullok obscure min=4 max=8 md5 use_first_pass

Dans le fichier /etc/pam.d/common-session, ajouter la ligne suivante :

session required pam_unix.so
session optional pam_ldap.so

Notes :
- la directive use_first_pass du fichier /etc/pam.d/common-auth permet au système de demande le mot de passe une seule fois.
- la directive use_authok du fichier /etc/pam.d/common-password est identique à use_first_pass mais pour passwd.
Les explications détaillées de ces paramètes sont dans man pam_ldap

Enfin, il suffit de rajouter les lignes suivantes dans chaques fichiers qui se trouvent dans /etc/pam.d pour que les serveurs correspondants (ssh, ftpd, etc) utilisent l'authentification LDAP :

@include common-account
@include common-session
@include common-password
@include common-auth

On redémarre le serveur :

monserveur:~# reboot

Nous avons maintenant la situation suivante :

- le compte POSIX rtaupin et le groupe Users sont créés dans les bases LDAP et Samba par la commande smbldap-useradd
- l'utilisateur rtaupin n'est pas listé dans les fichiers /etc/passwd et /etc/shadow
- le groupe Users n'apparait pas dans le fichier /etc/groups

De plus, il est interessant de noter que si on retape la commande pdbedit -vL, le système ne renvoie plus de messages d'erreur au sujet du GID des utilisateurs :

monserveur:~# pdbedit -vL

.....
Unix username: rtaupin
NT username: rtaupin
Account Flags: [U ]
User SID: S-1-5-21-1015146449-1234567890-1166735929-3000
Primary Group SID: S-1-5-21-1015146449-1234567890-1166735929-513
Full Name: Remi TAUPIN
Home Directory: \\monserveur\rtaupin
HomeDir Drive: P:
Logon Script:
Profile Path: \\monserveur\profiles\rtaupin
Domain: ANTISECHES
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: mar, 19 jan 2038 04:14:07 CET
Kickoff time: mar, 19 jan 2038 04:14:07 CET
Password last set: ven, 02 nov 2007 16:11:11 CET
Password can change: 0
Password must change: lun, 30 oct 2017 16:11:11 CET
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

Tests de connexion au serveur

Avant toutes choses, on redémarre le serveur pour être certain que tous les services soient bien démarrés et à jour.

monserveur:~# reboot

Ouverture d'une session en local

Il est maintenant possible de se connecter sur le serveur en utilisant le compte rtaupin :

monserveur login : rtaupin
Password : ********
rtaupin@monserveur:~$

Si on voit apparaitre I have no name! à la place du nom de l'utilisateur, c'est que le paquets nscd n'a pas été installé comme ca aurait dû être le cas lorsqu'on a installé la librairie libnss-pam. La commande aptitude install nscd et un reboot devrait résoudre le problème.

A propos de root

Comme les utilisateurs sont gérés par LDAP, leurs mots de passe sont stockés dans sa base. Par contre, root possède 2 mots de passe :

- le mot de passe stocké dans la base LDAP
- le mot de passe local stocké dans /etc/passwd et/ou /etc/shadow

Si root veut se connecter sur le serveur, il peut donc utiliser l'un ou l'autre des mots de passe, ce qui est pratique pour accéder au système si le serveur LDAP ne répond plus.

Voici la sortie du journal de log /var/log/auth.log dans les 2 cas de figure :

Si on saisie le mot de passe local de /etc/passwd

monserveur login : root
Password : ********

root@monserveur:~$

Sortie de /var/log/auth.log :

monserveur login[2375]: pam_ldap: error trying to bind as user "uid=root,ou=Users,dc=antiseches,dc=net" (Invalid credentials)
monserveur login[2375]: (pam_unix) session opened for user root by (uid=0)
monserveur login[2383]: ROOT LOGIN on 'tty1'

Si on saisie le mot de passe LDAP

monserveur login : root
Password : ********

root@monserveur:~$

Sortie de /var/log/auth.log :

monserveur login[2396]: (pam_unix) session opened for user root by (uid=0)
monserveur login[2406]: ROOT LOGIN on 'tty1'

Le système commence par tester le mot de passe de la base LDAP, et s'il est faux il essaye celui de la base locale. C'est pour cette raison que dans le premier cas, on voit apparaitre Invalid credentials dans le journal de log /var/log/auth.log.

Remarques et résolution de problèmes

Gestion des utilisateurs et mots de passe

Si on veut gérer les comptes en mode texte, il faudra bien veiller à utiliser les commandes smbldap-xxxxx à la place des commandes classiques useradd, passwd, userdel, smbpasswd et autres. En effet ce sont elles qui vont permettre une parfaite synchronisation entre les comptes et mots de passe POSIX, Samba et LDAP. Si on utilise les commandes classiques, on risque d'avoir un message d'erreur ou de changer les parametres POSIX mais pas Samba ou LDAP, ou inversement.

Problèmes rencontrés au cours de l'installation

I have no name!

Ce message apparait quand le système n'arrive pas à trouver le nom de l'utilsateur qui se connecte en ligne de commande. Pour le résoudre, il faut installer le paquet nscd :

monserveur login : rtaupin
Password : ********
I have no name!@monserveur:~$
monserveur:~#
sudo aptitude install nscd
monserveur:~# reboot
monserveur login : rtaupin
Password : ********
rtaupin@monserveur:~$

Erreur pdbedit -vL

Cette erreur arrive quand on tape la commande pdbedit pour voir la liste des utilisateurs et que libnss-ldap n'est pas encore installé.

monserveur:~# pdbedit -vL
...
db-getgroup_sid : Failed...

Elle se corrige toute seule aprés l'installation de la librairie libnss-ldap.

Erreur nss_ldap dans les logs

monserveur:~# cat /var/log/auth.log

monserveur slapd[1973]: nss_ldap: could not connect to any LDAP server as cn=admin,dc=antiseches,dc=net - Can't contact LDAP server
monserveur slapd[1973]: nss_ldap: failed to bind to LDAP server ldap://127.0.0.1/: Can't contact LDAP server
monserveur slapd[1973]: nss_ldap: could not search LDAP server - Server is unavailable

Ces messages d'erreurs s'inscrivent au démarrage dans /var/log/auth.log. Il semble que durant la phase de boot, un processus essaie d'accéder au serveur LDAP avant que celui-ci ne soit lancé. Une fois la phase de boot terminée, ce message n'apparait plus dans les logs et le système fonctionne correctement.

Erreur pam_ldap

error trying to bind as user...

Le mot de passe rootdn inscrit dans un des fichiers de configuration (pam_ldap.secret, etc.) n'est pas bon. Il faut soit le corriger, soit configurer le système pour une interrogation de l'annuaire LDAP en mode anonyme.

Problème de création de profile

Quand l'utilisateur ouvre une session sur sa machine Windows pour se connecter au domaine Samba, la session s'ouvre mais le message suivant apparait :

Windows ne peut pas trouver le profil local et tente de vous connecter avec un profil temporaire. Les modifications effectuées à ce profil seront perdues lorsque vous vous déconnecterez.

Cause probable : le répertoire /home/samba/profiles n'est pas correct. Soit il n'a pas la même orthographe que celui défini dans smb.conf, soit il n'a pas les bons droits d'éxécution. Vérifier qu'il sont en chmod 777 pour que la machine windows puisse y écrire dedans.

Erreur d'ouverture de session

Quand l'utilisateur tente d'ouvrir un session sur le domaine depuis sa machine Windows, le message d'erreur suivant apparait :

Windows ne peut pas se connecter au domaine, car le controleur de domaine ne fonctionne pas, est indisponible, ou votre compte d'ordinateur n'a pas été trouvé...

Cause probable : mauvaise diffusion wins, et le client windows ne trouve pas le serveur sur le réseau. Ca peut arriver si le serveur est en DHCP, si le client et le serveur ne sont pas sur le même plan d'adresse IP (cas d'un VPN) ou si une autre machine a le même nom que le serveur, ce qui bien entendu ne devrait pas se produire. Pour régler ca, il faut renseigner le fichier c:\windows\system32\drivers\etc\lmhosts.sam et rajouter la ligne suivante à la fin :

192.168.129.140 monserveur #PRE #DOM:ANTISECHES

La syntaxe de cette ligne est :

adresse_ip nom_du_pdc #PRE #DOM:nom_du_domaine

Ensuite, on renomme le fichier lmhosts.sam en lmhosts et on relance le client. Ca devrait fonctionner.

Sources

La rédaction de ce tutoriel samba ldap m'a pris beaucoup de temps en recherche, notes, tests, plantages, re-tests, etc, et pour finir ca marche ! Voici une selection des sites qui m'ont beaucoup aidé :

L'admin Debian http://damstux.free.fr/
Le site de Martymac. Trés interessant également : http://contribs.martymac.com/
Un tuto Samba 2.2 / LDAP, créé pour une Debian Sarge : http://www.supinfo-projects.com/en/2003/sambaldap/0/
Un tuto Samba 3.0 / LDAP, créé pour une Debian Woody : http://cj.tronquet.free.fr/doc/samba3ldap.php
Un bon tuto sur Samba, mais sans LDAP : http://www.gcolpart.com/howto/samba.php4
Un documentation sur LDAP et son utilisation : http://www-id.imag.fr/~svarrett/download/polys/Tutorial_LDAP_HTML/node1.html
La mise en place d'un serveur d'authentification basé sur LDAP : http://julp.developpez.com/freebsd/authentification-ldap/
Une doc en anglais assez "ancienne" mais pleine de détails techniques : http://www.unav.es/cti/ldap-smb/smb-ldap-3-howto.html