Outils pour utilisateurs

Outils du site


brouillon_mds

Ceci est une ancienne révision du document !


MDS

Objectif: une interface cool pour LDAP… parce que LDAP, c'est inbitable et indispensable.

Liens:

# aptitude install openssl
# aptitude install libapache2-mod-php5 apache2
# aptitude install mmc-agent mmc-web-base
$ python -c 'print "{base64}"+"secret".encode("base64")'
{base64}c2VjcmV0

ou

echo "{base64}"$( echo -n "secret" | openssl base64 )
{base64}c2VjcmV0

LDAP

LDAP, c'est un annuaire humainement illisible… heureusement, on a inventé l'informatique.

Ce qu'est LDAP: *http://fr.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol
Un serveur LDAP ouvert: *http://fr.wikipedia.org/wiki/OpenLDAP
Une interface humaine pour OpenLDAP: *http://phpldapadmin.sourceforge.net/wiki/index.php/Main_Page

Linux Mag: http://articles.mongueurs.net/magazines/linuxmag65.html

Installer

# aptitude install slapd ldap-utils

La config demande le mot de passe de l'“administrateur” .

Je ne rêve pas et j'entre un mot de passe…

Ca semble en place…

# netstat -anp 
tcp        0      0 0.0.0.0:389             0.0.0.0:*               LISTEN     1515/slapd
tcp6       0      0 :::389                  :::*                    LISTEN     1515/slapd

La config brut:

# slapcat
dn: dc=thierry-jaouen,dc=local
objectClass: top
objectClass: dcObject
objectClass: organization
o: thierry-jaouen.local
dc: thierry-jaouen
... <snip> ...

Mais il y a plusieurs problèmes:

  1. la terre entière (ou juste le LAN) a accès à l'annuaire
  2. la communication n'est pas crypté
  3. l'usage d'ip6 me deplait… c'est comme ça…

Et enfin: l'installation a créé la base avec “dn: dc=thierry-jaouen,dc=local”, alors que j'aurai préféré:

dn: dc=mds,dc=thierry-jaouen,dc=local

Ce qui est correct, notamment vis a vis du nom de ma machine… mais bon, tant pis… on corrigera cela plus tard.

D'aprés http://damstux.free.fr/wiki/index.php?title=Slapd.conf , modifier la config de /etc/lapd/slapd.conf , afin d'avoir:

rootdn          "cn=admin,dc=thierry-jaouen,dc=local"
rootpw          {SSHA}+JPSGOfcc9RlZn4R0giSQhrQ/91MiMjY

Le “password” est le même que celui tapé lors de l'installation du package.

Utiliser slappassword pour obtenir un hash du password:

# slappasswd
New password:
Re-enter new password:
{SSHA}+JPSGOfcc9RlZn4R0giSQhrQ/91MiMjY

Premier test illisible:

$ ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts
# extended LDIF
#
# LDAPv3
# base <> with scope baseObject
# filter: (objectclass=*)
# requesting: namingContexts
#

#
dn:
namingContexts: dc=thierry-jaouen,dc=local

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

On dirait que ca fonctionne en local…

Mais aussi en distant:

$ ldapsearch -x -H ldap://mds.thierry-jaouen.local -b '' -s base '(objectclass=*)' namingContexts

Mouai…

log

voir un peu ce que fait “slapd”:

Dans /etc/syslog.conf, ajouter une ligne comme ça:

# TJ ------------
local4.*                /var/log/ldap.log
# ---------------

Recharger la conf:

# /etc/init.d/sysklogd reload

Dans /etc/ldap/slapd.conf , ajouter/modifier une ligne comme ça:

# Read slapd.conf(5) for possible values
# TJ ----------------
#loglevel        0
loglevel        256
# -------------------

Redemarrer slapd :

# /etc/init.d/slapd restart

slapcat

# slapcat
/etc/ldap/slapd.conf: line 106: rootdn is always granted unlimited privileges.
/etc/ldap/slapd.conf: line 123: rootdn is always granted unlimited privileges.
dn: dc=thierry-jaouen,dc=local
objectClass: top
objectClass: dcObject
objectClass: organization
o: thierry-jaouen.local
dc: thierry-jaouen
structuralObjectClass: organization
entryUUID: ab4a2f36-c138-102d-9f24-d35daac5390f
creatorsName:
modifiersName:
createTimestamp: 20090419141816Z
modifyTimestamp: 20090419141816Z
entryCSN: 20090419141816Z#000000#00#000000

