5. Préparation du système pour l'authentification via LDAP (Serveur 2, pdc.martymac.com)

Samba nécessite deux types de comptes : un compte Système, pour pouvoir identifier les utilisateurs, et un compte interne, pour pouvoir les authentifier et disposer d'informations propres au domaine (répertoire home, profils, etc...) qui ne sont pas stockées dans le compte système. Par défaut, sur GNU/Linux, les comptes systèmes utilisés par Samba sont situés dans /etc/passwd et /etc/group. Puisque ceci nous obligerait à avoir deux enregistrements pour un seul utilisateur : un dans /etc/passwd et un dans LDAP, nous allons rediriger les appels systèmes vers notre serveur LDAP. Cette redirection se fait via nsswitch. Ainsi, Samba fera toujours deux appels : un appel système (redirigé vers LDAP) et un appel interne (vers les comptes Samba stockés sous LDAP). Cependant, ceci se fera de manière totalement transparente ; nous ne stockons qu'un seul compte pour chaque utilisateur dans notre annuaire LDAP.

Nous allons également utiliser pam, puisque l'on veut que nos utilisateurs puissent s'authentifier avec leur compte LDAP sous GNU/Linux. Pam va permettre la même redirection que nsswitch, mais cette fois-ci pour l'authentification (nsswitch concerne pour l'identification).

Bien entendu, ces redirections nécessitent l'utilisation d'outils particuliers et une configuration préalable du système, ce que nous allons voir...

5.1. Installation des outils nécessaires à la redirection des comptes

Installation de nscd : Name service cache daemon, fournit un cache pour les requêtes de noms LDAP.
- apt-get install nscd

Installation de libnss-ldap : Permet d'ajouter la gestion de LDAP à nsswitch.
Nsswitch sert d'interface pour la résolution de noms de plusieurs services (les groupes utilisateurs, les noms de machines, etc...). Il permet d'indiquer au système où chercher les informations. Il faut ici le configurer afin d'indiquer à la machine que les utilisateurs et groupes peuvent être situés sur l'annuaire LDAP. Ceci sera utile notamment pour pouvoir effectuer des modifications de droits avec des groupes ou utilisateurs présents dans l'annuaire LDAP (en complétant le pool d'utilisateurs et de groupes déjà présents dans les fichiers /etc/passwd et /etc/group lors d'un chown, chmod, chgrp, getent...).
- apt-get install libnss-ldap

Installation de libpam-ldap : Modules LDAP pour pam
Pam sert à l'authentification des utilisateurs. Il offre aux applications une couche transparente qui permet de gérer, via des modules, n'importe quelle méthode d'authentification (de la carte à puce, aux fichiers passwd, en passant par la biométrie...). Il faut lui indiquer, dans notre cas, d'utiliser l'annuaire LDAP pour s'authentifier sur le système GNU/Linux. Ceci n'est nécessaire que si l'on souhaite pouvoir s'authentifier sur le système GNU/Linux avec les comptes LDAP.
- apt-get install libpam-ldap

5.2. Insertion de l'arborescence de base pour samba dans l'annuaire LDAP

Notre domaine va nécessiter une arborescence de base qui va permettre d'organiser les différents comptes, créons la.

- Création d'un fichier base.ldiff temporaire :

dn: dc=martymac,dc=com
objectClass: domain
dc: martymac

dn: ou=Groups,dc=martymac,dc=com
objectClass: top
objectClass: organizationalUnit
ou: Groups
description: System Groups

dn: ou=Users,dc=martymac,dc=com
objectClass: top
objectClass: organizationalUnit
ou: Users
description: Users of the Organization

dn: ou=Computers,dc=martymac,dc=com
objectClass: top
objectClass: organizationalUnit
ou: Computers
description: Windows Domain Computers

dn: cn=Domain Admins,ou=Groups,dc=martymac,dc=com
objectClass: posixGroup
gidNumber: 200
cn: Domain Admins
memberUid: administrator
description: Windows Domain Users

dn: cn=Domain Users,ou=Groups,dc=martymac,dc=com
objectClass: posixGroup
gidNumber: 201
cn: Domain Users
description: Windows Domain Users

dn: cn=Domain Guests,ou=Groups,dc=martymac,dc=com
objectClass: posixGroup
gidNumber: 202
cn: Domain Guests
description: Windows Domain Guests Users

dn: cn=Administrators,ou=Groups,dc=martymac,dc=com
objectClass: posixGroup
gidNumber: 220
cn: Administrators
description: Administrators

dn: cn=Users,ou=Groups,dc=martymac,dc=com
description: Ordinary users
objectClass: posixGroup
gidNumber: 221
cn: Users
description: Windows Domain Ordinary users

