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 :
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 :
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]"
Dans cet exemple, nous indiquons à LL::NG :
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.
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
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à
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.