Skip to content

Guide pour intégrer une machine Debian 11 à un domaine Active Directory et configurer SSH avec GSSAPI/Kerberos

In this tutorial, we show how to join a debian 11 server

Étape 1 : Préparation de la machine Debian

1.1 Renommer la machine

Modifier le nom d'hôte selon la politique de l'entreprise :

sudo nano /etc/hostname  # Exemple : debian.casdds.casd
sudo hostnamectl set-hostname "nouveau_nom"

Metter à jour /etc/hosts pour inclure le nom et l'IP statique :

sudo nano /etc/hosts  # Ajouter : 10.50.5.X   debian.casdds.casd

1.2 Mise à jour du système

sudo apt update 

1.3 Configurer le DNS sur Debian

Définir le serveur DNS AD dans /etc/resolv.conf :

search casdds.casd
nameserver 10.50.5.64
nameserver 8.8.8.8

1.4 Installer les paquets nécessaires

sudo apt install realmd sssd sssd-tools libnss-sss libpam-sss adcli samba-common-bin krb5-user oddjob oddjob-mkhomedir packagekit -y

Étape 2 : Joindre le domaine Active Directory

2.1. Découvrir le domaine

Vérifier la connectivité avec le contrôleur de domaine :

realm discover CASDDS.CASD

2.2. Rejoindre le domaine

Utiliser un compte administrateur AD :

sudo realm join --user=Administrateur CASDDS.CASD
A ce stade, mon client Debian a bien rejoint mon domaine et apparaît dans la console Utilisateurs et Ordinateurs Active Directory de mon serveur Windows. S’il n’apparait pas, on peut l’ajouter manuellement dans Ordinateurs en sélectionne l’@ip static et délégation kerberos

{{:datascience:admin_system:linux:capture1.png?400|}} {{:datascience:admin_system:linux:capture2.png?400|}}

Étape 3 : Configuration DNS et Kerberos

3.1. Ajouter l'enregistrement DNS sur Windows

Dans le serveur DNS Windows :

Ajouter un enregistrement A pour la machine Debian dans la zone Forward Lookup*. (S'il n'est pas présent)

  • Créer un enregistrement PTR dans la zone Reverse Lookup.(S'il n'est pas présent) {{:datascience:admin_system:linux:capture1.png?400|}} {{:datascience:admin_system:linux:capture4.png?400|}}

3.2. Enregistrer le SPN (Service Principal Name)

Pour assurer que l'enregistrement existant, on tape:

Sur le contrôleur de domaine (PowerShell administrateur) :

setspn -L debian
Si host/debian.casdds.casd n'est pas présent, on l'ajouter avec Powershell admin :
setspn -S host/debian.casdds.casd debian
ktpass -princ host/debian.casdds.casd@CASDDS.CASD -mapuser DEBIAN$ -pass * -ptype KRB5_NT_PRINCIPAL -crypto AES256-SHA1

3.3. Vérifier le keytab Kerberos

Sur Debian :

klist -k /etc/krb5.keytab  # Vérifier la présence de "host/debian.casdds.casd"

Si absent, quitter et rejoigner le domaine :

sudo realm leave CASDDS.CASD
sudo realm join --user=Administrateur CASDDS.CASD

3.4. Génération et déploiement d’un fichier keytab

Génération du keytab sur Windows :

ktpass -princ user@CASDDS.CASD -mapuser user -crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL -pass * -out user.keytab
Transfert vers Debian :
scp user.keytab user@debian.casdds.casd:/tmp/
Installation et sécurisation du keytab :
sudo cp /tmp/user.keytab /etc/
sudo chmod 644 /etc/user.keytab
sudo chown root:root /etc/user.keytab

Étape 4 : Configuration de SSSD, PAM et Kerberos

4.1. Fichier /etc/sssd/sssd.conf

[sssd]
services = nss, pam
domains = casdds.casd
config_file_version = 2

[nss]
homedir_substring = /home

[pam]

