Cette page web est la page web officielle du sujet de TP.
TP
Rapports à envoyer à mon adresse mail personnel (pas à la mailing list),
comme expliqué dans ma page
des enseignements.
L'objet de votre mail doit contenir le texte [LDAP TP] .
Je veux du texte pur : pas de LibreOffice, PDF, images, photos d'écran ou
autres formats bizarres. Je veux pouvoir tester votre code facilement.
Vous pouvez soit écrire votre rapport directement dans le corps de votre mail
(mais en format texte), soit attacher un ou plusieurs fichiers en format
texte. Utiliser votre éditeur préféré.
Vous pouvez copier/coller ce texte dans votre rapport pour reproduire
facilement les questions.
Donnez-moi vos fichiers de configuration, scripts, lignes de commande.
Si une question n'a pas de réponse possible, spéficiez-le explicitement.
Partie A(1) : préliminaires (juste premier et deuxième TP)
Configurez, compilez, installez OpenLDAP et ses dépendances, sans être root,
dans un préfixe personnalisé.
Vous pouvez utiliser ma fonction bash add-prefix
sur cette page:
http://ageinghacker.net/teaching/teaching-scratch
Testez le serveur en écrivant un fichier de configuration. Assurez-vous
qu'il marche.
Partie A(2) : préliminaires (valable à partir du troisième TP)
J'ai simplifié et automatisé l'installation et la configuration du logiciel
d'une façon radicale.
La ligne que vous avez juste exécuté a installé le logiciel, et modifié votre
fichier d'initialisation de Bash. Ce suffit d'exécuter la ligne une fois.
Le shell du terminal où vous avez exécuté la ligne a déjà les variables
d'environnement modifiées. Tout nouveau shell non root que vous allez ouvrir
à partir de ce moment (nouveau terminal, nouveau onglet, nouvelle session
texte) sera également pré-configuré.
slapd, ldapsearch, ldapadd et tout autre outil est automatiquement disponible.
Un fichier de configuration du serveur est déjà disponible dans /tmp/slapd.conf .
Le suffixe, la rootdn et le mot de passe sont ces que vous connaissez déjà.
Le répertoire de la base de données existe déjà, mais il est vide.
Suggestion :
gardez une copie de tout fichier LDIF ! Ce peut être utile en
cas d'erreur, quand vous avez besoin de redémarrer à partir
d'une base de données vide.
Si vous souhaitez vider la base de données :
- arrêtez le serveur ;
- videz le répertoire des données ;
- redémarrez le serveur.
-
Cherchez toute entrée (suggestion : objectclass=* est un bon filtre, mais
vous pouvez aussi appeler ldapsearch sans filtres).
La base de donnée est vide, mais la recherche doit marcher sans erreurs.
Partie B : bâtir le DIT
Ici il faudra créer des branches en utilisant ldapadd.
-
On a une organisation nommée (o) comment vous voulez, qu'on utilise comme
le domaine Internet ageinghacker.net -- donc en LDAP encodé comme
dc=ageinghacker,dc=net
L'organisation est un dcObject (directory component) et aussi, bien sûr,
une organisation (an anglais américain organization, avec un Z).
-
[Nouveau: essayez, pour commencer, de créer la racine dc=ageinghacker,dc=net de classe dcobject — une seule classe. Est-ce possible ? Pourquoi ?]
-
Notre organisation contient une unité organisationnelle (organizationalunit)
nommée (ou) « hackers ».
-
Ajoutez des autres unités organisationnelles, nommées à votre plaisir, au même
niveau de ou=hackers.
Partie C : peupler la base de données, à la main
-
Ajoutez un hacker nommé « J. Random Hacker ».
Les hackers sont des personnes (objectclass: person) dans l'unité
organisationnelle des hackers dans notre organisation.
Quels attributs sont obligatoires ? Quels sont optionnels ? Ajoutez le moindre
possible d'attributs à ce moment. Des messages d'erreur vont vous prévenir si
des attributs obligatoires sont manquants.
-
Ajouter un autre hacker, à votre plaisir. Cette fois testez le caractère de
continuation de LDIF (espace).
-
Créez une nouvelle entrée: un hacker, ayant votre nom et prénom (pas de surnoms dans cette phase).
-
Cherchez tout hacker avec ldapsearch. Combien d'entrées vous trouvez ?
-
Répétez la dernière opération, cette fois en espionnant la connextion entre
client et serveur avec Wireshark.
Vous devriez arriver à identifier les requêtes et les réponses.
Vous devez arriver à intercepter l'échange entre client
et serveur, et à décoder les messages LDAP. (Attention : nous utilisons un
port non standard, donc Wireshark ne reconnaîtra pas LDAP automatiquement ;
quand même, Wireshark a un bon support pour LDAP.)
Appelez-moi quand vous avez bien décodé un messages. Gardez la fenêtre de
Wireshark ouverte en attendant mon arrivé, et continuez.
-
[Question annulée: un étudiant a découvert que ldapdelete
peut éliminer
des entrées récursivement, donc ce que je considérais comme impossible
est en réalité possible. N'éliminez pas les hackers.]
Essayez d'éliminer les hackers (toute l'unité organisationnelle) avec
ldapdelete et puis avec ldapmodify.
Si vous voyez des messages d'erreur mais vos pensez que vos lignes de
commande soient correctes, montrez-les-moi.
-
Si nécessaire, recréez les hackers que vous avez éliminé.
Ajoutez un autre hacker. Éliminez-le avec ldapdelete.
-
Ajoutez encore un autre hacker. Éliminez-le avec ldapmodify.
-
Modifiez l'entrée de « votre » hacker (celui que vous avez nommé après
vous) en lui donnant un numéro de téléphone.
Ici vous avez besoin de ldapmodify.
-
Modifiez l'entrée de votre hacker en lui donnant un deuxième numéro de
téléphone.
-
Éliminez le premier numéro de téléphone, en gardant le deuxième, avec
un outil à votre choix.
-
Modifiez le nom commun de votre hacker avec ldapmodify, en changeant le nom
commun avec votre surnom préféré. Le type d'opération sera modrdn (il
faudra donner un attribut newrdn)
-
Son DN est-il changé ? Et son CN ? Est-ce le seul comportement possible ?
-
Pourquoi j'ai parlé de newrdn ? Expliquez r.
-
Essayez de changer l'unité organisationnelle de votre hacker : il va passer
de l'unité des hackers à une autre unité que vous avez créé.
Partie D : mots de passe
-
Modifiez l'entrée de votre hacker, en ajoutant un attribut
userPassword en lui
donnant une valeur.
-
Authentifiez-vous avec votre DN et mot de passe, au lieu d'utiliser Manager.
Avec notre configuration (non sûre) ce doit marcher.
-
faites une recherche, et affichez tout attribut de votre entrée.
Le mot de pass est-il visible?
-
Essayez slappasswd. À quoi ce sert? Lisez la documentation pour comprendre
l'idée.
-
Utilisez la sortie de slappasswd de façon utile, en modifiant votre entrée.
L'authentification marche-t-elle encore ?
-
Refaites la dernière opération, cette fois en espionnant la connextion entre
le client et le serveur LDAP en utilisant Wireshark.
Dites-moi ce que vous remarquez.
Partie E : peupler la base de données, en masse
-
Étant donnés les noms et prénoms dans les fichiers de texte à la
page des ressources, remplissez l'unité organisationnelle des hackers. Vous pouvez combiner des
prénoms et des noms pour obtenir des noms complets d'hackers. Utilisez juste
une partie des données, car les combinaisons possibles sont très nombreuses,
et votre script ne sera pas très rapide.
Vous pouvez ajouter environs 1000~2000 entrées.
-
Générez, en Bash ou en Python, ou de quelque autre façon automatique ou
semi-automatique, un (seul) fichier LDIF contenant toutes les entrées à ajouter.
Remarque pour vous motiver:
cet exercice est réaliste, voire simplifié par
rapport à la réalité. Un administrateur
système peut avoir besoin d'ajouter à une base
de données LDAP des données extraites à partir de
un ou plusieurs fichier de texte à combiner, ou
à partir d'une base de données SQL.
Exemple : 1000 étudiants s'inscrivent à
l'université, et doivent avoir chacun un compte
Unix et un compte imprimante.
-
Ajoutez les données à votre serveur local.
Je veux voir votre script Bash ou Python dans le rapport, ou une description de
votre stratégie.
Partie F : recherches sur des bases de données de taille importante
-
Cherchez toute entrée dans la base de donnée locale avec ldapsearch. Il y a combien de
résultats ?
-
Cherchez toute entrée dans la base de donnée locale avec ldapsearch, encore une fois.
Cette fois, n'exécutez pas l'opération BIND (c'est à dire, ne passez pas les options -D et -w/-W).
Ça marche encore ? Il y a combien de résultats ?
-
Connectez-vous à mon serveur (il ne sera actif que pendant le TP).
-
hostname: ageinghacker.net
-
port: 10000
-
mot de passe: onlyevilpeopledislikeldap42
(activé durant les TPs)
-
Le DIT sur mon serveur est le même que vous utilisez au TP, mais les entrées sur mon
serveur sont bien plus nombreuses.
Cherchez toute entrée sur mon serveur. Il y a combien de résultats ?
-
Cherchez toute entrée sur mon serveur avec ldapsearch, encore une fois.
Cette fois, n'exécutez pas l'opération BIND
(c'est à dire, ne passez pas les options -D et -w/-W).
Ça marche encore ? Il y a combien de résultats ?
-
Si vous avez fait tout le reste ajoutez une entrée avec votre nom dans
mon
serveur LDAP. Si vous êtes arrivés ici vous méritez un bonus. Appelez-moi.
Partie G : performances et bases de données de taille importante
À ce point (re-)démarrez le serveur sans aucune option de debugging
activée, c'est à dire en utilisant -d0 .
Partie H
-
Déduisez la sémantique des filtres multiples, en utilisant ldapsearch avec
plusieurs filtres (voir slides-2.pdf) sur votre annuaire.
En utilisant plusieurs filtres séparés, les résultats de chaque filtrage
sont-ils combinés en conjonction (« et ») ou en disjonction (« ou ») logique ?
Montrez-moi avec quelles commandes vous avez découvert la réponse.
-
Est-ce qu'on peut obtenir l'autre connectif logique (« et »/« ou »—celui
qui n'est pas le défaut que vous avez découvert) dans les filtres ? Quelle
est la syntaxe ?
Partie I
Écrivez un petit outil en Python permettant d'ajouter un hacker
à notre annuaire, en utilisant
python-ldap.
Il faudra installer python-ldap soit directement à
partir des sources, soit avec pip, soit avec un paquet.
La tâche de programmation est relativement banale.
L'installation, dans mon expérience, bien plus ennuyante.