LDAP
Objet du document : Installation et configuration d’une authentification LDAP sous Linux pour les applications suivantes:
- login / ssh (pam)
- postfix
- courier
- apache
- samba
- proftpd
L'administration et l'accès à l'annuaire est aussi abordé.
Authentification LDAP
http://www.openldap.org/doc/admin22/quickstart.html
http://www.topology.org/linux/ldap.html
LDAP = Lightweight Directory Access Protocol. C'est un standard d'annuaire couramment utilisé comme base de comptes utilisateurs.
Elle constituée d'entrées qui sont une liste d'attributs avec un unique DN (Distinguished Name).
Openldap est constitué de :
- slapd le service d'annuaire LDAP
- slurpd un service de réplication
Chaque compte est constitué d'un ou plusieurs objets (classObjects) définis dans les schémas(/etc/openldap/schema). A chaque objet correspondent des champs.
Ex: l'objet posixAccount permet de définir les comptes utilisateurs Unix. On y trouve, entre autre, les champs suivants:
- cn (obligatoire)
- uid (obligatoire)
- uidNumber (obligatoire)
- gidNumber (obligatoire)
- userPassword
- homeDirectory (obligatoire)
- loginShell
Tous les objets contiennent un champ cn (common name) obligatoire et unique qui permet de retrouver l'objet.
/etc/openldap/slapd.conf
Il se compose de 3 sections :
- global
- backend specific(non utilisé dans notre configuration)
- database specific
Cf annexe
#chown ldap /var/lib/openldap-data #chmod 700 /var/lib/openldap-data
Authentification système (pam)
http://www.metaconsultancy.com/whitepapers/ldap.htm
http://www.idealx.org/prj/samba/smbldap-howto.fr.html
http://people.debian.org/~torsten/ldapnss.html
Notre base LDAP est du type:
- sambaDomain
Users Groups Computers
Création de comptes
Les outils smbldap permettent de créer des comptes facilement.
Editer smbldap.conf & smbldap_bind.conf dans /etc/smbldap-tools Ces fichiers sont à éditer sur le serveur de gestion des comptes.
smbldap.conf
#net getlocalsid
permet de récuper le SID du serveur
<licode file=/etc/smbldap.conf> SID=SID="S-1-5-21-3081181328-245241861-234644524" slaveLDAP=ldap.livois.com masterLDAP=ldap.livois.com suffix="dc=livois,dc=com" usersdn="ou=Users,${suffix}" computersdn="ou=Computers,${suffix}" groupsdn="ou=Groups,${suffix}" </licode>
On peut aussi définir les paramètres par défaut des comptes (gid, home, shell, ..., mail)
smbldap_bind.conf
<licode file=smbldap_bind.conf> slaveDN="cn=Manager,dc=livois,dc=com" slavePw="xxxxxxx" masterDN="cn=Manager,dc=livois,dc=com" masterPw="xxxxxx” </licode>
Créer la structure de la base avec la commande:
#smbldap-populate
les options -u 2000 et -g 2000 permettent de préciser le point de départ des compteurs uid et gid.
Définir le mot de passe de l'administrateur
#smbldap-passwd administrator
Créer un compte
#smbldap-useradd -m compte1
Cette commande comprend de nombreuses options. On peut, par exemple, choisir:
- l'organisation (-o)
- la création d'un compte samba (-a) => objet sambaSamAccount
#smbldap-passwd compte1
Remarque : pour gentoo, les outils de gestions de comptes se trouvent dans /usr/share/samba/scripts/.
Configuration de pam & Linux
Packages Gentoo: pam_ldap, nss_ldap, + nscd (optionnel)
Package Debian: libpam-ldap,libpam-cracklib, libnss-ldap +nscd (optionnel) (libpam-smb ?)
Ajouter ldap aux champs passwd, shadow, group <licode file=/etc/nsswitch.conf> passwd: files ldap shadow: files ldap group: files ldap </licode>
<licode file="/etc/ldap.conf et /etc/ldap/ldap.conf (gentoo) ou /etc/pam_ldap et /etc/libnss_ldap.conf (debian)"> host ldap.livois.com base dc=livois,dc=com pam_password exop
- The distinguished name to bind to the server with if the effective user ID
- is root. Password must be stored in /etc/ldap.secret (mode 600)
rootbinddn cn=Manager,dc=livois,dc=com
- RFC2307bis naming contexts
nss_base_passwd dc=livois,dc=com?sub nss_base_shadow dc=livois,dc=com?sub nss_base_group ou=Groups,dc=livois,dc=com?one
- Security options
ssl no </licode>
ldap.secret (dans /etc)
en chmod 600, ce fichier ne contient que le mdp de la base ldap
/etc/pam.d
gentoo: system-auth <licode> auth required /lib/security/pam_env.so auth sufficient /lib/security/pam_unix.so likeauth nullok shadow auth sufficient /lib/security/pam_ldap.so use_first_pass auth required /lib/security/pam_deny.so
account sufficient /lib/security/pam_unix.so account sufficient /lib/security/pam_ldap.so account required /lib/security/pam_deny.so
password required /lib/security/pam_cracklib.so retry=3 password sufficient /lib/security/pam_unix.so nullok use_authtok shadow md5 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 required /lib/security/pam_mkhomedir.so skel=/etc/skel/ umask=0 session optional /lib/security/pam_ldap.so </licode>
debian Le fichier est séparé en quatre:
<licode file=common-auth> auth sufficient /lib/security/pam_unix.so likeauth nullok shadow auth sufficient /lib/security/pam_ldap.so use_first_pass auth required /lib/security/pam_deny.so </licode>
<licode file=common-account> account sufficient /lib/security/pam_unix.so account sufficient /lib/security/pam_ldap.so </licode>
<licode file=common-password> password required /lib/security/pam_cracklib.so retry=3 password sufficient /lib/security/pam_unix.so nullok use_authtok shadow md5 password sufficient /lib/security/pam_ldap.so use_authtok password required /lib/security/pam_deny.so </licode>
<licode file=common-session> session required /lib/security/pam_limits.so session required /lib/security/pam_unix.so session required /lib/security/pam_mkhomedir.so skel=/etc/skel/ umask=0 session optional /lib/security/pam_ldap.so </licode>
Utilisation des comptes
Tester d'abord avec su, ssh (il faut relancer sshd)
En cas de problème, regarder dans ldap.log et les logs systèmes.
Migration de comptes
Il est possible de migrer les comptes Unix vers des comptes LDAP:
#emerge migrationtools
Editer /usr/share/migrationtools/migrate-common.ph
Administration de l'annuaire
Rajouter des entrées dans la base
slappasswd pour créer le mot de passe de la base
#ldapadd -x -D “cn=Manager,dc=livois,dc=com” -w secret –f fichier.ldif -c continue malgré erreurs
#slapadd –l fichier.ldif -f slapd.conf
Fichier d'exemple: <licode file=fichier.ldif> dn: cn=Christophe de LIVOIS,o=annuaire,dc=livois,dc=com objectclass: top objectclass: person objectclass: organizationalPerson objectclass: inetOrgPerson cn: Christophe de LIVOIS sn: de LIVOIS givenName: Christophe homePostalAddress:: MTMgYXYgU3TDqXBoYW5lIE1hbGxhcm3DqSA3NTAxNyBQYXJpcw== homePhone: 01 40 71 93 22 mail: chris@livois.com </licode>
Lorsqu'un champ contient des accents, il doit être encodé en base64 et indiqué comme tel par les "::". Le homePostalAddress est un exemple ici.
Modifier ou supprimer des données
<licode file=fichier.ldif> DN: cn=Christophe de LIVOIS,o=annuaire,dc=livois,dc=com changetype: delete
DN:: Y249R3LDqWdvaXJlIGRlIE1PTlRDSEFMSU4sbz1hbm51YWlyZSxkYz1saXZvaXMsZGM9Y29t changetype: delete </licode>
#ldapmodify -c -D “cn=Manager,dc=livois,dc=com” -w secret –f fichier.ldif -c
Il est aussi possible d'utiliser la commande ldapdelete mais je ne sais pas l'utiliser avec les accents ....
Rechercher des entrées et vérifier le fonctionnement de la base
#ldapsearch -x -b -s base '(objectclass=*)' namingContexts #ldapsearch -x -h ldap.livois.com -b "dc=livois,dc=com" "(mail=*info.test)" mail #ldapsearch -x -b "dc=livois,dc=com" -D "cn=manager,dc=livois,dc=com" -w secret "(mail=*info.test)" mail
Attention : /var/lib/openldap-data doit être en lecture pour ldap.
Dump et restauration de la base
Dump
#/etc/init.d/slapd stop #slapcat -f /etc/openldap/slapd.conf > ldap.dump #/etc/init.d/slapd start
Restauration
#slapadd -f /etc/openldap/slapd.conf -l ldap.dump -v
Mise à jour des index
#slapindex -f slapd.conf
Mise à jour (2.4.19)
- /etc/init.d/slurpd stop ; /etc/init.d/slapd stop
- slapcat -l /root/ldapdump.1257549753.raw
- egrep -v '^entryCSN:' </root/ldapdump.1257549753.raw >/root/ldapdump.1257549753
- mv /var/lib/openldap-data/ /var/lib/openldap-data-backup/
- emerge --update \=net-nds/openldap-2.4.19
- etc-update, s'assurer que tous les fichiers sont mis à jour - attention aux schémas pour la commande suivante
- remplacer ldbm par hdb dans le champ database de slapd.conf
- slapadd -l /root/ldapdump.1257549753
- chown ldap:ldap /var/lib/openldap-data/*
- /etc/init.d/slapd start
A noter que la base ldbm n'existe plus dans la version 2.4. Il faut la remplacer par la base hdb ou bdb.
http://www.openldap.org/faq/data/cache/1167.html
http://www.openldap.org/faq/data/cache/1085.html
Réplication (TODO)
Outils de gestion – accès à l'annuaire
Lecture de l'annuaire
Mozilla - Thunderbird
http://www.mozilla.org/projects/thunderbird/specs/ldap.html donne en particulier le schema ldap de thunderbird.
http://kb.mozillazine.org/Sharing_address_books
http://wiki.mozilla.org/MailNews:LDAP_Address_Books
Thunderbird n'est pas capable d'écrire dans une base LDAP. Il en sera sans doute capable un jour (cf https://bugzilla.mozilla.org/show_bug.cgi?id=86405).
Comme indiqué http://wiki.mozilla.org/MailNews:LDAP_Address_Books, il est possible d'attribuer un champ ldap à un champ affiché par thunderbird
Pour cela il est nécessaire de modifier le fichier prefs.js
<licode file=.mozilla-thunderbird/nn43lfzx.default/prefs.js>
user_pref("ldap_2.servers.default.attrmap.WorkAddress", "homePostalAddress");
</licode>
GQ
http://gq-project.org/index.php
L'outil Gq sous Linux permet de naviguer à travers la base LDAP.
LDAP exporter
http://www.novell.com/coolsolutions/tools/14287.html
LDAP exporter est un navigateur LDAP pour Windows.
phpldapadmin
Cet outil est une sorte de gq en php.
http://phpldapadmin.sourceforge.net/
http://phpldapadmin.sourceforge.net/screenshots.php
Création de nouveaux comptes avec un template
http://wiki.phpldapadmin.info/tiki-index.php?page_ref_id=24
L'idée est de créer un modèle pour la création de nouveaux comptes. Les modèles se trouvent dans le répertoire templates. De nombreux exemples sont proposés. En cas d'adaption d'un modèle, il ne faut pas oublier de cliquer sur "purge caches".
Gestion de comptes utilisateurs
Phamm
Cf document Interfaces utilisateurs.
LAM - LDAP account Manager
N'existe pas en package Gentoo (mars 2005) mais semble intéressant.
Features:
- management of Unix user and group accounts (posixAccount/posixGroup)
- management of Samba 2.x/3 user and host accounts (sambaAccount/sambaSamAccount)
- profiles for account creation
- editor for organizational units (OU)
- account creation via file upload
- automatic creation/deletion of home directories
- setting quotas
- support for LDAP+SSL
- multi-language support (English, French, German, Hungarian, Japanese)
- multiple configuration files
- PDF output for user/group/host accounts
- additional text for user PDFs
- supports multiple password hashes
Samba-console
http://imc.sourceforge.net/samba-console.html
Luma
Annexes
Description de la base
Champs
ObjectClass | must | may |
---|---|---|
inetOrgPerson | ||
posixAccount | ||
shadowAccount | ||
sambaSamAccount | ||
MailAccount | ||
VirtualForward | ||
Vacation |
Définition des groupes
admin | famille | amis | public | |
---|---|---|---|---|
postfix | ||||
courier | ||||
apache | ||||
annuaire | ||||
samba | ||||
proftp |
Slapd.conf
<licode file=/etc/openldap/slapd.conf> include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/nis.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/amavisd-new.schema include /etc/openldap/schema/samba.schema
include /etc/openldap/schema/phamm.schema include /etc/openldap/schema/pureftpd.schema include /etc/openldap/schema/dnsdomain2.schema include /etc/openldap/schema/ISPEnv2.schema
allow bind_v2 database bdb suffix "dc=livois,dc=com" rootdn "cn=Manager,dc=livois,dc=com" rootpw {SSHA}h+2e7I6pslu4njRCl0vCPo3nD4NXJGaV directory /var/lib/openldap-data/
- specific for mail
index objectClass eq index cn,mail eq,subinitial index vd,delete eq,pres index accountActive,forwardActive eq,pres index smtpAuth eq,pres index associatedDomain pres,eq,sub index aAAARecord pres,eq index aRecord pres,eq index sn,uid,displayName pres,eq,sub index uidNumber,gidNumber eq index default sub </licode>
ACLs
<licode>
- lock down passwords
access to dn.regex="vd=([^,]+),o=hebergement,dc=livois,dc=com$" attrs=userPassword
by dn="cn=Manager,dc=livois,dc=com" write by dn.exact="cn=phamm,o=hebergement,dc=livois,dc=com" write by dn.exact,expand="cn=postmaster,vd=$1,o=hebergement,dc=livois,dc=com" write by self write by anonymous auth by * none
- allow users to write some stuff
access to dn.regex="vd=([^,]+),o=hebergement,dc=livois,dc=com$"
by dn="cn=Manager,dc=livois,dc=com" write by dn.exact="cn=phamm,o=hebergement,dc=livois,dc=com" write by dn.exact,expand="cn=postmaster,vd=$1,o=hebergement,dc=livois,dc=com" write by self write by * read
- lock down passwords
access to attrs=userPassword
by dn="cn=Manager,dc=livois,dc=com" write by self write by anonymous auth by * none
- everything else is read-only
access to *
by dn="cn=Manager,dc=livois,dc=com" write by * read
access to dn="" by * read </licode>
Configuration Gentoo
slapd
slurpd (si la réplication est mise en place)
puis les services qui utilisent openldap
openldap | D | |
---|---|---|
openldap | slapd |
/etc/openldap/slapd.conf /etc/openldap/schema/ /var/lib/openldap-data |
nss_ldap |
/etc/nsswitch.conf /etc/pam.d/system-auth /etc/openldap/ldap.conf /etc/ldap.conf |
Copyright
© 2006-2009 Christophe de Livois
Vous avez l'autorisation de copier, distribuer et/ou modifier ce document suivant les termes de la GNU Free Documentation License, Version 1.2 ou n'importe quelle version ultérieure publiée par la Free Software Foundation; sans section invariante, sans page de garde, sans entête et sans page finale. Pour plus d'informations consulter le site de l'APRIL. |