Ldap

De OpenWikiBSD
Aller à : navigation, rechercher

Ldapd

Le démon ldap réécrit pour OpenBSD.

  • Le fichier de config : /etc/ldapd.conf

Ajouter secure après le lo0

  • Démarrer ldapd
  • Modifier le Base DN : dc=example,dc=org

Les commandes

  • ldapctl : Utilitaire de commande
ldapctl stats

OpenLDAP

Installation sous Debian

apt-get install slapd ldap-utils
vi /etc/ldap/ldap.conf
dpkg-reconfigure slapd
slapcat


Installation sous OpenBSD

pkg_add openldap-server
echo 'slapd_flags="-u _openldap"' >>  /etc/rc.conf.local
echo 'if [ "$slapd_flags" != "NO" -a -x /usr/local/libexec/slapd ]; then' >> /etc/rc.local
echo '    install -d -o _openldap /var/run/openldap' >> /etc/rc.local
echo '    /usr/local/libexec/slapd $slapd_flags' >> /etc/rc.local
echo "    echo -n ' slapd'" >> /etc/rc.local
echo 'fi' >> /etc/rc.local
  • Génération d'un mdp chiffré pour le fichier de config
slappasswd
 New password: 
 Re-enter new password: 
{SSHA}NbvBJP3wwhanEUrV/HVWUzPcTkeh7EMF

Ce dernier est à coller en face de rootpw dans "/etc/openldap/slapd.conf

Modifier /etc/openldap/slapd.conf : Ajouter les schémas nécessaires :

include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/openldap.schema
include         /etc/openldap/schema/nis.schema
suffix          "dc=openbsd,dc=net"
rootdn          "cn=admin,dc=openbsd,dc=net"

Génération d'un annuaire minimaliste

Avec les fichiers suivants :

Base DN

#root node
dn: dc=openbsd,dc=net
objectClass: top
objectclass: dcObject
objectclass: organization
o: Home 
dc: openbsd

Admin

dn: cn=admin,dc=openbsd,dc=net
objectclass: organizationalRole
cn: admin


Une OU avec des futurs gens dedans

#OU people 
dn: ou=people,dc=openbsd,dc=net
objectClass: top
objectClass: organizationalUnit
ou: people

Un gens

#User
dn: cn=phil,ou=people,dc=openbsd,dc=net
objectClass: top
ObjectClass: inetOrgPerson
objectClass: posixAccount
cn: phil
sn: Schwarz
mail: mon@mail
telephoneNumber: 0141701001
userPassword: 0000000000000000000000000000=
gidNumber: 1001
uidNumber: 1001
homeDirectory: /home/phil

Du problème des mots de passe

Il existe plusieurs possibilités de stockage de mdp: texte clair, réversible, non-réversible.

Selon cet extrait de la doc de ldapd, les possibilités sont, pour le moment les suivantes :

  • {SHA}digest : Hashage selon l'algorithme SHA-1
  • {SSHA}digest : Hashage selon l'algorithme SHA-1 avec grain de sel
  • {CRYPT}digest : Hashage selon l'algorithme crypt
  • {BSDAUTH}username: Hashage selon l'algorithme BSD
  • {BSDAUTH}username#class: Hashage selon l'algorithme BSD avec changement de login class
  • userPassword : Mot de passe en texte clair

Un groupe de potes

dn: cn=potes,ou=groups,dc=openbsd,dc=net
cn:potes
objectClass: top
objectClass: posixGroup
memberUid: cn=phil,ou=people,dc=openbsd,dc=net

Attention, il faut un gens (un memberuid) dans un groupe


ldapadd -x -D 'cn=admin,dc=openbsd,dc=net'  -f /tmp/FICHIER.ldif -W
 Enter LDAP Password: 
 adding new entry "dc=openbsd,dc=net"


  • Activation des logs
echo "loglevel        256" >> /etc/openldap/slapd.conf 
echo "local4.*                        /var/log/slapd.log " >> /etc/syslog.conf

Debug

  • Attention, Les fichiers ldif ne doivent pas avoir d'espace de début ou de fin de ligne!

Sinon vous aurez

o:: SG9tZSA=

au lieu de

o: Home


  • ldap_bind: Confidentiality required (13)

Ajoutez la directive secure dans le fichier de config :

listen on lo0 secure
  • ldap_add: Object class violation (65)

La structure de l'objet en cours d'ajout ne respecte pas le schéma d'annuaire. Ajoutez la directive suivante au fichier de config :

relax schema

Elle se passe de commentaire, non ?

  • ldap_bind: Server is unwilling to perform (53)

Mauvais mot de passe

  • ldap_add: No such object (32)

Correspond, la plupart du temps à une tentative d'ajouter un objet dans une arborescence dont un parent n'existe pas. Commencez par créer ce parent.

  • ldap_add: Naming Violation (64)

Vous ajoutez un objet (par exemple un memberuid) dont le nom n'est potentiellement pas unique. Ajoutez le chemin complet de l'arbo.


GUI

  • ldapvi pour les barbus.
apt-get install ldapvi 

En local uniquement avec un chmod 700 :

ldapvi --discover --user cn=admin,DN --host=localhost -w  'PASS'
  • phpldapadmin (avec une écoute sur localhost uniquement via VPN.... ou en TLS sinon)
apt-get install  phpldapadmin
ln -s /usr/share/phpldapadmin/ /var/www/html/phpldapadmin
vi /etc/phpldapadmin/config.php 

Ajouter à sites-enabled une restriction au locahost :

<Location "/">
Order Deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128 IP_LAN
</Location>
 service apache2 restart