# Interagir avec un serveur ldap ## Installation Assurez-vous que le paquet _openldap-clients_ soit installé sur votre système ```bash sudo dnf install -y openldap-clients ``` ## Caractéristiques du serveur à interroger: * adresse: ldx1.formation.opendoor.fr * port: 389 * dn de connexion: cn=admin,dc=example,dc=fr * mot de passe: admin * racine: dc=example,dc=fr Il n'y a pas si longtemps, l'installation par défaut d'openldap acceptait les requètes anonymes en lecture-seule. Ce n'est désormais plus le cas. Donc on va systèmatiquement utiliser les options suivantes: ldap{add,search,modify,...} -H ldap://ldx1.formation.opendoor.fr -wadmin -xD cn=admin,dc=example,dc=fr ⚠️ Le mot de passe en clair sur la ligne de commande, ce n'est pas génial. on peut utiliser -W (la commande va nous demander le mot de passe) ou -y ~/.ldap.secret ( ~/.ldap.secret étant un fichier dans lequel on aura écrit notre mot de passe) ## Qui suis-je Faire un _ldapwhoami_ en tant qu'utilisateur admin, puis thomas ```bash ldapwhoami -H ldap://ldx1.formation.opendoor.fr -xwadmin -D cn=admin,dc=example,dc=fr ldapwhoami -H ldap://ldx1.formation.opendoor.fr -WxD uid=thomas,ou=users,dc=example,dc=fr ``` ## Recherche Faire une recherche anonyme sur l'ensemble de l'arbre ```bash ldapsearch -H ldap://ldx1.formation.opendoor.fr -x -b dc=example,dc=fr # Result 32 no such object ``` ### Base de recherche Faire une recherche à partir de la branche ou=users,dc=example,dc=fr. ```bash ldapsearch -H ldap://ldx1.formation.opendoor.fr -wadmin -xD cn=admin,dc=example,dc=fr -b ou=users,dc=example,dc=fr ``` ### Étendue Faire une recherche à partir de la branche user en n'affichant que les enfants de premier niveau ```bash ldapsearch -H ldap://ldx1.formation.opendoor.fr -wadmin -xD cn=admin,dc=example,dc=fr -b ou=users,dc=example,dc=fr -s one ``` ### Filtres Trouvez les entrées ldap dont la classe d'objet est _posixAccount_ ```bash ldapsearch -LLLH ldap://ldx1.formation.opendoor.fr -b dc=example,dc=fr -xwadmin -D cn=admin,dc=example,dc=fr objectclass=posixaccount ``` Trouvez les entrées ldap dont la classe d'objet est _posixAccount_ *et* dont le gidNumber est _1238_ ```bash ldapsearch -LLLH ldap://ldx1.formation.opendoor.fr -b dc=example,dc=fr -xwadmin -D cn=admin,dc=example,dc=fr '(&(gidnumber=1238)(objectclass=posixaccount))' ``` ### Préciser les attributs qui nous intéressent Récupérer uniquement le _mail_ de l'entrée correspondant à la recherche précédente ```bash ldapsearch -LLLH ldap://ldx1.formation.opendoor.fr -b dc=example,dc=fr -xwadmin -D cn=admin,dc=example,dc=fr '(&(gidnumber=1238)(objectclass=posixaccount))' mail ``` Récupérer uniquement les attributs relatifs à la classe d'objet _person_ ```bash ldapsearch -LLLH ldap://ldx1.formation.opendoor.fr -b dc=example,dc=fr -xwadmin -D cn=admin,dc=example,dc=fr '(&(gidnumber=1238)(objectclass=posixaccount))' @person ``` ❗ Notre utilisateur est de la classe _inetOrgPerson_ qui dérive de _Person_ ## Ajout En vous aidant de https://www.zytrax.com/books/ldap/ape/nis.html#posixgroup, Identifiez et mettez au point les attributs nécessaires à la création du groupe suivant: Créer un groupe avec les caractéristiques suivantes: * branche: ou=groupes,dc=example,dc=fr * nom: utilisateurs * identifiant numérique: 1239 * membre: thomas Voir fichier _group.ldif_: ```ldif # Création du groupe _utilisateurs_, gid 1239 et membre "thomas" dn: cn=utilisateurs,ou=groupes,dc=example,dc=fr objectclass: posixGroup gidnumber: 1239 memberuid: thomas ``` ```bash ldapadd -H ldap://ldx1.formation.opendoor.fr -xwadmin -D cn=admin,dc=example,dc=fr -f groupe.ldif ``` ## Modification d'un mot de passe ```bash ldappasswd -H ldap://ldx1.formation.opendoor.fr -xwadmin -D cn=admin,dc=example,dc=fr uid=thomas,ou=users,dc=example,dc=fr # génération d'un mot de passe aléatoire ldappasswd -H ldap://ldx1.formation.opendoor.fr -xwadmin -D cn=admin,dc=example,dc=fr uid=thomas,ou=users,dc=example,dc=fr -s 123Soleil # ⚠️ mot de passe sur ligne de commande ldappasswd -H ldap://ldx1.formation.opendoor.fr -xwadmin -D cn=admin,dc=example,dc=fr uid=thomas,ou=users,dc=example,dc=fr -S # définition du mot de passe par dialogue ``` ## Modification Modifiez le shell de l'utilisateur thomas à la valeur "/bin/fish" Rajoutez lui l'attribut "description" Vérifiez Voir le fichier _modif_user.ldif_: ```ldif dn: uid=thomas,ou=Users,dc=example,dc=fr changetype: modify add: description description: this is my account - replace: loginShell loginShell: /bin/fish ``` ```bash ldapmodify -H ldap://ldx1.formation.opendoor.fr -xwadmin -D cn=admin,dc=example,dc=fr -f modif_user.ldif ``` ## Déplacement / copie Renommez le groupe utilisateurs en utilisateur·trice·s Constatez le résultat. ```bash ldapmodrdn -H ldap://ldx1.formation.opendoor.fr -xwadmin -D cn=admin,dc=example,dc=fr -r cn=utilisateurs,ou=groupes,dc=example,dc=fr cn=utilisateur·trice·s echo 'Y249dXRpbGlzYXRldXLCt3RyaWNlwrdzLG91PUdyb3VwcyxkYz1leGFtcGxlLGRjPWNvbQ==' | base64 -d cn=utilisateur·trice·s,ou=groupes,dc=example,dc=fr ``` ## Suppression Recrééz le groupe "utilisateurs", ```bash ldapadd -H ldap://ldx1.formation.opendoor.fr -xwadmin -D cn=admin,dc=example,dc=fr -f groupe.ldif ``` Supprimez le groupe "utilisateur·trice·s" ```bash ldapdelete -H ldap://ldx1.formation.opendoor.fr -xwadmin -D cn=admin,dc=example,dc=fr cn=utilisateur·trice·s,ou=groupes,dc=example,dc=fr ```