cours/content/installations/TDM_1-OpenLDAP/index.md
2019-01-10 02:16:59 +01:00

198 lines
6.1 KiB
Markdown

---
title: TDM1 OpenLDAP - notes d'installation
date: 2018-09-13
lastmod: 2018-09-27
categories: ["Installations", "TD machine"]
tags: ['OpenLDAP', 'Apache Directory Studio', 'PAM']
---
Le but de ce TD Machine est d'installer OpenLDAP sur une machine virtuelle, de
configurer un DIT en `dc=u-bordeaux,dc=fr`, de gérer les personnes, matériels et
fonctions et enfin de gérer l'authentification par le LDAP.
# Installation d'openLDAP sur Debian
Lors de l'installation, j'ai choisi de nommer la machine `openldap` et le
`domaine u-bordeaux.fr`, ainsi lors du paramétrage de mon service, il sera
accessible directement sur `openldap.u-bordeaux.fr`
Sur une Debian 9 il suffit d'installer les paquets `slapd` et `ldap-utils` avec
la commande :
```shell
apt install slapd ldap-utils
```
Il est possible de définir simplement le domaine et le mot de passe de
l'administrateur du serveur LDAP en reconfigurant le paquet avec la commande :
```shell
dpkg-reconfigure -pHIGH slapd
```
Il est aussi possible de le faire directement par l'intégration de fichiers LDIF
dans l'annuaire.
# Intégration des personnes, fonctions et matériels
Nous allons créer 3 objets de type `dmd` *directory management domain* reprenant
les trois catégories demandées. Lors de la création de mon arbre, j'ai cependant
choisi cd créer des `ou` *organizational unit* mais c'est sémantiquement pas
juste (ce serait valable pour le service marketing ou le site de Pessac par
example).
À partir du moment ou le serveur LDAP est lancé, fonctionnel et l'administrateur
créé, il est tout à fait possible de lancer cette étape depuis un logiciel comme
Apache Directory studio ou phpldapmyadmin. Mais le but ici était de le faire
depuis un fichier LDIF.
```LDIF
dn: dmdName=users,dc=u-bordeaux,dc=fr
dmdName: users
objectClass: dMD
dn: dmdName=roles,dc=u-bordeaux,dc=fr
dmdName: fonctions
objectClass: dMD
dn: dmdName=machines,dc=u-bordeaux,dc=fr
dmdName: machines
objectClass: dMD
```
Il suffit d'intégrer ce fichier à l'annuaire avec la commande `ldapadd` :
```shell
ldapadd -H ldap://openldap.u-bordeaux.fr -D "cn=admin,dc=u-bordeaux,dc=fr" \
-W -f tree.ldif
```
- `-H <uri>` : URI d'accès au serveur LDAP
- `-D <dn>` : dn du compte autorisé pour l'ajout (ici l'admin)
- `-W` : demande le mot de passe
- `-f <path>` : fichier LDIF contenant les entrées à ajouter.
## Effectuer une recherche dans l'annuaire
La recherche dans l'annuaire est importante dans la mesure ou elle va nous
permettre de vérifier au fur et à mesure les données que l'on y ajoute.
```shell
ldapsearch -x -W -D "cn=admin,dc=u-bordeaux,dc=fr" -b "dc=u-bordeaux,dc=fr" \
"(objectClass=dMD)"
```
- `-W` : demande le mot de passe
- `-D` : dn de l'admiistrateur du serveur
- `-b` : chemin ou effectuer la rechercheo
- `-x` : uriliser l'anthentification simple plutôt que SASL **déconseillé**
- `(*)` : recherche
## Ajouter un mot de passe
```shell
ldappasswd -H "ldap://ldapsrv.u-bordeaux.fr" -D "cn=admin,dc=u-bordeaux,dc=fr" \
-W "uid=yorick.barbanneau,dmdName=users,dc=u-bordeaux,dc=fr"
```
- `-H` : host du serveur LDAP à contacter
Les autres options sont similaires aux comances ci-dessus.
# Apache Directory Studio
C'est un logiciel permettant la gestion complète d'un annuaire LDAP. Écrit en
java, c'est une application open-source sous licence Apache 2.
Pour l'installer, il faut disposer d'une interface graphique et d'un
environnement d'exécution Java. Pour le TD, j'ai donc installé le bureau `Lxde` et
`openjdk-8-jre`.
```shell
apt install lxde openjdk-8-jre
```
j'ai ensuite téléchargé la dernière version d'Apache Directory Studio sur [le
site Apache](https://directory.apache.org/studio/download/download-linux.html).
Une fois le logiciel téléchargé et décompressé, je l'ai lancé puis ajoute la
connexion au serveur LDAP dans *LDAP > nouvelle connexion*.
J'ai créé un groupe enfant de `dmdName=fonction,dc=u-bordeaux,dc=fr` avec comme `cn`
users et un `gidNumber` de 2000
J'ai ensuite créé un utilisateur enfant de `dmdName=personnes,dc=u-bordeaux,dc=fr`
avec comme classe `OrganizationalPerson` et `PosixAccount`. J'ai fait choisi
un `uidMumber` suffisamment haut pour ne pas gêner ceux du système (2000)
On pourrait le modéliser dans le fichier LDIF suivant (à Corriger):
```LDIF
dn: uid=yorick.barbanneau,dmdName=users,dc=u-bordeaux,dc=fr
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: yorick.barbanneau
sn: Barbanneau
cn: Yorick Barbanneau
userpassword: {SSHA}......
uidnumber: 2000
gidnumber: 2000
homedirectory: /home/yorick.barbanneau
loginshell: /bin/bash
```
# Authentification sur la machine avec les comptes LDAP
L'authentification machine depuis les données de l'annuaire nécessite
l'installation et la configuration de deux paquets Debian :
```shell
apt install libpam-ldap libnss-ldap
```
L'installation entraine ici automatiquement le lancement de la configuration de
certains éléments via debconf. il reste cependant des choses à configurer.
Tout d'abord le fichier `/etc/nsswitch.conf` :
```
passwd: files ldap
group: files ldap
shadow: files ldap
```
Ensuite il faut modifier le fichier `/etc/libnss-ldap.conf` et y modifier les champs
`base` et `uri` en fonction de notre serveur
```
uri ldap://openldap.u-bordeaux.fr
base dc=u-bordeaux,dc=fr
```
et redémarrer le service nscd :
```shell
systemctl restart nscd
```
Enfin, il reste à configurer PAM afin qu'il créé le dossier utilisateur s'il
n'existe pas. Dans le fichier `/etc/pam.d/common-account` rajouter la ligne :
```
session required pam_mkhomedir.so skel=/etc/skel umask=0022
```
Pour vérifier que tout fonctionne, lancer `getent passwd`, les utilisateurs
venant du LDAP devraient apparaître dans la liste obtenue.
# Voir aussi
- [LDAP PAM sur la documentation Debian](https://wiki.debian.org/LDAP/PAM)
- [LDAP Authentication (Archlinux)](https://wiki.archlinux.org/index.php/LDAP_authentication)
- [SSSD](https://docs.pagure.org/SSSD.sssd/)
## SSSD
C'est une méthode d'authentification couplée à PAM qui semble intéressante : elle
supporte la connexion même en mode hors-ligne grâce à un cache.