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: http://www.free-4ever.info/index.php/Openssl:Creation_du_CA

# 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
# cd /root
# mkdir certs
# cd certs
# cp /usr/lib/ssl/misc/CA.pl .
# ./CA.pl -newca
CA certificate filename (or enter to create)
<enter>
...
Enter PEM pass phrase: <mot_de_passe_secret>
...
<repondre comme pour un CA...>
... etc...
Enter pass phrase for ./demoCA/private/cakey.pem: <mot_de_passe_secret>
...

Augmenter la durée de validité :

# openssl x509 -in demoCA/cacert.pem -days 3650 -out demoCA/cacert.pem -signkey demoCA/private/cakey.pem

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

creation certificat

brouillon_mds.1241037351.txt.gz · Dernière modification : 2009/04/29 20:35 (modification externe)