dn: cn=Guests,ou=Groups,dc=martymac,dc=com
objectClass: posixGroup
gidNumber: 222
cn: Guests
memberUid: nobody
description: Guests

dn: cn=Power Users,ou=Groups,dc=martymac,dc=com
objectClass: posixGroup
gidNumber: 223
cn: Power Users
description: Power Users

dn: cn=Account Operators,ou=Groups,dc=martymac,dc=com
objectClass: posixGroup
gidNumber: 224
cn: Account Operators
description: Account Operators

dn: cn=Server Operators,ou=Groups,dc=martymac,dc=com
objectClass: posixGroup
gidNumber: 225
cn: Server Operators
description: Windows Domain Server Operators

dn: cn=Print Operators,ou=Groups,dc=martymac,dc=com
objectClass: posixGroup
gidNumber: 226
cn: Print Operators
description: Windows Domain Print Operators

dn: cn=Backup Operators,ou=Groups,dc=martymac,dc=com
objectClass: posixGroup
gidNumber: 227
cn: Backup Operators
description: Backup Operators

dn: cn=Replicator,ou=Groups,dc=martymac,dc=com
objectClass: posixGroup
gidNumber: 228
cn: Replicator
description: Replicator

- Insertion de cet arbre dans l'annuaire LDAP du Serveur 1 : ldapadd -W -D 'cn=Manager,dc=martymac,dc=com' -f base.ldiff -xh ldap1.martymac.com

LDAP est maintenant prêt à recevoir nos utilisateurs, aussi bien GNU/Linux que Samba. On remarque que l'arbre comprend 3 branches principales : Groups, Users, et Computers, destinées à stocker, respectivement : les Groupes d'utilisateurs, les Utilisateurs (reliés aux groupes via le gid) et les Ordinateurs. Nous avons également quelques groupes standards de domaine à disposition (Domain Users, Domain Guests), bien que Samba ne les exploite pas tous.

Nous allons bientôt pouvoir nous identifier via LDAP : il reste maintenant à configurer notre système pour qu'il utilise notre serveur pour l'authentification.

5.3. Configuration des méthodes d'authentification du Système

5.3.1. Configuration de Nsswitch

- La configuration générale de libnss-ldap se fait via le fichier /etc/ldap/ldap.conf (cf ci-après)

- Il faut tout d'abord modifier le fichier /etc/nsswitch.conf pour qu'il fasse appel à LDAP.
(Un exemple est disponible dans /usr/share/doc/libnss-ldap/examples/nsswitch.ldap)

passwd:         files ldap
group:          files ldap
shadow:         files ldap

hosts:          files dns

services:   ldap [NOTFOUND=return] files
networks:   ldap [NOTFOUND=return] files
protocols:  ldap [NOTFOUND=return] files
rpc:        ldap [NOTFOUND=return] files
ethers:     ldap [NOTFOUND=return] files

netmasks:   files
bootparams: files
publickey:  files
automount:  files

aliases:    files
netgroup:   files nis

Attention pour "hosts" : si vous ajoutez l'annuaire LDAP comme source de données, vous avez de grande chance de tomber sur un problème de récursivité, où le système essaiera de résoudre le nom du serveur LDAP via le serveur LDAP... dont il n'a pas résolu le nom !

5.3.2. Configuration de Pam

- La configuration générale de libpam-ldap se fait via le fichier /etc/ldap/ldap.conf (cf ci-après)

- Modification de /etc/pam.d/system-auth (cf /usr/share/doc/libpam-ldap/examples/pam.conf) :

auth required   /lib/security/pam_env.so
auth sufficient /lib/security/pam_unix.so likeauth nullok
auth sufficient /lib/security/pam_ldap.so use_first_pass
auth required   /lib/security/pam_deny.so

account required /lib/security/pam_unix.so
account sufficient /lib/security/pam_ldap.so

password required /lib/security/pam_cracklib.so retry=3 type=
password sufficient /lib/security/pam_unix.so nullok use_authtok md5 shadow
password sufficient /lib/security/pam_ldap.so use_authtok
password required /lib/security/pam_deny.so
session required /lib/security/pam_limits.so
session required /lib/security/pam_unix.so
session optional /lib/security/pam_ldap.so

- Modification de chaque fichier nécessaire (suivant les besoins) dans /etc/pam.d pour ajouter LDAP à pam (pam_ldap.so). A chaque fichier correspond un service. Exemple avec /etc/pam.d/ssh :
auth       sufficient   pam_ldap.so
auth       required     pam_nologin.so
auth       required     pam_unix.so
auth       required     pam_env.so # [1]

