LDAP

De wikilivois
Sauter à la navigation Sauter à la recherche


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

  /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}"


On peut aussi définir les paramètres par défaut des comptes (gid, home, shell, ..., mail)

smbldap_bind.conf

  smbldap_bind.conf
slaveDN="cn=Manager,dc=livois,dc=com"
slavePw="xxxxxxx"
masterDN="cn=Manager,dc=livois,dc=com"
masterPw="xxxxxx”


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

  /etc/nsswitch.conf
passwd:      files ldap
shadow:      files ldap
group:       files ldap


  /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


ldap.secret (dans /etc)

en chmod 600, ce fichier ne contient que le mdp de la base ldap

/etc/pam.d

gentoo: system-auth

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


debian Le fichier est séparé en quatre:

  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


  common-account
account sufficient  /lib/security/pam_unix.so
account sufficient  /lib/security/pam_ldap.so


  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


  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


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:

  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


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

  fichier.ldif
DN: cn=Christophe de LIVOIS,o=annuaire,dc=livois,dc=com
changetype: delete

DN:: Y249R3LDqWdvaXJlIGRlIE1PTlRDSEFMSU4sbz1hbm51YWlyZSxkYz1saXZvaXMsZGM9Y29t
changetype: delete


#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)

  1. /etc/init.d/slurpd stop ; /etc/init.d/slapd stop
  2. slapcat -l /root/ldapdump.1257549753.raw
  3. egrep -v '^entryCSN:' </root/ldapdump.1257549753.raw >/root/ldapdump.1257549753
  4. mv /var/lib/openldap-data/ /var/lib/openldap-data-backup/
  5. emerge --update \=net-nds/openldap-2.4.19
  6. etc-update, s'assurer que tous les fichiers sont mis à jour - attention aux schémas pour la commande suivante
  7. remplacer ldbm par hdb dans le champ database de slapd.conf
  8. slapadd -l /root/ldapdump.1257549753
  9. chown ldap:ldap /var/lib/openldap-data/*
  10. /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-ldap.png

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

  .mozilla-thunderbird/nn43lfzx.default/prefs.js
user_pref("ldap_2.servers.default.attrmap.WorkAddress", "homePostalAddress");


Navigateur LDAP

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

http://www.phamm.org

Cf document Interfaces utilisateurs.

LAM - LDAP account Manager

http://lam.sourceforge.net/

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

  /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


ACLs

# 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


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

Tête de GNU 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.