🧭 Bash & Active Directory : comprendre l’intĂ©gration Linux ↔ Windows
🧭 Bash & Active Directory : comprendre l’intĂ©gration Linux ↔ Windows

Introduction

IntĂ©grer une machine Linux dans un domaine Active Directory est un petit chef-d’Ɠuvre d’équilibre entre protocoles : LDAP pour lire les donnĂ©es, Kerberos pour s’authentifier, DNS pour trouver le domaine, et SSSD pour tout relier.
Dans ce projet, on passe à la pratique totale : configuration, jonction au domaine, audit LDAP, montage SMB en SSO et scripts d’automatisation Bash.
Voir l’article correspondant : ICI


🎯 Objectifs du projet

  • Joindre une machine Linux Ă  un domaine Active Directory.
  • Authentifier des utilisateurs AD via SSSD.
  • Interroger LDAP pour auditer les comptes et groupes.
  • Monter un partage SMB/CIFS avec Kerberos.
  • Écrire des scripts Bash d’audit Active Directory.

⚙ PrĂ©-requis

ConceptExemple concret / commande
Paquets nécessairesdnf install realmd sssd adcli samba-common-tools cifs-utils oddjob-mkhomedir openldap-clients
Services Ă  activersystemctl enable --now sssd oddjobd
Synchronisation NTPtimedatectl set-ntp true
Résolution DNS/etc/resolv.conf doit pointer vers un DC (nameserver 192.168.1.10)
Compte AD disposant du droit “Join computers”ex : admin-join@exemple.com

🔐 Étape 1 – Kerberos cĂŽtĂ© Linux

Kerberos gĂšre toute la confiance entre le poste Linux et le domaine.

ConceptExemple concret / commande
Fichier de configuration/etc/krb5.conf :[libdefaults]default_realm = EXEMPLE.COMdns_lookup_kdc = true
Test d’obtention de ticketkinit admin-join@EXEMPLE.COM
VĂ©rificationklist → doit afficher un TGT valide
Révocation du ticketkdestroy
Astuce adminActivez KRB5_TRACE=/dev/stdout pour tracer la négociation Kerberos

Pourquoi ?
Kerberos permet le SSO (Single Sign-On) sécurisé : plus besoin de mot de passe en clair, tout passe par un ticket chiffré temporaire.


đŸ§© Étape 2 – SSSD : authentifier les utilisateurs AD

SSSD (System Security Services Daemon) est la brique d’intĂ©gration entre Linux et Active Directory.
Il interagit avec PAM (authentification) et NSS (résolution des identités).

ConceptExemple concret / configuration
Fichier principal/etc/sssd/sssd.conf
Exemple minimalini<br>[sssd]<br>services = nss, pam<br>domains = exemple.com<br><br>[domain/exemple.com]<br>id_provider = ad<br>access_provider = ad<br>use_fully_qualified_names = False<br>fallback_homedir = /home/%u<br>default_shell = /bin/bash<br>cache_credentials = True
Permissionschmod 600 /etc/sssd/sssd.conf
Activationsystemctl restart sssd
VĂ©rificationid alice → affiche l’UID/GID issus d’AD

Pourquoi ?
SSSD interroge LDAP pour les identitĂ©s et Kerberos pour l’authentification.
Il garde un cache local, utile si le DC devient temporairement inaccessible.


🧭 Étape 3 – Joindre le domaine Active Directory

Deux approches existent : realmd/adcli (moderne) et Samba/net ads join (classique).

a) Via realmd/adcli (recommandé)

ConceptExemple concret / commande
Découverte du domainerealm discover exemple.com
Jonctionrealm join --user=admin-join@EXEMPLE.COM exemple.com
Vérificationrealm list
Test utilisateur ADsu - alice@exemple.com
Délégation sudorealm permit --groups 'LinuxAdmins'

b) Via Samba net ads join (optionnel)

ConceptExemple concret / commande
Fichier smb.conf minimalini<br>[global]<br>workgroup = EXEMPLE<br>security = ads<br>realm = EXEMPLE.COM<br>kerberos method = secrets and keytab
Commande de jonctionnet ads join -k
Vérificationwbinfo -u, wbinfo -g

Astuce :
Le fichier /etc/krb5.keytab contient le ticket machine.
Ne jamais le copier ni le partager.


🔍 Étape 4 – Interroger Active Directory via LDAP

Une fois joint au domaine, on peut auditer AD directement en ligne de commande.

ConceptExemple concret / commande
RequĂȘte LDAP avec Kerberosldapsearch -Y GSSAPI -b "DC=exemple,DC=com" "(objectClass=user)" sAMAccountName
Utilisateurs désactivésldapsearch -Y GSSAPI -b "DC=exemple,DC=com" "(userAccountControl:1.2.840.113556.1.4.803:=2)" sAMAccountName
Machines inactives (>90j)ldapsearch -Y GSSAPI -b "DC=exemple,DC=com" "(&(objectClass=computer)(pwdLastSet<=132542400000000000))" cn pwdLastSet
Groupes & membresldapsearch -Y GSSAPI -b "OU=Groupes,DC=exemple,DC=com" "(objectClass=group)" cn member

Pourquoi ?
Ces commandes permettent d’auditer l’état rĂ©el du domaine sans console graphique.
Parfait pour les scripts d’audit ou de conformitĂ©.


📂 Étape 5 – Monter un partage SMB/CIFS avec Kerberos

Grùce à la jonction Kerberos, Linux peut accéder à des partages Windows en SSO.