account    sufficient   pam_ldap.so
account    required     pam_unix.so

session    sufficient   pam_ldap.so
session    required     pam_unix.so
session    optional     pam_lastlog.so # [1]
session    optional     pam_motd.so # [1]
session    optional     pam_mail.so standard noenv # [1]
session    required     pam_limits.so

password   sufficient   pam_ldap.so
password   required     pam_unix.so

- Installation du module pam_cracklib.so (si manquant) : apt-get install libpam-cracklib

5.3.3. Configuration générale des librairies libpam-ldap et libnss-ldap

Nsswitch et Pam fon appel à ces deux librairies, il va maintenant falloir les configurer. Le paramétrage se fait via la configuration des outils Ldap, dans le fichier ldap.conf.

- Modification de /etc/ldap/ldap.conf (cf /usr/share/doc/libpam-ldap/examples/ldap.conf) :

BASE    dc=martymac,dc=com
HOST    ldap1.martymac.com
ldap_version 3

nss_base_passwd         dc=martymac,dc=com?sub
nss_base_shadow         dc=martymac,dc=com?sub
nss_base_group          ou=Groups,dc=martymac,dc=com?one

rootbinddn cn=Manager,dc=martymac,dc=com
pam_password md5
ssl no

- Il faut également créer un fichier /etc/ldap.secret : echo "secret" > /etc/ldap.secret, contenant le mot de passe du rootbinddn pour les mises à jour de la base.

5.4. Outils supplémentaires : smbldap-tools

Les smbldap-tools sont des outils développés par idealx permettant de gérer des comptes Samba de manière très simple en lignes de commandes. Nous les utiliserons dans le fichier smb.conf pour ajouter certains comptes automatiquement, mais ils facilitent également le travail quotidien de l'administrateur système.

Installation de smbldap-tools :
- Télécharger smbldap-tools sur idealx (http://samba.idealx.org/dist/smbldap-tools-0.7.tgz)
- Décompresser le tarball : tar xvzf smbldap-tools-0.7.tgz
- Copie des *.pl ds /usr/local/sbin
- Copie des *.pm ds /usr/share/perl/5.6.1 (à modifier suivant votre version de Perl)
- Extraction de mkntpwd
- Editer le Makefile et ajouter au début du fichier : PREFIX=/usr/local (Pour que l'installation se fasse dans $PREFIX/sbin)
- Compilation de mkntpwd : make && make install

Configuration de smbldap-tools :
- Editer le fichier /usr/share/perl/5.6.1/smbldap_conf.pm et spécifier chaque option (n'en oubliez pas !!!)

Modification des smbldap-tools (0.7) :
Il semblerait qu'OpenLDAP, dans les versions récentes, vérifie de manière plus approfondie la hiérarchie des objets utilisés. Lorsqu'on désire ajouter un compte machine (cf. plus loin), smbldap-tools utilise un objet posixAccount, qui n'est pas un objet Structurel ('parent') : il s'agit d'un objet de type Auxiliaire ('fils'), ce qu'il signifie qu'il dépend d'une autre classe qui est ici account. smbldap-tools utilise, dans ses fonctions d'ajout de comptes machines, l'objet posixAccount sans l'objet account, ce qui a pour effet le refus de la part du serveur LDAP d'ajouter l'enregistrement à la base (cf rfc2307 - ceci ne devait pas poser problème avec les versions antérieures de LDAP). Il faut pour ceci modifier les smbldap-tools : Editez /usr/share/perl/5.6.1/smbldap-tools.pm et ajoutez account avant toute utilisation de posixAccount (2 fois dans le fichier).

5.5. Premiers tests de connexion

- Création d'un utilisateur avec smbldap-tools : smbldap-useradd.pl -m testuser1
- Modification de son mot de passe : smbldap-passwd testuser1
- On peut voir si cet utilisateur est bien connu du système : getent passwd
- Test de connexion avec cet utilisateur depuis la machine GNU/Linux : ssh -l testuser1 localhost
(Si vous obtenez un message d'erreur du type : 'Authentication service cannot retrieve authentication info', cela provient certainement de la configuration des fichiers dans /etc/pam.d. Ré-éditez ces fichiers pour ajouter le module pam_ldap.so).
- Listing de l'utilisateur : ldapsearch -b 'dc=martymac,dc=com' -xh ldap1.martymac.com
- Suppression du user : smbldap-userdel testuser1 et effacement de son répertoire home créé sur le disque

A ce stade, nous pouvons nous authentifier sur le système via LDAP, il nous reste à configurer Samba.