Joindre une machine Debian à un domaine Active Directory

Il y a d'autres systèmes qui utilise le même principe qu'Active Directory.
Sous Linux, par exemple vous avez Samba AD mais ce n'est pas le but de cette note, on ne va pas développer plus en avant le sujet. On va parler quand même de l'OS¹ Debian : c'est une des distributions les plus connues dans le monde Linux, le projet Open source[1]
remonte à 1993, elle extrêmement stable, elle est le point de départ de nombreuses autres distributions tel que Ubuntu, Linuxmint, Proxmox, TruenasSclale etc...
C'est clair que cette distribution n'est pas la plus moderne, mais en que tant serveur elle a ma préférence. Je l'utilise beaucoup dans Proxmox.
C'est quoi un logiciel "Open source" dans les grandes lignes ? Le principe "Open source" précise que ce logiciel ouvre son code source. Celui-ci est tenu à disposition de la communauté, il est librement modifiable et distribuable. ↩︎


Conditions d'installation "Machine Virtuelle"
L’installation est réalisée selon les critères suivants:
La machine virtuelle s'appuie entièrement sur son Hôte en l’occurrence Proxmox, elle permet d'affiner les réglages , elle peut aussi utiliser le matériel directement par le "passtrough"", Elle est plus gourmande en ressource qu'un conteneur.
- Proxmox PVE 8.3
- Machine Virtuelle
- Utilisateur non root avec privilège
- Debian 11 et 12
- Windows Server 2019
Allons-y, ce qu'on va mettre en place dans cette note avec la distribution Debian peut être réalisé sur tous les OS basés sur celle-ci.
Il existe deux méthodes pour joindre un système Linux à Active Directory :
Celle qui consiste à utiliser le duo "Samba et Winbind" et la méthode d'authentification qui utilise "SSSD" (System Security Services Daemon).
Je détaillerai ce qu'est le duo Samba et Winding sur la note concernant Arch Linux qui suivra.
Pour intégrer Debian, on va utiliser la méthode "SSSD"
Pour info :
"Windows Server version 2019" : est le serveur de domaine "Active Directory" ainsi que le serveur "DNS".
10.0.0.10 : est L'IP de notre serveur.
"ad-win" : est le nom du serveur.
"rzo.lan": est le nom de domaine.
Version de Debian : le test est réalisé sur la version 11 et 12.
La première chose à faire c'est de s'assurer que votre OS¹ utilise bien le bon DNS, celui de Windows Server :
# sudo nano /etc/resolv.conf
Le résultat :
search rzo.lan nameserver 10.0.0.10 nameserver 2a01:e0a:4e8:fab1:c04a:99ff:fefa:4a60
- rzo.lan correspond au domaine local de votre serveur Windows qui est le serveur DNS de votre réseau.
- 10.0.0.10 correspond a l'IP de votre domaine local.
¹OS est l'abréviation de "Operating system" se traduit chez nous par "Système d'exploitation". Windows, Linux Debian, Mac-Os sont des systèmes d'exploitation
Si vous n'avez pas les bonnes valeurs dans le fichier "resolv.conf", inutile de les modifier à cet endroit car ce fichier est dynamique. Il est créé automatiquement au démarrage avec certaines valeurs.
J'ai installé un Debian avec interface graphique, si on veut rester en ligne de commande, on utilise l'utilitaire "nmtui" pour modifier le DNS:
# sudo nmtui
---> Modifier une connexion.
---> Modifier sur le nom de la connexion.
--->Afficher la connexion IPv4.
---> Ajouter un serveur DNS"10.0.0.10".
---> Cocher "ignorer les paramètres DNS obtenus automatiquement".
---> Valider.
Redémarrez le réseau
# sudo systemctl restart networking
Vérifiez a nouveau le fichier "resolv.conf" pour voir si c'est le bon DNS :
# sudo nano /etc/resolv.conf
On va ensuite modifier le fichier "hostname" de votre machine :
# sudo nano /etc/hostname
Vous avez un nom dans ce fichier, il correspond au nom qui identifie votre machine, vous pouvez le modifiez pour qu'il soit plus explicite.
Dans l'exemple, ce sera: "sta-debian"
On va ensuite modifier le fichier "hosts"
# sudo nano /etc/hosts
Le résultat :
127.0.0.1 localhost
127.0.1.1 sta-debian.rzo.lan sta-debian # modifier si necessaire
10.0.0.10 ad-win.rzo.lan ad-win # c'est l'adrersse du serveur DNS
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
- Le 127.0.0.1 correspond a votre machine dans la boucle local
- Le 127.0.1.1 correspond au nom de votre machine sur le réseau,
On vérifie que c'est le bon "hostname" et le nom de domaine du réseau qui est indiqué !! - Le 10.0.0.10 est l'adresse du serveur DNS.
On va ensuite installer tous les outils nécessaires pour notre Debian :
# sudo apt update && sudo apt upgrade -y # On met le système à jour.
# sudo apt -y install realmd libnss-sss libpam-sss sssd sssd-tools adcli samba-common-bin oddjob oddjob-mkhomedir packagekit
Cette ligne installe "Realmd" qui le système qui permet de créer la jonction avec "Active Directory".
On ajoute notre machine au Domaine "rzo.lan"
# sudo realm discover rzo.lan
Le résultat :
rzo.lan
type: kerberos
realm-name: RZO.LAN
domain-name: rzo.lan
configured: no
server-software: active-directory
client-software: sssd
required-package: sssd-tools
required-package: sssd
required-package: libnss-sss
required-package: libpam-sss
required-package: adcli
required-package: samba-common-bin
Comme vous pouvez le voir, ce n'est pas encore configuré. On va ensuite permettre à un utilisateur "Active Directory" de se connecter et de créer un répertoire personnel sur notre Debian :
Copiez cette chaîne de commande complète :
sudo bash -c "cat > /usr/share/pam-configs/mkhomedir" <<EOF
Name: activate mkhomedir
Default: yes
Priority: 900
Session-Type: Additional
Session:
required pam_mkhomedir.so umask=0022 skel=/etc/skel
EOF
Une petite explication sur ce "petit script" qui n'en est pas un...
- "bash -c" indique l’exécution d’une chaine de commandes à venir
- "cat" va créer le fichier "mkhomedir"
- "EOF" indique le début et la fin de la saisie de plusieurs lignes dans le fichier "mkhomedir"
Le reste est ce que contient le fichier "mkhomedir"
Name: activate mkhomedir # Active mkhomedir
Default: yes # Par défaut
Priority: 900 # Le niveau de priorité dans le démarrage du système
Session-Type: Additional # Créé une nouvelle session
Session:
required pam_mkhomedir.so umask=0022 skel=/etc/skel # Cette session requiert une authentification par le module "pam" avec les permissions du répertoire par default(skel) de l'utilisateur.
Vous pouvez lire le fichier pour vous en assurer:
# sudo nano /usr/share/pam-configs/mkhomedir
Bon après cet aparté, je trouve intéressant de comprendre ce que l'on fait, on reprend le cours des choses :
On va joindre ce coup-ci la station Debian au domaine :
# sudo realm join -U administrateur rzo.lan
Il vous demande le mot de passe de l'administrateur du serveur "ad-win"
Si aucun message d'erreur n'apparait, c'est déjà pas mal !
Pour vérifier cette connexion avec le domaine, on utilise la commande :
# sudo realm list
Le résultat :
rzo.lan
type: kerberos
realm-name: RZO.LAN
domain-name: rzo.lan
configured: kerberos-member
server-software: active-directory
client-software: sssd
required-package: sssd-tools
required-package: sssd
required-package: libnss-sss
required-package: libpam-sss
required-package: adcli
required-package: samba-common-bin
login-formats: %U@rzo.lan
login-policy: allow-realm-logins
Maintenant c'est configuré, ce qui veut dire que nous avons rejoint le domaine !
On va vérifiez cela tout de suite sur l'instance de Windows Server :
Nous allons activer le module « pam » qui gère l'authentification sur le "mkhomedir" c'est la ligne qui est inscrite dans le fichier du même nom.
# sudo pam-auth-update
On redémarre le service "sssd"
# sudo systemctl restart sssd
On vérifie son statut
# sudo systemctl status sssd
On connecte un utilisateur AD à notre station Debian :
userse@sta-debian:~$ id tom@rzo.lan
S'il se connecte cela donne ce résultat
# uid=902601104(tom@rzo.lan) gid=902600513(utilisateurs du domaine@rzo.lan) groupes=902600513(utilisateurs du domaine@rzo.lan)
Le résultat indique l'identifiant (uid) de notre utilisateur ainsi son appartenance au groupe des utilisateurs du domaine.
On va effectuer un reboot de la machine Debian, et on va tenter ce coup-ci de se connecter sur l'interface graphique "Gnome" avec notre utilisateur réseau :
Quand vous arrivez sur l'écran de connexion, vous ne voyez que l'utilisateur locale de votre système Debian, il faut cliquer sur « absent de la liste ?"
J'ai rentré mon identifiant (avec l'extension domaine) et le mot de passe
--->tom@rzo.lan
Une information indique que la création du répertoire de cet utilisateur est en cours...
Tout est ok !
C'est terminé !