[domain/casdds.casd]
ldap_sasl_authid = user@CASDDS.CASD
krb5_keytab = /etc/user.keytab
default_shell = /bin/bash
krb5_store_password_if_offline = True
cache_credentials = True
krb5_realm = CASDDS.CASD
realmd_tags = manages-system joined-with-adcli
id_provider = ad
fallback_homedir = /home/%u@%d
ad_domain = casdds.casd
use_fully_qualified_names = False
ldap_id_mapping = True
access_provider = ad
ldap_group_nesting_level = 2

4.2. Configurer PAM

Modifier les fichiers dans /etc/pam.d/ pour inclure pam_sss.so

### /etc/pam.d/common-auth
sudo: unable to resolve host debian118: Name or service not known
auth      sufficient  pam_unix.so try_first_pass
auth      sufficient  pam_sss.so use_first_pass
auth      required    pam_deny.so
### /etc/pam.d/common-account
sudo: unable to resolve host debian118: Name or service not known
account   required    pam_unix.so
account   sufficient  pam_sss.so
account   required    pam_permit.so
### /etc/pam.d/common-password
sudo: unable to resolve host debian118: Name or service not known
password  sufficient  pam_unix.so
password  sufficient  pam_sss.so
password  required    pam_deny.so
### /etc/pam.d/common-session
sudo: unable to resolve host debian118: Name or service not known
session   required    pam_unix.so
session   optional    pam_sss.so
session   required    pam_mkhomedir.so skel=/etc/skel/ umask=0022

4.3. Fichier /etc/krb5.conf

 [libdefaults]
        default_realm = CASDDS.CASD

        default_tkt_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96
        default_tgs_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96
        permitted_enctypes   = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96
        kdc_timesync = 1
        ccache_type = 4
        forwardable = true
        proxiable = true
        ticket_lifetime = 24h
        dns_lookup_realm = true
        dns_lookup_kdc = true
        dns_canonicalize_hostname = false
        rdns = false
         allow_weak_crypto = true
# The following libdefaults parameters are only for Heimdal Kerberos.
        fcc-mit-ticketflags = true

[realms]
        CASDDS.CASD = {
                kdc = 10.50.5.64
                admin_server = 10.50.5.64
        }
…..
[domain_realm]
….
        .casdds.casd = CASDDS.CASD
        casdds.casd = CASDDS.CASD

Étape 5 : Configuration SSH avec GSSAPI

5.1. Sur Debian

Modifier /etc/ssh/sshd_config :

UsePam yes
GSSAPIAuthentication yes # l'authentification basée sur GSSAPI pour les connexions SSH
GSSAPICleanupCredentials yes # la suppression automatique des identifiants temporaires obtenus via GSSAPI après leur utilisation pour renforcer la sécurité
GSSAPIKeyExchange yes # sécuriser l'échange de clés, protégeant ainsi le processus de négociation contre les interceptions
GSSAPIStrictAcceptorCheck no # Désactive la vérification stricte de l'identité de l'acceptateur, facilitant les connexions dans des environnements où les noms de principal peuvent varier
Modifier /etc/ssh/ssh_config:
   Host *
              GSSAPIAuthentication yes
       GSSAPIDelegateCredentials yes # déléguer les identifiants GSSAPI du client au serveur pour 
Redémarrer les services :
sudo systemctl restart sshd sssd

5.2. Sur Windows

Installer OpenSSH via PowerShell:

Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'
Activer GSSAPI dans C:\ProgramData\ssh\sshd_config :
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
Redémarrer le service:
 Restart-Service sshd

Étape 6 : Validation

6.1. Test Kerberos

Sur Debian :

 kinit user@CASDDS.CASD  # Authentifier avec le mot de passe AD
klist    

6.2. Connexion SSH

Depuis Windows :

ssh -K user@debian.casdds.casd  # -K active la délégation Kerberos

Appendix Notes importantes :

  • Permissions SSSD : Vérifier que /etc/sssd/sssd.conf a les droits 600 :
sudo chmod 600 /etc/sssd/sssd.conf