Comptes ldap (4)
Niveau :
Résumé :
Suite de la formidable série :
Et après les comptes ?
Il est aussi possible d’utiliser libnss-ldap pour autre chose que pour les comptes utilisateurs. La bibliothèque NSS étant une bibliothèque générique de résolution de nom, il est possible d’utiliser le ldap pour :
- les groupes (attention pas de login pour newrp à travers pam de prévu)
- les noms de machine
- et d’autres qui ne pas très intéressants pour l’instant …
Pour cela, rien de plus facile, tout est déjà fait, il suffit de modifier la ligne correspondante dans /etc/nsswitch.conf et de commencer à peupler le LDAP.
Un groupe est définit comme suit :
objectClass: posixGroup cn: mongroupe description: goupe a moi gidNumber: 1000 memberUid: peck memberUid: amiami
Notez que la description est optionnelle et que les membres sont décrits par uid. Le userPassword est aussi disponible mais n’est pas utilisable actuellement pour les groupes du système.
Exemple de machine (plus besoin de DNS local ;-) :
objectClass: ipHost cn: mamachine ipNetworkNumber: 1.2.3.4
S’adapter à l’existant
Il est possible que vous ayez à gérer un serveur ldap existant avec ses comptes et son propre schéma (active directory ?). C’est pourquoi il existe des options de mapping dans la configuration de pam_ldap et nss_ldap.
Ces options sont assez simples, il s’agit de reparcourir votre schéma et pour chaque entrée nécessaire pour le système, expliquer au fichier de configuration quel est le nom de l’attribut ou de la classe que vous utilisez sur le ldap. Ceci est à faire une fois pour nss et une fois pour pam.
Les commandes sont :
- nss_map_objectclass : changer une classe utilisée par libnss-ldap
- nss_map_attribute : changer un attribut utilisé par libnss-ldap
- nss_default_attribute_value : donner une valeur par défaut à un attribut (pratique pour le shell par exemple)
- pam_login_attribute : change l’attribut servant à matcher le login pendant l’authentification
- Il n’est pas possible de changer l’attribut utilisé par pam pour le mot de passe (normal c’est le serveur ldap qui gère).
Les classes modifiables (en restant dals le domaine utilisateur/groupe) sont
- posixAccount : utilisateur ayant un compte unix
- shadowAccount : utilisateur ayant un système avancé de gestion de mot de passe
- posixGroup: groupe unix
Les attributs modifiables sont : uidNumber, gidNumber, gecos, homeDirectory, loginShell, shadowLastChange, shadowMin, shadowMax, shadowWarning, shadowInactive, shadowExpire, shadowFlag, memberUid
Plus de détails (et plus de clesses) dans la RFC 2307.
La configuration fournie avec le paquet donne des exemples pour les différents systèmes existants (aix, microsoft …)
libnss-ldapd
Maintenant vous pourriez avoir d’autres problèmes, comme la performance ou quelques hoquets du réseau qui coupent des connexions. La solution traditionnelle pour cela est d’installer nscd qui fera un cache et vous évitera ces problèmes (et peut en créer d’autres puisque c’est un cache).
Mais il existe une autre solution : libnss-ldapd, notez bien le ‘d’ final. C’est une version de libnss-ldap réécrite pour parler à un démon qui est le seul à parler avec le serveur ldap. Ça a l’avantage de mutualiser les requêtes dans une seule connexion et donc d’éviter pas mal de problèmes, surtout en cas de forte charge.
Petit inconvénient pour les puristes, ça ouvre une faille potentielle (inconnue à ce jour) pour un utilisateur qui voudrait devenir administrateur via le serveur ldap, puisque ce n’est plus le noyau qui vérifie les droits root d’administration mais le démon.
Le démon se configure dans /etc/nss-ldapd.conf. La syntaxe est la même que pour pam_ldap et libnss-ldap, le contenu ne doit pas changer.
Le démon est du coup assez important, il faut vérifier qu’il est lancé (monitorer toussa …). Il s’appelle nslcd.
Sécurité et performances
Si vous avez beaucoup d’utilisateurs vous pouvez vouloir restreindre les recherches.
Si vous avez des utilisateurs qui ne doivent pas tous avoir accès au système, vous pouvez vouloir restreindre les recherches.
C’est pourquoi nss et pam fournissent des directives pour réduire la taille des recherche et donc la liste des utilisateurs :
- base : réduit l’accès à toutes les commandes LDAP à une seule branche
- scope : indiquer si la recherche doit tester les sous branches ou non
- nss_base_<map> : permet d’indiquer à ldap de se limiter à une requête pour un type donné de résolution, map peut valoir passwd, shadow ou group (ou hosts, services, networks, protocols, rpc, ethers, netmasks, bootparams, aliases ou netgroup). Exemple : nss_base_passwd ou=users,dc=linux-attitude,dc=fr?sub?uid>1000
- pam_filter : permet de modifier la partir filtre pour pam (pas besoin de modifier le reste car il n’y a qu’une requête faite par pam). Exemple : pam_filter uid>1000