LDAP

De wikilivois
Révision datée du 10 juin 2012 à 08:01 par Christophe (discussion | contributions) (→‎Rajouter des entrées dans la base)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigationAller à 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

<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

  1. The distinguished name to bind to the server with if the effective user ID
  2. is root. Password must be stored in /etc/ldap.secret (mode 600)

rootbinddn cn=Manager,dc=livois,dc=com

  1. 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

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

  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 <licode file=.mozilla-thunderbird/nn43lfzx.default/prefs.js> user_pref("ldap_2.servers.default.attrmap.WorkAddress", "homePostalAddress"); </licode>

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

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

  1. 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>

  1. 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
  1. 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
  1. lock down passwords

access to attrs=userPassword

       by dn="cn=Manager,dc=livois,dc=com" write
       by self write
       by anonymous auth
       by * none
  1. 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

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.