Bon(soi|jou)r la liste,
Je pose ici mes réflexions sur un problème qui, j'espère, parlera à
certains (qui l'auront résolu), pourra en aider d'autres (qui
l'ont/l'auront un jour).
TL;DR :
Quels sont les services à utiliser pour pouvoir authentifier des
utilisateurs lors d'accès à des dossiers partagés CIFS, des serveurs SSH
Linux et des applications Web avec un référentiel unique/centralisé.
CONTEXTE :
J'ai actuellement l'infrastructure suivante :
* Annuaire LDAP sous OpenLDAP : c'est le référentiel unique, il contient
utilisateurs/machines (PosixAccount) et groupes (PosixGroup).
* Application (web) maison pour alimenter l'annuaire en fonction des
embauches/départs (pas de base de données SQL ou autre, tout est dans
le LDAP).
* Serveur OpenID pour certaines applications web : utilise le LDAP comme
source.
* Les utilisateurs ont des comptes locaux sur leur stations de travail
Windows/Linux (aucune interaction avec le LDAP).
Ainsi, les utilisateurs peuvent s'identifier sur :
* des application Web qui gèrent nativement LDAP (eg. Moodle, GitLab,
GLPI, etc.).
* des applications Web sous Apache/Nginx (via mod_authnz_ldap ou
nginx-ldap-auth).
* des applications Web qui gèrent OpenID.
* des serveurs Linux en SSH via nslcd, libnss-ldapd et libpam-ldapd.
(Et avoir un carnet d'adresse des collègues dans leur client de messagerie)
Chaque application est responsable de qui elle accepte (utilisateur
et/ou groupe) et de ce qu'elle lui autorise de faire (l'annuaire LDAP ne
contient pas de permissions).
PROBLÈMES/LIMITES :
Cela fonctionne (bien) depuis des années, mais ne réponds pas aux
besoins suivants (arrivés plus tard) :
* (Le plus important): le partage de fichiers via CIFS/Samba (car
nécessite des attributs spécifiques dans le LDAP).
* stocker *facilement* des données complexes dans OpenLDAP (eg.
variantes d'avatars/photo, jours de présence sur x semaines)
Bonus facultatif : gestion "domaine" des comptes utilisateurs des
stations de travail pour qu'ils utilisent les même identifiants lors de
l'ouverture de leur session, que je puisse les gérer de manière
centralisée, et qu'ils soient même pré-authentifiés sur les serveurs de
fichiers.
ÉBAUCHE DE SOLUTION :
Je pense donc qu'il est temps de tout reprendre à zéro et c'est là que
je découvre (car je suis néophyte sur ces questions) :
* FreeIPA qui créer un "AD-like" pour machines Linux.
* Samba v4 qui intègre désormais son annuaire LDAP et se comporte comme
un Active Directory.
* D'autres dont j'avais déjà entendu parler sans jamais les utiliser :
Kerberos et RADIUS/DIAMETER.
J'envisage donc l'architecture suivante :
* Application maison pour stocker (dans une base SQL quelconque) les
utilisateurs/groupes (+ des infos spécifiques complexes) ET qui
alimente l'annuaire avec seulement les infos pertinentes/standardisées
(le schéma LDAP sera plus simple et une API REST pourra exposer les
autres infos aux applications si besoin).
* Serveur d'annuaire LDAP (OpenLDAP, 389DS, le 389DS de FreeIPA, le LDAP
de Samba4 ?).
* Serveur(s) de fichiers (TrueNAS, OpenMediaVault, etc.) : qui se
connectent à l'annuaire LDAP (ou autre forme de confiance/délégation).
Si je prends le bonus "domaine" : que me faudrait-il ? Samba4 seul
suffirait pour les stations de travail Windows ET Ubuntu ou bien il
faudrait Samba4+FreeIPA pour tout couvrir ?
L'idée d'avoir un AD Samba4 qui tourne sur Internet ne me plait guère.
Et comme les serveurs de fichiers seront de toutes façons dans le LAN,
je pense plutôt installer Samba4 en LAN et mettre en place, juste pour
les applications web, une copie (synchro à sens unique) vers un OpenLDAP
ouvert sur Internet (sans les attributs samba/domaine).
Je suis ouvert à :
* toute correction si j'ai dit une énormité sans nom
* et surtout à toute suggestion d'outil que je n'aurais pas trouvé qui
m'aide dans ma quête.
Merci