| name | sysadmin-active-directory |
| description | Intégration Linux dans Active Directory/LDAP : SSSD, Winbind, Samba, Kerberos, Realmd, authentification centralisée, GPO, ACLs étendues et dépannage. |
| version | 1.0.0 |
| author | EVA |
| license | Privée EVA St-Étienne |
| platforms | ["linux"] |
| metadata | {"EVA":{"tags":["ad","ldap","active-directory","sssd","samba","kerberos","realm","authentication","domain","gpo"],"related_skills":["os-linux-admin","os-debian-ubuntu-engineering","os-rhel-engineering","sysadmin-logging"]}} |
Intégration Linux dans Active Directory / LDAP
Vue d'ensemble
L'intégration Linux dans un domaine Active Directory permet l'authentification centralisée des utilisateurs, l'application de politiques (GPO), l'accès aux ressources réseau et la gestion des permissions via les groupes AD — exactement comme pour les postes Windows.
Architecture :
[Client Linux]
│
├── SSSD (System Security Services Daemon) — recommandé moderne
│ ├─── LDAP/KRB5 vers AD
│ ├─── Cache local
│ └─── PAM + NSS
│
└── Winbind (Samba) — alternative legacy
└─── SMB/KRB5 vers AD
Quand l'utiliser
- Authentifier des utilisateurs Linux avec leurs comptes AD
- Centraliser la gestion des comptes (création/suppression via AD)
- Contrôler l'accès aux fichiers avec des groupes AD
- Appliquer des GPO Linux (avec gpupdate)
- Migrer d'une authentification locale à centralisée
1. SSSD (Méthode Recommandée)
Installation du Client
sudo apt install sssd-ad sssd-tools realmd adcli krb5-user
sudo dnf install sssd realmd oddjob oddjob-mkhomedir adcli krb15-workstation
Joindre le Domaine
sudo realm discover DOMAINE.LOCAL
sudo realm join --user=administrator DOMAINE.LOCAL
sudo realm list
Configuration SSSD
cat > /etc/sssd/sssd.conf << 'EOF'
[sssd]
domains = DOMAINE.LOCAL
config_file_version = 2
services = nss, pam
[domain/DOMAINE.LOCAL]
ad_domain = DOMAINE.LOCAL
krb5_realm = DOMAINE.LOCAL
realmd_tags = manages-system joined-with-adcli
cache_credentials = True
id_provider = ad
auth_provider = ad
access_provider = ad
override_homedir = /home/%u@%d
default_shell = /bin/bash
ldap_id_mapping = True
ldap_idmap_range_min = 200000
ldap_idmap_range_max = 2000200000
simple_allow_groups = linux_admins, domain\ users
pam_gssapi_services = sudo, sshd
EOF
sudo chmod 600 /etc/sssd/sssd.conf
sudo systemctl restart sssd
Création Automatique du Home Directory
sudo systemctl enable --load oddjobd
2. Configuration Kerberos
cat > /etc/krb5.conf << 'EOF'
[libdefaults]
default_realm = DOMAINE.LOCAL
dns_lookup_realm = true
dns_lookup_kdc = true
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
[realms]
DOMAINE.LOCAL = {
kdc = dc01.domaine.local
admin_server = dc01.domaine.local
}
[domain_realm]
.domaine.local = DOMAINE.LOCAL
domaine.local = DOMAINE.LOCAL
EOF
kinit administrator@DOMAINE.LOCAL
klist
3. Samba + Winbind (Alternative)
sudo apt install samba winbind libnss-winbind libpam-winbind
[global]
workgroup = DOMAINE
realm = DOMAINE.LOCAL
security = ads
server string = Serveur Linux %h
log file = /var/log/samba/%m.log
max log size = 50
idmap config * : backend = tdb
idmap config * : range = 20000-99999
idmap config DOMAINE : backend = rid
idmap config DOMAINE : range = 10000-19999
winbind use default domain = yes
winbind offline logon = true
winbind enum users = yes
winbind enum groups = yes
template shell = /bin/bash
template homedir = /home/%U
sudo net ads join -U administrator
sudo systemctl enable --now winbind smbd nmbd
4. Authentification SSH avec AD
AllowGroups domain\ users linux_admins
AllowUsers *@domaine.local
PermitRootLogin no
auth sufficient pam_sss.so
sudo systemctl restart sshd
5. sudo pour Groupes AD
%domain\ admins ALL=(ALL) ALL
%linux_admins@domaine.local ALL=(ALL) ALL
sudo visudo -c
6. Contrôle d'Accès aux Fichiers
setfacl -m g:"DOMAINE\ingénieurs":rwx /var/www/projects
setfacl -m g:"domain engineers":rwx /var/www/projects
getent group "domain users"
getent passwd "user@domaine.local"
getent passwd | grep domaine
## 7. GPO Linux (Politiques de Groupe)
Avec le client gpupdate pour Linux :
```bash
# L'extension GPO Linux est disponible sur RHEL 8+ / CentOS 8+
# Activation :
sudo dnf install adcli realmd samba samba-client
sudo grep -q "^apply_group_policy" /etc/sssd/sssd.conf || \
echo "ad_gpo_map_interactive = +gdm-vendor" >> /etc/sssd/sssd.conf
# Appliquer les GPO manuellement (Samba)
sudo net ads gpupdate
# Simuler (dry-run)
sudo net ads gpolist
8. Diagnostic et Dépannage
#!/bin/bash
set -euo pipefail
echo "=== STATUT SSSD ==="
systemctl status sssd --no-pager | head -5
echo -e "\n=== CONNEXION AD ==="
sudo realm list
echo -e "\n=== KERBEROS ==="
klist -5 2>/dev/null || echo "Pas de ticket Kerberos"
echo -e "\n=== TEST AUTHENTIFICATION ==="
sudo id testuser@domaine.local 2>&1 || echo "ATTENTION: utilisateur AD non trouvé"
echo -e "\n=== CACHE SSSD ==="
sudo sss_cache -E && echo "Cache SSSD vidé"
echo -e "\n=== LOGS RÉCENTS ==="
journalctl -u sssd --since "10 min ago" --no-pager | grep -i "error\|warn\|fail" | tail -5
Erreurs Fréquentes
nslookup domaine.local
sudo chmod 600 /etc/sssd/sssd.conf
sudo realm leave
sudo realm join -U administrator DOMAINE.LOCAL
sudo sss_cache -E
sudo systemctl restart sssd
getent passwd testuser@domaine.local
Pièges Courants
-
DNS mal configuré : Le client Linux DOIT utiliser le serveur DNS du domaine AD. systemd-resolved peut interférer. Configurer dns=default dans /etc/NetworkManager/NetworkManager.conf ou utiliser /etc/resolv.conf statique.
-
Décalage horaire > 5 minutes : Kerberos est intolérant au décalage. Synchroniser automatiquement avec le DC : installer chrony ou ntp avec le DC comme source :
server dc01.domaine.local iburst
-
SSSD refuse de démarrer : SSSD refuse de démarrer si les permissions de /etc/sssd/sssd.conf ne sont pas 600.
-
home directory non créé : L'utilisateur AD se connecte mais son home n'existe pas. Installer oddjob-mkhomedir ou ajouter pam_mkhomedir.so à PAM.
-
GPO ignorées : Les GPO Linux ne fonctionnent qu'avec des extensions spécifiques. Vérifier ad_gpo_map_interactive dans sssd.conf.
Liste de vérification (Checklist)