Dans ce quatrième article, nous allons ajouter un troisième backend d'authentification avec Kerberos et jouer avec la combinaison d'authentification. Comme pour l'authentification avec l'AD, j'ai rédigé cet article pour votre curiosité et voir jusqu'où nous pouvons pousser LL::NG.

Kerberos est utilisé dans le cadre du SPNEGO permettant à un utilisateur AD authentifié sur un PC de s'authentifier automatiquement sur LLNG grâce aux tickets Kerberos.

Sur le serveur ADDC principal, ouvrez une console avec les droits administrateurs, et tapez la commande suivante pour associer le nouveau SPN de l’utilisateur “ssobind” :

PS C:\Windows\system32> setspn -s http/auth.domain.tld ssobind
PS C:\Windows\system32> ktpass -princ HTTP/auth.auth.domain.tld@DOMAIN.LAB -mapuser ssobind@DOMAIN.LAB -crypto all -ptype KRB5_NT_PRINCIPAL -mapOp set -pass MOTDEPASSEDESSO -out c:\auth.keytab

Rappel :

  • le domaine domain.tld est utilisé par le serveur SSO (auth.domain.tld,...) et domain.lab est le domaine AD.
  • Si vous avez filtré les ports de connexion du serveur SSO au serveur RODC, il vous faudra ajouter une acl autorisant l'accès au port TCP-UDP/88 de Kerberos.

Sur le serveur SSO, récupérez le fichier auth.keytab, placez-le dans /etc/lemonldap-ng et directement dans "/etc" sous le nom "krb5.keytab" puis :

apt install krb5-user
vim /etc/krb5.conf
# Effacer complètement le contenu puis mettre ceci :
[libdefaults]
 default_realm = DOMAIN.LAB
 dns_lookup_kdc = false
 dns_lookup_realm = no
 ticket_lifetime = 24h
 forwardable = yes
 renewable = true

[realms]
DOMAIN.LAB = {
 kdc = srv-rodc.domain.lab
 admin_server = srv-rodc.domain.lab
 }

[domain_realm]
 .domain.lab = DOMAIN.LAB
domain.lab = DOMAIN.LAB

# Vérifications :
root@srv-sso: kinit ssobind@DOMAIN.LAB # (doit vous demander le mot de passe du user et si mot de passe OK, retour à la ligne. Si KO une erreur sera indiquée

root@srv-sso: kvno HTTP/auth.domain.tld@DOMAIN.LAB
HTTP/auth.domain.tld@DOMAIN.LAB: kvno = 4

root@srv-sso: klist -e
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: ssobind@DOMAIN.LAB

Valid starting       Expires              Service principal
16/11/2023 10:59:27  16/11/2023 20:59:27  krbtgt/DOMAIN.LAB@DOMAIN.LAB
    renew until 17/11/2023 10:59:24, Etype (skey, tkt): aes256-cts-hmac-sha1-96, aes256-cts-hmac-sha1-96 
16/11/2023 10:59:55  16/11/2023 20:59:27  HTTP/auth.domain.tld@DOMAIN.LAB
    renew until 17/11/2023 10:59:24, Etype (skey, tkt): aes256-cts-hmac-sha1-96, DEPRECATED:arcfour-hmac

root@srv-sso: klist -e -k -t /etc/lemonldap-ng/auth.keytab
Keytab name: FILE:/etc/lemonldap-ng/auth.keytab
KVNO Timestamp           Principal
---- ------------------- ------------------------------------------------------
   4 01/01/1970 01:00:00 HTTP/auth.domain.tld@DOMAIN.LAB (DEPRECATED:des-cbc-crc) 
   4 01/01/1970 01:00:00 HTTP/auth.domain.tld@DOMAIN.LAB (DEPRECATED:des-cbc-md5) 
   4 01/01/1970 01:00:00 HTTP/auth.domain.tld@DOMAIN.LAB (DEPRECATED:arcfour-hmac) 
   4 01/01/1970 01:00:00 HTTP/auth.domain.tld@DOMAIN.LAB (aes256-cts-hmac-sha1-96) 
   4 01/01/1970 01:00:00 HTTP/auth.domain.tld@DOMAIN.LAB (aes128-cts-hmac-sha1-96)

Il y a 3 éléments a vérifier :

  • le SPN, il doit être identique entre celui obtenu via kvno et celui présent dans le keytab soit “HTTP/auth.domain.tld@DOMAIN.LAB”
  • le n° KVNO, doit être identique entre celui obtenu via kvno et celui présent dans le keytab : ici “4”
  • le type de chiffrement, le keytab doit contenir le même type de chiffrement que ceux obtenus via kvno, ici : aes256-cts-hmac-sha1-96 et arcfour-hmac.

Ne pas sauvegarder tant que cela n'est pas indiqué dans cette documentation. Si vous faites tourner LL::NG sur une VM, snpashot, ou backup.

Se rendre ensuite sur Paramètres généraux > Paramètres de combinaison > Combinaison et saisir "[kerberos,ADDC] or [ADDC] or [LLDAP]"

kerb02

Dans cet exemple, nous indiquons à LL::NG :

  1. essaie Kerberos pour l'authentification et ADDC pour la base utilisateur,
  2. si échec essaie ADDC pour l'authentification et la base utilisateur,
  3. si échec essaie LLDAP pour l'authentification et la base utilisateur.

Rendez-vous sur Paramètres généraux > Paramètres de combinaison > Liste des modules. Ajoutez le module Kerberos et sélectionnez Authentification seulement dans Usage.

kerb03

Pour Kerberos, nous ne surchargeons pas les paramètres mais nous les renseignons dans Paramètres généraux > Paramètres d'authentification > Paramètres Kerberos

kerb04

Sauvegardez la configuration

Il faut également décommenter la ligne "CGIPassAuth On" si celle-ci est commentée dans le fichier /etc/lemonldap-ng/portal-apache2.conf.

Important : il faut régler Firefox afin de bénéficier de l'authentification automatique sur ce navigateur avec un utilisateur authentifié sur le domaine.

Sur Firefox, saisissez about:config dans la barre d'adresse puis filtrez sur network.negotiate-auth.trusted-uris et saisissez la valeur domain.tld et validez-là

spnegoff

Sous windows le ticket Kerberos est récupéré lors de l’ouverture de session, il suffit alors de se rendre sur le portail pour être authentifié sans devoir saisir votre nom d'utilisateur et votre mot de passe.

Maintenant que nous avons nos backend d'authentification configurés et fonctionnels, nous allons configurer le backend SQL des configurations et des sessions.

Article précédent Article suivant