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...
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
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.
- 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 !
- 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
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.
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).
- 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.