dn: cn=admin,dc=thierry-jaouen,dc=local
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: <XXXXXXXXXXXXXXXXXXXX>
structuralObjectClass: organizationalRole
entryUUID: ab4e74f6-c138-102d-9f25-d35daac5390f
creatorsName:
modifiersName:
createTimestamp: 20090419141816Z
modifyTimestamp: 20090419141816Z
entryCSN: 20090419141816Z#000001#00#000000

Je suppose qu'un arbre existe déjà…

Insertions par l'exemple

creer 2 "ou"

“Perso” et “Boulot”.

Créons un fichier “ou.dif” comme cela:

dn: ou=Perso,dc=thierry-jaouen,dc=local
ou: Perso
objectclass: top
objectclass: organizationalUnit

dn: ou=Boulot,dc=thierry-jaouen,dc=local
ou: Boulot
objectclass: top
objectclass: organizationalUnit

dn: ou=Boursorama,ou=Boulot,dc=thierry-jaouen,dc=local
ou: Boursorama
objectclass: top
objectclass: organizationalUnit

dn: ou=Google,ou=Boulot,dc=thierry-jaouen,dc=local
ou: Google
objectclass: top
objectclass: organizationalUnit

Et dans “Boulot”, j'ajoute une “ou” pour “Boursorama” et “Google”.

On y va:

$ ldapadd -x -h localhost -D "cn=admin,dc=thierry-jaouen,dc=local" -W -f ou.dif
Enter LDAP Password:
adding new entry "ou=Perso,dc=thierry-jaouen,dc=local"
... <snip> ...

Aprés avoir entré le mot de passe “admin”…

Ca marche aussi a distance comme ça:

$ ldapadd -x -H ldap://mds.thierry-jaouen.local -D "cn=admin,dc=thierry-jaouen,dc=local" -W -f ou.dif

slapcat nous montre bien l'ajout:

... <snip> ...
dn: ou=Perso,dc=thierry-jaouen,dc=local
ou: Perso
objectClass: top
objectClass: organizationalUnit
structuralObjectClass: organizationalUnit
entryUUID: f0fdcdf6-c144-102d-8f2a-31423ce7aaa2
creatorsName: cn=admin,dc=thierry-jaouen,dc=local
createTimestamp: 20090419154607Z
entryCSN: 20090419154607Z#000000#00#000000
modifiersName: cn=admin,dc=thierry-jaouen,dc=local
modifyTimestamp: 20090419154607Z

ajoutons des uid

Enfin, on ajouter des gens dans l'annuaire.

Toujours en composant un DIF, par exemple: persos.dif

dn: uid=pascal,ou=Perso,dc=thierry-jaouen,dc=local
objectClass: top
objectClass: Person
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
userPassword: secret
uid: pascal
uidNumber: 10001
cn: pascal
loginShell: /bin/bash
gidNumber: 10513
description: Un copain d'avant
homeDirectory: /home/pascal
sn: pascal

Etc…

Et on ajoute (a distance):

$ ldapadd -x -H ldap://mds.thierry-jaouen.local -D "cn=admin,dc=thierry-jaouen,dc=local" -W -f persos.dif
Enter LDAP Password:
adding new entry "uid=pascal,ou=Perso,dc=thierry-jaouen,dc=local"
... etc ....

On peut faire une recherche dedans, maintenant:

$ ldapsearch -x -H ldap://mds.thierry-jaouen.local -b 'ou=Perso,dc=thierry-jaouen,dc=local' '(objectclass=*)'
# extended LDIF
#
# LDAPv3
# base <ou=Perso,dc=thierry-jaouen,dc=local> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# Perso, thierry-jaouen.local
dn: ou=Perso,dc=thierry-jaouen,dc=local
ou: Perso
objectClass: top
objectClass: organizationalUnit

# pascal, Perso, thierry-jaouen.local
dn: uid=pascal,ou=Perso,dc=thierry-jaouen,dc=local
objectClass: top
objectClass: person
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: pascal
uidNumber: 10001
cn: pascal
loginShell: /bin/bash
gidNumber: 10513
description: Un copain d'avant
homeDirectory: /home/pascal
sn: pascal

Etc…

:!: A noter: le mot de passe n'est pas retourné ! (sans doute en relation avec les schémas)
:!: slapcat retourne bien les mots de passe, mais passé à sauce “crypt”

Par contre, une recherche en tant qu'admin retourne bien les mots de passes:

