Joindre une machine Arch Linux à un domaine Active Directory

Plan de mise en place
1-Présentation
2-Prérequis
3-Configuration du réseau
4-Mise à jour du système et installation des paquets nécessaires
5-Paramétrage du fichier "ntp.conf"
6-Paramétrage du fichier "krb5.conf"
7-Paramétrage du fichier "smb.conf"
8-joindre le serveur Active Directory
9-Démarrage des services
10-Paramétrage du fichier "nssswitch.conf"
11-Paramétrage du fichier"pam_winbind.conf"
12-Paramétrage des fichiers "system-auth" et "su"
13-Connexion d'un utilisateur Active Directory en mode Shell
14-Connexion d'un utilisateur Active Directory en mode graphique
15-Recommandations
1-Présentation
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. Arch Linux est aussi une ancienne distribution Linux "Open source"[1], elle date de l'année 2002. Contrairement à Debian qui livre une mise à jour majeur très ponctuellement, Arch Linux fonctionne sur le principe du "Rolling release", c'est à dire qu'elle maintient son système en continu sur les dernières évolutions. Elle est très stable et vraiment facile d'accès. La communauté autour de cet OS insiste sur le principe "Kiss" "Restons simple" car le but, c'est que chaque utilisateur doit comprendre le système sur lequel il évolue.
2-Prérequis
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
- Arch Linux
- Windows "Serveur" 2019
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).
Pour intégrer Arch Linux, on va utiliser le duo "Samba-Winbind", d'une part pour appréhender l'autre méthode que celle utilisée avec Linux Debian et d'autre part, je n'ai pas obtenu à ce jour une méthode simple intégrant "SSSD".
Pour info :
"Windows Server version 2019" : est le serveur de domaine "Active Directory" ainsi que le serveur "DNS".
10.0.0.150 : est L'IP de notre serveur.
"ad-win1" : est le nom du serveur (hostname).
"rzt.lan": est le nom de domaine.
"rzt": sera le nom de domaine "netbios"(cela n'est pas exact mais cà facilite la compréhension.
Version de Arch Linux : le test est réalisé sur Linux "Endeavours" Gnome
3-Configuration du réseau
On va démarrer cette installation en ouvrant le fichier « hostname » afin de modifier le nom de la machine s’il a lieu de le faire :
# sudo nano /etc/hostname
Le contenu:
sta-arco
Le nom de notre station de travail est "sta-arco", c'est assez explicite, on le garde.
On va ouvrir le fichier "resolv.conf" pour vérifier si notre Arch linux est déjà connecté au bon serveur DNS, c'est à dire notre serveur Windows server :
# sudo nano /etc/resolv.conf
Le contenu :
GNU nano 7.2 /etc/resolv.conf
1 # Generated by NetworkManager
2 search rzt.lan
3 nameserver 10.0.0.154
4 nameserver 2a01:e0a:4e8:ffa1:ffff:ffff:ffff:ffff
5 nameserver 2606:4700:4700::1111
6
Ce n'est pas le cas, pour cet exemple, nous allons modifier le serveur DNS de cette instance. Cela ne sert à rien d'agir sur ce fichier car il dynamique, il est généré automatiquement à chaque démarrage
On va rester sur le Shell de commande pour réaliser cette modification et utiliser l'outil "nmtui":
# sudo nmtui
---> Modifier une connexion.
---> Modifier sur le nom de la connexion.
--->Afficher la connexion IPv4.
- ---> Ajouter un serveur DNS "10.0.0.150".
- ---> Ajouter le nom de domaine du serveur DNS.
- ---> Cocher "ignorer les paramètres DNS obtenus automatiquement".
- ---> Désactivez l'IPv6, cela n'est pas nécessaire pour l'instant.
- ---> Valider.
On va vérifier maintenant le fichier "hosts" de la machine :
# sudo nano /etc/hosts
Le contenu :
# Standard host addresses
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
# --->INSCRIVEZ dessous : le nom de la machine dans le domaine
127.0.1.1 sta-arco.rzt.lan sta-arco
# --->INSCRIVEZ dessous : l'adresse du serveur DNS, ça aide !
10.0.0.150 ad-win1.rzt.lan ad-win1
Inscrivez les deux lignes comme indiqué, cela permet d'être correctement identifié sur le réseau et de joindre le DNS sans problème.
On va effectuer un ping sur notre nom de domaine pour vérifier qu'il est bien joignable :
# ping rzt.lan
Le résultat :
--- statistiques ping rzt.lan ---
7 paquets transmis, 7 reçus, 0% packet loss, time 6124ms
rtt min/avg/max/mdev = 0.130/0.261/0.336/0.062 ms
On va vérifier si le serveur DNS est bien résolu par son IP (recherche inversée) avec "nslookup" :
# nslookup 10.0.0.150
Le résultat :
150.0.0.10.in-addr.arpa name = ad-win1.rzt.lan.
150.0.0.10.in-addr.arpa name = rzt.lan.
On va vérifier si le serveur DNS est bien résolu par son nom de domaine avec "nslookup" :
# nslookup ad-win1.rzo.lan
Le résultat :
Server: 10.0.0.150
Address: 10.0.0.150#53
Name: ad-win1.rzt.lan
Address: 10.0.0.150
Name: ad-win1.rzt.lan
Address: 2a01:e0a:4e8:ffa1::24
Name: ad-win1.rzt.lan
Address: fde9:238a:e3d2:5347:3e26:ce74:5f9f:f6e5
Tout répond parfaitement, nous allons pouvoir continuer.
4-Mise à jour du système et installation des paquets nécessaires
Nous allons installer tout le nécessaire pour joindre le domaine :
On met à jour le système :
# sudo pacman -Syu
On installe :
# sudo pacman -S samba smbclient ntp krb5
Il est possible que certains soient déjà installés, le Shell vous l'indique si c'est le cas.
Les programmes en question :
- "Samba" : le serveur Samba permet d'interagir avec Windows pour le partage réseau. Dans sa suite, il comprend "winbind" qui va faire le lien entre les deux systèmes Linux et Windows : indispensable.
- "Smbclient": l'utilitaire qui permet d'accéder à un répertoire partagé.
- "Ntp": permet de synchroniser l'heure entre le serveur et les stations de travail.
- "Krb5": est la configuration du système Kerberos permettant d'authentifier les utilisateurs réseau.
5-Paramétrage du fichier "ntp.conf"
On va rapidement modifier le fichier "ntp.conf" afin d'indiquer à notre station Arch linux de synchroniser l'heure avec notre serveur :
# sudo nano /etc/ntp.conf
Le contenu :
GNU nano 7.2 /etc/ntp.conf
1 # Use your domain's NTP servers
2 server ad-win1.rzt.lan #----> indiquer ici votre serveur
3 #server server2.internal.domain.tld
4
5 # Restrictions
6 restrict default kod limited nomodify nopeer noquery notrap
7 restrict 127.0.0.1
8 restrict ::1
9
10 # Location of drift file
11 driftfile /var/lib/ntp/ntpd.drift
On valide et on active le service Ntp
# sudo systemctl enable ntpd
On vérifie son status
# sudo systemctl status ntpd
Le résultat :
● ntpd.service - Network Time Service
Loaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled; preset: disabled)
Active: active (running) since Fri 2024-04-19 14:07:37 CEST; 1h 25min ago
Main PID: 367 (ntpd)
Tasks: 2 (limit: 4683)
Memory: 2.9M (peak: 3.8M)
CPU: 277ms
CGroup: /system.slice/ntpd.service
└─367 /usr/bin/ntpd -g -u ntp:ntp
Ah oui, je ne vous ai pas prévenu mais c'est un peu long alors patience...😁
6-Paramétrage du fichier "krb5.conf"
On va s'attaquer maintenant au fichier de configuration Kerberos "krb5.conf", il existe par défaut, le mieux, c'est de partir de zéro :
# sudo nano /etc/krb5.conf
Le contenu :
[libdefaults]
default_realm = RZT.LAN
dns_lookup_realm = false
dns_lookup_kdc = true
[realms]
RZT.LAN = {
kdc = AD-WIN1.RZT.LAN
default_domain = RZT.LAN
admin_server = AD-WIN1.RZT.LAN
}
RZT = {
kdc = AD-WIN1.RZT.LAN
default_domain = RZT.LAN
admin_server = AD-WIN1.RZT.LAN
}
[domain_realm]
.rzt.lan = RZT.LAN
[appdefaults]
pam = {
ticket_lifetime = 1d
renew_lifetime = 1d
forwardable = true
proxiable = false
minimum_uid = 1
}
Pour ce fichier, vous devez modifier uniquement ce qui est en MAJUSCULE (et y rester !) en incluant la ligne de "domain_realm", Il s'agit de vos propres données. Attention aux parenthèses et leurs emplacements.
Je ne vais pas détailler l'ensemble du fichier, mais c'est l'endroit où on indique tout ce qui correspond au serveur Active Directory pour permettre la liaison entre les deux systèmes et la délivrance des tickets(autorisation) Kerberos à notre instance linux. C'est le module "pam" qui sera utilisé pour l’authentification.
7-Paramétrage du fichier "smb.conf"
Passons à la partie Samba, avec le fichier "smb.conf", il existe parfois par défaut, cependant, il est préférable de partir d'un fichier vierge.
# sudo nano /etc/samba/smb.conf
Le contenu :
[global]
# votre domaine netbios en MAJUSCULES¹
workgroup = RZT
# Aunthentification sur un serveur AD
security = ADS
# votre nom de domaine en MAJUSCULES²
realm = RZT.LAN
winbind refresh tickets = Yes
vfs objects = acl_xattr
map acl inherit = Yes
store dos attributes = Yes
# fichier unique de stockage des mots de passe
dedicated keytab file = /etc/krb5.keytab
kerberos method = secrets and keytab
# indique que l'identifant ne requiert pas l'extention domaine pour se connecter
winbind use default domain = yes
# UID/GID mapping for local users # concerne le mappage des identifiants locaux
idmap config * : backend = tdb
idmap config * : range = 3000-7999
# UID/GID mapping for domain users # idem sur le réseau³
idmap config RZT : backend = ad
idmap config RZT : schema_mode = rfc2307
idmap config RZT : range = 10000-999999
idmap config RZT : unix_nss_info = yes
# modèle de repertoire et delogin sur le shell pour les utilisateurs extérieurs
template shell = /bin/bash
template homedir = /home/%D/%U
# un utilisateur peut se connecter meme si le système est hors ligne
winbind offline logon = yes
Modifier les lignes indice 1, 2 et 3. Le "3" comprend quatre lignes (nom de domaine NetBIOS) !
- Attention, le fichier smb.conf est un fichier sensible, s'il est mal écrit, il ne fonctionne pas ! Heureusement, il existe un outil de test "testparm"
# testparm
Le résultat :
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Weak crypto is allowed by GnuTLS (e.g. NTLM as a compatibility fallback)
Server role: ROLE_DOMAIN_MEMBER
Press enter to see a dump of your service definitions
# Global parameters
[global]
dedicated keytab file = /etc/krb5.keytab
kerberos method = secrets and keytab
realm = RZT.LAN
security = ADS
template shell = /bin/bash
winbind offline logon = Yes
winbind refresh tickets = Yes
winbind use default domain = Yes
workgroup = RZT
idmap config internal : unix_nss_info = yes
idmap config internal : range = 10000-999999
idmap config internal : schema_mode = rfc2307
idmap config internal : backend = ad
idmap config * : range = 3000-7999
idmap config * : backend = tdb
map acl inherit = Yes
vfs objects = acl_xattr
Pour résumer cette configuration, le service "winbind" de samba est chargé de résoudre les noms et les groupes d'un environnement linux et Windows Active directory.
8-Joindre le serveur Active Directory
On va pouvoir joindre le domaine avec un compte "admin" Active Directory:
# sudo net ads join -U administrateur
Le résultat :
Password for [RZT\administrateur]:
Using short domain name -- RZT
Joined 'STA-ARCO' to dns domain 'rzt.lan'
C'est déjà un bonne nouvelle😅
Mais on est loin d'avoir fini ohhhhhhhhnoooooonnnn!!!!!😁🙏
9-Démarrage des services
On démarre tous les services:
#sudo systemctl enable smb
#sudo systemctl enable nmb
#sudo systemctl enable winbind
#sudo systemctl start smb
#sudo systemctl start nmb
#sudo systemctl start winbind
- "enable" Activer le service au démarrage.
- "start" Démarrer tout de suite.
- "status" Vérifier son fonctionnement.
On fait un petit "status" pour si voir tout est au vert !!! Je vous fais confiance !🙏
10-Paramétrage du fichier "nssswitch.conf"
Rapidement, on se rend dans le fichier "nsswitch.conf" qui se charge de basculer entre chaque système d'identification de nom et de groupe. On y incorpore notre "winbind":
# sudo nano /etc/nsswitch.conf
Le contenu :
# Name Service Switch configuration file.
# See nsswitch.conf(5) for details.
# we changed nsswitch.conf to have access to nas servers
# This config file comes from the ArcoLinux github
passwd: files systemd
group: files [SUCCESS=merge] systemd
shadow: files systemd
gshadow: files systemd
#--->ces deux lignes dessous sont à ajouter dans ce fichier¹
passwd: files winbind mymachines systemd
group: files winbind mymachines systemd
publickey: files
hosts: mymachines resolve [!UNAVAIL=return] files dns mdns wins myhostname
networks: files
protocols: files
services: files
ethers: files
rpc: files
netgroup: files
¹ Ajoutez les lignes suivantes dans ce fichier :
- passwd: files winbind mymachines systemd
- group: files winbind mymachines systemd
On va vérifier qu'il a compris, par les commandes suivantes :
# wbinfo -u
Le résultat :
administrateur
invité
krbtgt
tom
# wbinfo -g
Le résultat :
ordinateurs du domaine
contrôleurs de domaine
administrateurs du schéma
administrateurs de l’entreprise
éditeurs de certificats
admins du domaine
utilisateurs du domaine
invités du domaine
propriétaires créateurs de la stratégie de groupe
serveurs ras et ias
groupe de réplication dont le mot de passe rodc est autorisé
groupe de réplication dont le mot de passe rodc est refusé
contrôleurs de domaine en lecture seule
contrôleurs de domaine d’entreprise en lecture seule
contrôleurs de domaine clonables
protected users
administrateurs clés
administrateurs clés enterprise
dnsadmins
dnsupdateproxy
C'est top, on a les utilisateurs et les groupes "Active directory".
11-Paramétrage du fichier "pam_winbind.conf"
Ce qu'il nous reste à faire c'est de paramétrer les authentifications "pam" pour les utilisateurs Active Directory
D'abord un fichier Pam pour "winbind", celui-ci est à créer:
# nano /etc/security/pam_winbind.conf
Le contenu :
[Global]
debug = no
debug_state = no
try_first_pass = yes
krb5_auth = yes
krb5_ccache_type = FILE:/run/user/%u/krb5cc
cached_login = yes
silent = no
mkhomedir = yes
En gros, on indique l'utilisation de Kerberos pour l'authentification, le fichier ou seront stocké Les tickets(autorisation) et la création du répertoire de l'utilisateur.
12-Paramétrage du fichier "system-auth" et "su"
Vous pouvez, soit faire un copier-coller de l'ensemble et remplacer l'existant ou soit incorporer les lignes suivantes dans le même ordre :
Fichier "system-auth"
-
auth [success=2 default=ignore] pam_winbind.so
-
account [success=1 default=ignore] pam_winbind.so
-
password [success=1 default=ignore] pam_winbind.so
-
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
-
session required pam_winbind.so
Fichier "su"
-
auth sufficient pam_winbind.so
-
account sufficient pam_winbind.so
-
session sufficient pam_winbind.so
# nano /etc/pam.d/system-auth
Le contenu :
#%PAM-1.0
auth required pam_faillock.so preauth
# Optionally use requisite above if you do not want to prompt for the password
# on locked accounts.
-auth [success=3 default=ignore] pam_systemd_home.so
auth [success=2 default=ignore] pam_winbind.so
auth [success=1 default=bad] pam_unix.so try_first_pass nullok
auth [default=die] pam_faillock.so authfail
auth optional pam_permit.so
auth required pam_env.so
auth required pam_faillock.so authsucc
# If you drop the above call to pam_faillock.so the lock will be done also
# on non-consecutive authentication failures.
-account [success=2 default=ignore] pam_systemd_home.so
account [success=1 default=ignore] pam_winbind.so
account required pam_unix.so
account optional pam_permit.so
account required pam_time.so
-password [success=2 default=ignore] pam_systemd_home.so
password [success=1 default=ignore] pam_winbind.so
password required pam_unix.so try_first_pass nullok shadow sha512
password optional pam_permit.so
-session optional pam_systemd_home.so
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
session required pam_limits.so
session required pam_winbind.so
session required pam_unix.so
session optional pam_permit.so
# nano /etc/pam.d/su
Le contenu :
#%PAM-1.0
auth sufficient pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth required pam_wheeel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
#auth required pam_wheel.so use_uid
auth sufficient pam_winbind.so
auth required pam_unix.so
account sufficient pam_winbind.so
account required pam_unix.so
session sufficient pam_winbind.so
session required pam_unix.so
On vient d'inclure l'authentification pour "winbind" dans le module "pam" des utilisateurs et aussi celui des utilisateurs appartenant au groupe "wheel" (qui donne des privilèges).
13-Connexion d'un utilisateur Active Directory en mode Shell
Si rien n’est cassé😁😅😃, on va tenter une connexion d'utilisateur Active Directory sur la console :
Vous vous souvenez, dans le fichier "smb.conf", on a indiqué que l'on pouvait se connecter sans l'extension "domaine": On écrit juste "kinit administrateur".
# kinit administrateur
Password for administrateur@RZT.LAN:
Si la commande répond, il vous demande votre mot de passe, vous voyez qu'il affiche automatiquement qu'il s'agit d'un utilisateur réseau !
On vérifie qu'il a bien obtenu un ticket d'entrée si je puis dire😁
# klist
Le résultat:
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: administrateur@RZT.LAN
Valid starting Expires Service principal
20/04/2024 07:34:00 20/04/2024 17:34:00 krbtgt/RZT.LAN@RZT.LAN
renew until 21/04/2024 07:33:52
😎
14-Connexion d'un utilisateur Active Directory en mode graphique
On est bon en ce qui concerne la connexion sur le Shell, passons maintenant à l'interface graphique humm...
"Sélectionnez "absent de la liste ?"
Entrez simplement le nom de l'utilisateur réseau et son mot de passe :
🤗😎
On jette un oeil du côté de notre serveur Windows AD :
C'est parfait tout ça !!!🤗
15- Recommandations
Juste quelques mots encore : j’utilise Gnome et son interface de connexion "GDM" car l'utilisateur réseau est bien géré.
Il affiche par défaut "absent de la liste ?" ce n'est pas forcément le cas des autres gestionnaires de session qui accompagnent les bureaux Xfce, Cinnamon, Kde Plasma...etc. Je parle de "Lightdm" et "Sddm"
GDM conserve aussi le nom de connexion dans son système, pas besoin de le ressaisir comme vous pouvez le voir plus-haut.
Je vous joint un lien sur "LightDM et sa configuration, vous trouverez un paragraphe sur la saisie manuel de l’identifiant :

Pour SdDM, selon le thème utilisé, vous aurez la possibilité d'enregistrer un nouvel utilisateur. Voici un lien sur la configuration de ce gestionnaire :
C'est terminé!

Le site de la communauté Arch Linux