ConceptExemple concret / commande
Obtenir un ticket Kerberoskinit alice@EXEMPLE.COM
Monter un partage SMB sécurisésudo mount -t cifs //srvad/partage /mnt/share -o sec=krb5,cruid=$(id -u alice)
Vérifier le montage`df -h
Démonter proprementumount /mnt/share
AstucePour dépanner : smbclient -k //srvad/partage (mode interactif)

🧼 Étape 6 – Scripts d’audit Active Directory en Bash

Ces scripts s’exĂ©cutent depuis n’importe quelle machine Linux membre du domaine.

đŸ”č Exemple 1 : lister les utilisateurs dĂ©sactivĂ©s

#!/bin/bash
ldapsearch -Y GSSAPI -b "DC=exemple,DC=com" \
  "(userAccountControl:1.2.840.113556.1.4.803:=2)" \
  sAMAccountName | grep sAMAccountName | awk '{print $2}' > users_disabled.csv
echo "Export terminé : $(wc -l < users_disabled.csv) utilisateurs désactivés."

đŸ”č Exemple 2 : dĂ©tecter les ordinateurs inactifs

#!/bin/bash
THRESHOLD=120 # jours
NOW=$(date +%s)
ldapsearch -Y GSSAPI -b "DC=exemple,DC=com" "(objectClass=computer)" cn pwdLastSet |
while read -r line; do
  # Conversion de pwdLastSet en secondes
  if [[ "$line" =~ pwdLastSet:\ ([0-9]+) ]]; then
    FILETIME=${BASH_REMATCH[1]}
    LASTSET=$(( (FILETIME/10000000)-11644473600 ))
    AGE=$(( (NOW - LASTSET)/86400 ))
    if (( AGE > THRESHOLD )); then
      echo "Machine inactive : $AGE jours"
    fi
  fi
done

Pourquoi ?
Ces scripts automatisent les audits rĂ©currents sans dĂ©pendre d’outils tiers.


đŸ§± Étape 7 – SĂ©curitĂ© et durcissement

ConceptRecommandation
LDAPS obligatoireActivez le port 636 et validez le certificat CA
Permissions keytabchmod 600 /etc/krb5.keytab
Rotation machineVérifiez via net ads changesecret ou cron Ansible
AccĂšs restreintsimple_allow_groups = LinuxAdmins dans sssd.conf
AuditActivez la journalisation SSSD (debug_level = 9) pour traquer les authentifications

đŸ§© Étape 8 – DĂ©pannage rapide

SymptĂŽmeCause probable / solution
kinit: Clock skew too greatNTP dĂ©synchronisĂ©, corrigez l’heure
Cannot contact any KDCDNS mal configuré, vérifiez _kerberos._tcp
Permission denied aprùs joincompte AD sans droit “Join computers”
sss_cache incohérentPurgez le cache : sss_cache -E
ldap_sasl_interactive_bind_s failedticket expirĂ© → refaites kinit

⚡ Cas avancĂ©s

  • Sudo via groupes AD :
    Ajoutez sudo_provider = ad dans sssd.conf et définissez les rÚgles via GPO ou sudoers.d.
  • CrĂ©ation automatique de home :
    Activez pam_mkhomedir.so pour créer /home/%u à la premiÚre connexion.
  • Automount NFS avec identitĂ©s AD :
    Possible via autofs et Kerberos (intégration avancée).

💬 Retour d’expĂ©rience du lecteur

Vous avez intégré des serveurs Linux à AD dans des environnements multi-domaines ?
Vos retours sur les performances de SSSD ou les problÚmes de cache sont précieux : partagez-les en commentaire !


đŸ§Ș Exercices pratiques

ExerciceDescription
E1 – KerberosConfigurer /etc/krb5.conf et valider l’obtention d’un TGT (klist)
E2 – Join ADJoindre le domaine EXEMPLE.COM et vĂ©rifier la connexion d’un utilisateur AD
E3 – Audit LDAPCrĂ©er un script Bash exportant la liste des utilisateurs dĂ©sactivĂ©s
E4 – SMB SSOMonter un partage Windows via Kerberos (mount.cifs sec=krb5)

đŸ§© Conclusion

L’intĂ©gration Linux ↔ Active Directory repose sur quatre piliers : Kerberos, LDAP, SSSD et SMB.
Bien configurĂ©e, elle permet d’utiliser les identitĂ©s AD de maniĂšre fluide dans Bash et d’automatiser les audits via scripts.

Cette approche unifie l’administration des systĂšmes hybrides et prĂ©pare le terrain pour des environnements cross-platform sĂ©curisĂ©s et maintenables.

Et vous, comment avez-vous intégré vos serveurs Linux à Active Directory ?
Partagez votre expérience et vos astuces !


✅ Solutions des exercices

E1 – Kerberos :
kinit alice@EXEMPLE.COM && klist doit afficher un ticket valide.

E2 – Join AD :
realm join --user=admin-join@EXEMPLE.COM exemple.com puis id alice → UID/GID renvoyĂ©s.

E3 – Audit LDAP :
Utiliser ldapsearch -Y GSSAPI "(userAccountControl:1.2.840.113556.1.4.803:=2)".

E4 – SMB SSO :
sudo mount -t cifs //srvad/share /mnt/share -o sec=krb5,cruid=$(id -u alice) puis df -h.

🧭 Pour aller plus loin avant ou aprùs ce projet :

Avant de plonger dans les tableaux et structures, jette un Ɠil Ă  ces articles complĂ©mentaires :

Liens externes recommandés :

Leave a Comment

Comments

No comments yet. Why don’t you start the discussion?

    Alors tu en pense quoi de cette article ? Dis-moi tous..