$ ldapsearch -x -H ldap://mds.thierry-jaouen.local -D "cn=admin,dc=thierry-jaouen,dc=local" -W -b 'ou=Perso,dc=thierry-jaouen,dc=local' '(objectclass=*)'

recherches

La liste des “ou” :

$ ldapsearch -s sub -x -H ldap://mds.thierry-jaouen.local -b 'dc=thierry-jaouen,dc=local' '(ou=*)' -LLL dn
dn: ou=Perso,dc=thierry-jaouen,dc=local
dn: ou=Boulot,dc=thierry-jaouen,dc=local
dn: ou=Boursorama,ou=Boulot,dc=thierry-jaouen,dc=local
dn: ou=Google,ou=Boulot,dc=thierry-jaouen,dc=local
“-LLL” permet de virer les commentaires
“dn” permet de ne retourner que la ligne “dn”
$ ldapsearch -s sub -x -H ldap://mds.thierry-jaouen.local -b 'dc=thierry-jaouen,dc=local' '(objectclass=posixAccount)' -LLL dn
dn: uid=pascal,ou=Perso,dc=thierry-jaouen,dc=local
dn: uid=chiroki,ou=Perso,dc=thierry-jaouen,dc=local
dn: uid=fab4,ou=Perso,dc=thierry-jaouen,dc=local

Ou…

$ ldapsearch -s sub -x -H ldap://mds.thierry-jaouen.local -b 'dc=thierry-jaouen,dc=local' '(|(uid=fab4)(uid=pascal))' -LLL dn
dn: uid=pascal,ou=Perso,dc=thierry-jaouen,dc=local
dn: uid=fab4,ou=Perso,dc=thierry-jaouen,dc=local
:!: Sorte de recherche “polonaise”. operateur(a)(b)

TLS/SSL ou LDAPS

Comment chiffrer les communications… je cherche encore.

Lien a voir: http://www.labo-linux.org/articles-fr/gestion-centralisee-des-comptes/le-serveur-ldap

SSL

creer CA

Source:

# dpkg -S CA.pl
openssl: /usr/share/man/man1/CA.pl.1ssl.gz
openssl: /usr/share/doc/openssl/doc/apps/CA.pl.pod.gz
openssl: /usr/lib/ssl/misc/CA.pl

Ce script “CA.pl” va permettre de creer un certificat auto-signé et fier de l'être.

# mkdir /etc/ldap/ssl
# cd /etc/ldap/ssl
# /usr/lib/ssl/misc/CA.pl -newca
:!: la pass-phrase est obligatoire ! donc, bien la choisir pour s'en souvenir !

“Notre CA est maintenant prêt à être utilisé pour générer des certificats ! ”

Il est dans ./demoCA/cacert.pem

server

On va générer un certificat pour le serveur: (toujours dans /etc/ldap/ssl )

# openssl genrsa -out server.key 1024
# openssl req -new -key server.key -out server.req
# openssl ca -in server.req -extensions v3_ca -out server.pem -days 3650

Le nom server importe peu…

:!: Par contre, le “Common Name” doit être le nom de l'hôte, c'est à dire:

# hostname -f
mds.thierry-jaouen.local

Sinon, “slapd” va mystérieusement refuser toutes connexions TLS/SSL !

client

Cerise sur le cake, on peut générer des certificats pour les clients, en changeant simplement “server” par le nom qu'on veut.

creation certificat

Source: http://www.free-4ever.info/index.php/Openssl:Creation_du_certificat

# ./CA.pl -newreq

“newreq.pem” et “newkey.pem” sont apparu.

Signer:

# ./CA.pl -sign

Decryptage de clé:

# openssl rsa -in newkey.pem -out newkey_decrypt.pem

serveur

Dans /etc/ldap/slapd.conf, mettre:

TLSCACertificateFile /etc/ldap/k/ca.crt
TLSCertificateFile /etc/ldap/k/server.crt
TLSCertificateKeyFile /etc/ldap/k/server.key

client

Dans /etc/ldap/ldap.conf, mettre:

# TJ --------
TLS_CACERT /etc/ldap/ca.crt

test

$ ldapsearch -s sub -x -H ldaps://localhost:636 -b 'dc=thierry-jaouen,dc=local' '(ou=*)' -LLL dn
Ok
$ ldapsearch -s sub -x -H ldap://localhost -ZZ -b 'dc=thierry-jaouen,dc=local' '(ou=*)' -LLL dn
Ok

http://www.bind9.net/manual/openldap/2.3/tls.html

brouillon_mds.1241472398.txt.gz · Dernière modification : 2009/05/04 21:26 de thierry