Joindre AlmaLinux 9 à un domaine Active Directory via SSSD
Guide complet pour intégrer un serveur AlmaLinux 9 à un domaine Active Directory — authentification LDAP/Kerberos, sudo AD, montage homedir automatique.
Table des matières
Joindre un serveur Linux à un domaine Active Directory permet aux utilisateurs du domaine de s’authentifier avec leurs identifiants AD et de bénéficier des politiques centralisées. Voici comment le faire proprement sur AlmaLinux 9 avec SSSD et Realmd.
Prérequis
- AlmaLinux 9 à jour
- Accès réseau au contrôleur de domaine (ports 88, 389, 636, 3268, 3269)
- Compte AD avec droits de jonction de machine
- DNS configuré pour résoudre le domaine AD
Vérification du réseau
# Vérifier la résolution DNS du domaine AD
dig +short domaine.local _ldap._tcp.domaine.local SRV
# → doit retourner l'IP et le port LDAP du DC
# Ping vers le DC
ping dc1.domaine.local
# Vérifier les ports nécessaires
for port in 88 389 636; do
nc -zv dc1.domaine.local $port && echo "Port $port OK" || echo "Port $port FERMÉ"
done
Le DNS doit impérativement résoudre le domaine AD et les enregistrements SRV. Configurez les DCs comme serveurs DNS dans /etc/resolv.conf avant de commencer.
Configurer le DNS
# /etc/resolv.conf
search domaine.local
nameserver 192.168.x.10 # DC1
nameserver 192.168.x.11 # DC2
# Vérifier
nslookup domaine.local
nslookup dc1.domaine.local
Installation des paquets
dnf install -y \
realmd \
sssd \
sssd-ad \
sssd-tools \
oddjob \
oddjob-mkhomedir \
adcli \
samba-common-tools \
krb5-workstation \
openldap-clients
Jonction au domaine
# Découverte du domaine (sans jonction)
realm discover domaine.local
# Jonction au domaine
realm join -U administrateur domaine.local
# Entrez le mot de passe du compte AD quand demandé
# Vérifier la jonction
realm list
Sortie attendue :
domaine.local
type: kerberos
realm-name: DOMAINE.LOCAL
domain-name: domaine.local
configured: kerberos-member
server-software: active-directory
client-software: sssd
required-package: oddjob
required-package: oddjob-mkhomedir
required-package: sssd
required-package: adcli
required-package: samba-common-tools
login-formats: %U@domaine.local
login-policy: allow-realm-logins
Configuration SSSD
Le fichier /etc/sssd/sssd.conf est généré automatiquement par realm join, mais quelques ajustements sont recommandés :
# /etc/sssd/sssd.conf
[sssd]
domains = domaine.local
config_file_version = 2
services = nss, pam
[domain/domaine.local]
default_shell = /bin/bash
krb5_store_password_if_offline = True
cache_credentials = True
krb5_realm = DOMAINE.LOCAL
realmd_tags = manages-system joined-with-adcli
id_provider = ad
fallback_homedir = /home/%u@%d
ad_domain = domaine.local
use_fully_qualified_names = False # ← Permet login sans @domaine.local
ldap_id_mapping = True
access_provider = ad
# Performance
ad_gpo_access_control = disabled # Désactiver GPO Linux (optionnel)
ldap_referrals = false
# Cache
cache_credentials = true
offline_credentials_expiration = 7
# Timeout
ldap_network_timeout = 3
ldap_opt_timeout = 3
Sans cette option, les utilisateurs doivent se connecter avec utilisateur@domaine.local. Avec False, ‘utilisateur’ suffit — beaucoup plus pratique.
# Appliquer les permissions (obligatoire)
chmod 600 /etc/sssd/sssd.conf
# Redémarrer SSSD
systemctl restart sssd
systemctl enable sssd
Création automatique du home directory
# Activer la création automatique du home au premier login
authselect select sssd with-mkhomedir --force
# Activer le service oddjobd
systemctl enable --now oddjobd
Tester l’authentification
# Vérifier qu'un utilisateur AD est visible
id utilisateur@domaine.local
# Avec use_fully_qualified_names = False :
id utilisateur
# Tester l'authentification Kerberos
kinit administrateur@DOMAINE.LOCAL
klist # Affiche le ticket Kerberos
# Tester la connexion SSH avec un compte AD
ssh utilisateur@localhost
Autoriser uniquement certains groupes AD
Par défaut, tous les utilisateurs AD peuvent se connecter. Limitez l’accès :
# Autoriser uniquement le groupe "Linux-Admins" AD
realm permit -g 'Linux-Admins@domaine.local'
# Interdire tout le monde sauf les autorisés
realm deny --all
realm permit -g 'Linux-Admins@domaine.local'
realm permit -g 'Linux-Users@domaine.local'
# Vérifier
realm list
Sudo via groupes Active Directory
Créez un fichier sudoers pour vos groupes AD :
# /etc/sudoers.d/ad-admins
# Donner sudo complet au groupe "Linux-Admins" AD
%Linux-Admins@domaine.local ALL=(ALL) ALL
# Sudo sans mot de passe pour les admins infra
%Linux-Infra-Admins@domaine.local ALL=(ALL) NOPASSWD: ALL
# Vérifier la syntaxe
visudo -c -f /etc/sudoers.d/ad-admins
# Tester
su - utilisateur-admin@domaine.local
sudo whoami # → root
Problèmes courants
SSSD ne démarre pas
journalctl -u sssd -n 50 --no-pager
# Problème fréquent : permissions sssd.conf
chmod 600 /etc/sssd/sssd.conf
chown root:root /etc/sssd/sssd.conf
# Nettoyer le cache SSSD (si utilisateurs "fantômes")
sss_cache -E
systemctl restart sssd
Utilisateur AD introuvable
# Vérifier la connexion LDAP directement
ldapsearch -H ldap://dc1.domaine.local \
-D "CN=svc-linux,OU=Services,DC=domaine,DC=local" \
-w PASS \
-b "DC=domaine,DC=local" \
"(sAMAccountName=utilisateur)"
# Forcer la synchronisation
sss_cache -u utilisateur
id utilisateur
Kerberos expiré ou invalide
# Vérifier le ticket
klist
# Renouveler manuellement
kinit utilisateur@DOMAINE.LOCAL
# Synchroniser l'heure (Kerberos est sensible à la dérive)
timedatectl status
chronyc tracking
# Si décalage > 5 min → Kerberos échoue
chronyc makestep
Déjoindre le domaine
realm leave domaine.local
# Le compte machine est supprimé de l'AD
Vérification finale
# Test complet
getent passwd utilisateur # L'utilisateur est visible
getent group 'Linux-Admins' # Le groupe AD est visible
su - utilisateur # Connexion → home créé automatiquement
sudo -l # Droits sudo corrects
Les utilisateurs AD peuvent désormais se connecter en SSH sur le serveur Linux avec leurs identifiants du domaine. Le home directory est créé automatiquement au premier login.
Cas particulier — authentification sans jonction (bind LDAP simple)
Si vous ne pouvez pas joindre la machine au domaine (environnements restrictifs), une alternative est le bind LDAP simple via nslcd :
dnf install -y nss-pam-ldapd nslcd
# /etc/nslcd.conf
uri ldap://dc1.domaine.local
base dc=domaine,dc=local
binddn CN=svc-linux,OU=Services,DC=domaine,DC=local
bindpw VOTRE_MOT_DE_PASSE
ssl start_tls
tls_reqcert never
scope sub
filter passwd (&(objectClass=user)(memberOf=CN=Linux-Users,OU=Groupes,DC=domaine,DC=local))
map passwd uid sAMAccountName
map passwd homeDirectory unixHomeDirectory
map passwd gecos displayName
Cette méthode est moins intégrée (pas de Kerberos, pas de SSO) mais fonctionne dans des environnements contraints.
Comments