Ajout d'un service avec authentification par LDAP
Cette page suppose que vous êtes connecté au serveur LDAP avec le compte d'administration.
Elle décrit les étapes générales à effectuer pour connecter un service quelconque au serveur LDAP. En pratique, cela veut dire que les utilisateurs disposant d’un compte sur le LDAP pourront se connecter au service en l’utilisant.
C’est donc essentiellement pertinent pour les services “internes” ou “limités”, comme le Wiki, le Cloud, Grafana, etc.
Ajout d'un utilisateur en lecture seule
Cette étape est optionnelle. En effet, il existe déjà un utilisateur en lecture seule sur le LDAP, nss
. Si malgré tout vous voulez créer un utilisateur dédié qui aura le droit de lire sur le LDAP, suivez ces étapes. Sinon, passez à la section suivante.
Question:
Pourquoi a-t-on besoin d’un utilisateur en lecture seule pour faire de l’authentification ?
C’est parce que pour s’authentifier, il faut utiliser le DN complet du compte (exemple : cn=qduchemi,ou=People,dc=picasoft,dc=net
). Or, quand je m’authentifie sur le Wiki, j’utilise seulement mon login (qduchemi
). Cela signifie donc qu’à un moment ou un autre, le Wiki doit chercher dans le LDAP si une entrée avec cn=qduchemi
existe, par exemple (ça dépend du filtre qu’on choisit). Et pour effectuer cette recherche, il faut des droits de lecture.
On créera un compte sous ou=Services
, avec pour cn
le nom du service (exemple : wiki
, nextcloud
).
On lui attribuera ensuite les classes organizationalRole
et simpleSecurityObject
, et on choisira un mot de passe pour userPassword
que l’on ajoutera dans le vaultwarden. Le chemin utilisé dans le pass est par convention Tech/LDAP/<Nom Service>/cn=<cn>,dc=picasoft,dc=net
.
Maintenant que notre utilisateur est créé, on doit lui donner les accès en lecture seule au LDAP.
Note:
On peut se référer à la page concernant les permissions pour mieux comprendre.
Le plus simple est de modifier la configuration avec ApacheDirectoryStudio.
Dans l’entrée olcDatabase={1}mdb,cn=config
, on va modifier les ACL pour permettre au compte nouvellement créé de lire le LDAP.
On cherche l’attribut olcAccess
dont le début ressemble à :
to * by self read by dn="cn=admin,dc=picasoft,dc=net" write by dn="cn=nss,dc=picasoft,dc=net" read by * none
On modifie cet attribue pour lui ajouter, avant by * none
, la chaîne suivante :
by cn=<cn>,ou=Services,dc=picasoft,dc=net read
où <cn>
est le CN choisi pour votre utilisateur.
La valeur de l’attribut ressemblera alors à :
to * by self read by dn="cn=admin,dc=picasoft,dc=net" [...] by cn=<cn>,ou=Services,dc=picasoft,dc=net read by * none
On peut tester le compte a bien les droits en lecture avec la requête suivante :
- snippet.bash
ldapsearch -x -D "cn=<cn>,ou=Services,dc=picasoft,dc=net" -H ldaps://ldap.picasoft.net:636 -W
Après avoir entré le mot de passe, si le résultat contient les entrées du LDAP, c’est que le compte est fonctionnel.
Configuration du service
Configuration de l'utilisateur en lecture seule
Chaque service a sa propre configuration, mais en général on trouvera les paramètres suivants :
User bind DN
: c’est le DN de notre utilisateur en lecture seule. On utiliseracn=<cn>,ou=Services,dc=picasoft,dc=net
, où<cn>
vautnss
si vous n’avez pas créé de compte spécifique.User bind password
: le mot de passe de l’utilisateur en lecture seule, accessible dans le vaultwardenURL
:ldaps://ldap.picasoft.net
Port
:636
Filtre
On demande généralement le DN racine à partir duquel chercher les utilisateurs. On choisira ou=People,dc=picasoft,dc=net
, car tous les comptes utilisés pour se connecter sur un service ou une machine sont sous cette OU.
Ensuite, il y a généralement un filtre pour pouvoir chercher l’utilisateur. Il aura en général la forme suivante :
(&(objectClass=posixAccount)(uid=%s))
Dans cet exemple, on cherche une entrée qui a :
- La classe
posixAccount
- Et l’UID correspondant au login que l’utilisateur essaye
Lien:
Les filtres ne sont pas traités précisément ici, voir une documentation pour des exemples.
Attention:
Le %s
est spécifique à la syntaxe du service et se réfère l’UID testé, voir la configuration LDAP du service pour savoir comment écrire ses requêtes.
Encore une fois, tout ceci est modulable : vous pouvez faire des filtres n’autorisant que les personnes d’un certain groupe à accéder à tel service, ou carrément mapper des groupes sur des autorisations spécifiques du service.
Utilisation de authorizedService
Si le service que vous déployé doit être réservé aux personnes ayant un attribut authorizedService
à <service>
, le filtre ressemblera à ceci :
(&(objectClass=posixAccount)(uid=%s)(|(authorizedService=<service>)(authorizedService=\2a))
Ce qui signifie qu’il ne faut autoriser que les utilisateurs :
- Qui ont une classe
posixAccount
et unuid
correspondant au login - Et dont l’attribut
authorizedService
est à<service>
ou à*
(représenté par\2a
)