|
| 1 | +--- |
| 2 | +author: Hayden Young |
| 3 | +contributors: Krista Burdine, Steven Spencer, Sambhav Saggi, Antoine Le Morvan |
| 4 | +--- |
| 5 | + |
| 6 | +# Authentification avec Active Directory |
| 7 | + |
| 8 | +## Prérequis |
| 9 | + |
| 10 | +- Connaissances de base de Active Directory |
| 11 | +- Connaissances de base de LDAP |
| 12 | + |
| 13 | +## Présentation de Active Directory |
| 14 | + |
| 15 | +Active Directory (AD) de Microsoft est, dans la plupart des entreprises, le système d'authentification standard pour les systèmes Windows et pour les applications externes connectées à LDAP. Il permet de configurer les utilisateurs et les groupes, le contrôle d'accès, les permissions, le montage automatique, etc. |
| 16 | + |
| 17 | +Alors que la connexion de Linux à un cluster AD ne peut pas prendre en charge _toutes_ les fonctionnalités mentionnées, elle peut gérer les utilisateurs, les groupes et le contrôle d'accès. Il est même possible (grâce à quelques ajustements de configuration du côté Linux et à certaines options côté AD) de distribuer des clés SSH à l'aide d'Active Directory. |
| 18 | + |
| 19 | +Ce guide, cependant, ne couvrira que la configuration de l'authentification par rapport à Active Directory côté GNU/Linux, et n'inclura aucune configuration supplémentaire du côté Windows. |
| 20 | + |
| 21 | +## Intégration de Active Directory en utilisant SSSD |
| 22 | + |
| 23 | +!!! note "Remarque" |
| 24 | + |
| 25 | + Tout au long de ce guide, le nom de domaine "ad.company.local" sera utilisé pour |
| 26 | + représenter le domaine Active Directory. En accord avec ce guide, remplacez-le par le nom réel utilisé par votre domaine AD. |
| 27 | + |
| 28 | +La première étape pour relier un système GNU/Linux à AD consiste à connecter votre Cluster AD, pour s'assurer que la configuration réseau est correcte des deux côtés. |
| 29 | + |
| 30 | +### Préparations |
| 31 | + |
| 32 | +- Assurez-vous que les ports suivants sont ouverts sur votre hôte GNU/Linux dans le contrôleur de domaine : |
| 33 | + |
| 34 | + | Service | Port(s) | Notes | |
| 35 | + | -------- | ----------------- | --------------------------------------------------------------------------------------------------------- | |
| 36 | + | DNS | 53 (TCP+UDP) | | |
| 37 | + | Kerberos | 88, 464 (TCP+UDP) | Utilisé par `kadmin` pour définir et mettre à jour des mots de passe | |
| 38 | + | LDAP | 389 (TCP+UDP) | | |
| 39 | + | LDAP-GC | 3268 (TCP) | Catalogue global LDAP - vous permet de trouver des identifiants d'utilisateur à partir d'Active Directory | |
| 40 | + |
| 41 | +- Assurez-vous d'avoir configuré votre contrôleur de domaine AD en tant que serveur DNS sur votre hôte Rocky Linux : |
| 42 | + |
| 43 | + **En utilisant NetworkManager :** |
| 44 | + |
| 45 | + ```sh |
| 46 | + # where your primary NetworkManager connection is 'System eth0' and your AD |
| 47 | + # server is accessible on the IP address 10.0.0.2. |
| 48 | + [root@host ~]$ nmcli con mod 'System eth0' ipv4.dns 10.0.0.2 |
| 49 | + ``` |
| 50 | + |
| 51 | +- Assurez-vous que les horloges sont synchronisées des deux côtés (hôte AD et système GNU/Linux) |
| 52 | + |
| 53 | + **Pour vérifier la date et l'heure sur Rocky Linux :** |
| 54 | + |
| 55 | + ```sh |
| 56 | + [user@host ~]$ date |
| 57 | + Wed 22 Sep 17:11:35 BST 2021 |
| 58 | + ``` |
| 59 | + |
| 60 | +- Installez les paquets nécessaires pour la connexion à AD côté GNU/Linux : |
| 61 | + |
| 62 | + ```sh |
| 63 | + [user@host ~]$ sudo dnf install realmd oddjob oddjob-mkhomedir sssd adcli krb5-workstation |
| 64 | + ``` |
| 65 | + |
| 66 | + |
| 67 | +### Connexion automatique |
| 68 | + |
| 69 | +Maintenant, vous devriez être en mesure de vous connecter avec succès à votre ou vos serveurs AD à partir de votre hôte GNU/Linux. |
| 70 | + |
| 71 | +```sh |
| 72 | +[user@host ~]$ realm discover ad.company.local |
| 73 | +ad.company.local |
| 74 | + type: kerberos |
| 75 | + realm-name: AD.COMPANY.LOCAL |
| 76 | + domain-name: ad.company.local |
| 77 | + configured: no |
| 78 | + server-software: active-directory |
| 79 | + client-software: sssd |
| 80 | + required-package: oddjob |
| 81 | + required-package: oddjob-mkhomedir |
| 82 | + required-package: sssd |
| 83 | + required-package: adcli |
| 84 | + required-package: samba-common |
| 85 | +``` |
| 86 | + |
| 87 | +Cela sera découvert à l'aide des enregistrements SRV pertinents stockés dans votre service DNS d'Active Directory. |
| 88 | + |
| 89 | +### Rejoindre |
| 90 | + |
| 91 | +Une fois que vous avez effectué avec succès une découverte de votre installation Active Directory à partir de l'hôte Linux, vous devriez pouvoir utiliser `realmd` pour rejoindre le domaine, ce qui orchestrera la configuration de `sssd` en utilisant `adcli` et d'autres outils. |
| 92 | + |
| 93 | +```sh |
| 94 | +[user@host ~]$ sudo realm join ad.company.local |
| 95 | +``` |
| 96 | + |
| 97 | +Si ce processus affiche un problème de chiffrement comme `KDC has no support for encryption type`, essayez de mettre à jour la stratégie de chiffrement globale pour autoriser les algorithmes de chiffrement plus anciens : |
| 98 | + |
| 99 | +```sh |
| 100 | +[user@host ~]$ sudo update-crypto-policies --set DEFAULT:AD-SUPPORT |
| 101 | +``` |
| 102 | + |
| 103 | +Si ce processus réussit, vous devriez maintenant pouvoir extraire les informations `passwd` d'un utilisateur d'Active Directory. |
| 104 | + |
| 105 | +```sh |
| 106 | +[user@host ~]$ sudo getent passwd [email protected] |
| 107 | +[email protected]: *:1450400500:1450400513:Administrator:/home/ [email protected]:/bin/bash |
| 108 | +``` |
| 109 | + |
| 110 | +!!! note "Remarque" |
| 111 | + |
| 112 | + La commande `getent` récupère les données des bibliothèques Name Service Switch (NSS). Cela signifie que, contrairement à `passwd` ou `dig` par exemple, il va interroger différentes bases de données, y compris `/etc/hosts` pour `getent hosts` ou depuis `sssd` dans le cas de `getent passwd`. |
| 113 | + |
| 114 | +`realm` fournit des options intéressantes que vous pouvez utiliser : |
| 115 | + |
| 116 | +| Option | Observations | |
| 117 | +| ---------------------------------------------------------- | ---------------------------------------------------------------------- | |
| 118 | +| --computer-ou='OU=LINUX,OU=SERVERS,dc=ad,dc=company.local' | Le OU où stocker le compte du serveur | |
| 119 | +| --os-name='rocky' | Spécifie le nom du système d'exploitation stocké dans Active Directory | |
| 120 | +| --os-version='8' | Indique la version de l'OS stockée dans Active Directory | |
| 121 | +| -U admin_username | Indique un compte administrateur | |
| 122 | + |
| 123 | +### Tentative d'Authentification |
| 124 | + |
| 125 | +Now your users should be able to authenticate to your Linux host against Active Directory. |
| 126 | + |
| 127 | +**Sous Windows 10 :** (qui possède sa propre copie de OpenSSH) |
| 128 | + |
| 129 | +``` |
| 130 | +C:\Users\John.Doe> ssh -l [email protected] linux.host |
| 131 | + |
| 132 | +
|
| 133 | +Activate the web console with: systemctl enable --now cockpit.socket |
| 134 | +
|
| 135 | +Last login: Wed Sep 15 17:37:03 2021 from 10.0.10.241 |
| 136 | + |
| 137 | +``` |
| 138 | + |
| 139 | +If this succeeds, you have successfully configured Linux to use Active Directory as an authentication source. |
| 140 | + |
| 141 | +### Définir le domaine par défaut |
| 142 | + |
| 143 | +In a completely default setup, you will need to log in with your AD account by specifying the domain in your username (e.g., `[email protected]`). If this is not the desired behavior, and you instead want to be able to omit the domain name at authentication time, you can configure SSSD to default to a specific domain. |
| 144 | + |
| 145 | +This is a relatively straightforward process, requiring a configuration tweak in your SSSD configuration file. |
| 146 | + |
| 147 | +```sh |
| 148 | +[user@host ~]$ sudo vi /etc/sssd/sssd.conf |
| 149 | +[sssd] |
| 150 | +... |
| 151 | +default_domain_suffix = ad.company.local |
| 152 | +``` |
| 153 | + |
| 154 | +En ajoutant le paramètre `default_domain_suffix`, vous indiquez à SSSD (si aucun autre domaine n'est spécifié) que l'utilisateur tente de s'authentifier en tant que membre du domaine `ad.company.local`. Cela vous permet de vous authentifier en tant que `john.doe` au lieu de `[email protected]`. |
| 155 | + |
| 156 | +Pour que cette modification de configuration prenne effet, vous devez redémarrer `sssd.service` avec `systemctl`. |
| 157 | + |
| 158 | +```sh |
| 159 | +[user@host ~]$ sudo systemctl restart sssd |
| 160 | +``` |
| 161 | + |
| 162 | +De la même manière, si vous ne voulez pas que vos répertoires personnels soient suffixés par le nom de domaine, vous pouvez ajouter ces options dans votre fichier de configuration `/etc/sssd/sssd. onf`: |
| 163 | + |
| 164 | +``` |
| 165 | +[domain/ad.company.local] |
| 166 | +use_fully_qualified_names = False |
| 167 | +override_homedir = /home/%u |
| 168 | +``` |
| 169 | + |
| 170 | +N'oubliez pas de redémarrer le service `sssd`. |
| 171 | + |
| 172 | +### Restreindre à certains utilisateurs |
| 173 | + |
| 174 | +Il existe différentes méthodes pour restreindre l'accès au serveur à une liste limitée d'utilisateurs, mais cela, comme le nom le suggère, est certainement le plus simple : |
| 175 | + |
| 176 | +Ajoutez ces options dans votre fichier de configuration `/etc/sssd/sssd.conf` et redémarrez le service : |
| 177 | + |
| 178 | +``` |
| 179 | +access_provider = simple |
| 180 | +simple_allow_groups = groupe1, groupe2 |
| 181 | +simple_allow_users = user1, user2 |
| 182 | +``` |
| 183 | + |
| 184 | +Maintenant, seuls les utilisateurs du groupe1 et du groupe2, ou user1 et user2 pourront se connecter au serveur en utilisant sssd ! |
| 185 | + |
| 186 | +## Interagir avec la AD en utilisant `adcli` |
| 187 | + |
| 188 | +`adcli` est un CLI pour effectuer des actions sur un domaine Active Directory. |
| 189 | + |
| 190 | +- S'il n'est pas encore installé, installez le paquet requis : |
| 191 | + |
| 192 | +```sh |
| 193 | +[user@host ~]$ sudo dnf install adcli |
| 194 | +``` |
| 195 | + |
| 196 | +- Tester si vous avez déjà rejoint un domaine Active Directory : |
| 197 | + |
| 198 | +```sh |
| 199 | +[user@host ~]$ sudo adcli testjoin |
| 200 | +Validé avec succès pour rejoindre le domaine ad.company.local |
| 201 | +``` |
| 202 | + |
| 203 | +- Obtenir des informations plus détaillées sur le domaine : |
| 204 | + |
| 205 | +```sh |
| 206 | +[user@host ~]$ adcli info ad.company.local |
| 207 | +[domain] |
| 208 | +domain-name = ad.company.local |
| 209 | +domain-short = AD |
| 210 | +domain-forest = ad.company.local |
| 211 | +domain-controller = dc1.ad.company.local |
| 212 | +domain-controller-site = site1 |
| 213 | +domain-controller-flags = gc ldap ds kdc timeserv closest writable full-secret ads-web |
| 214 | +domain-controller-usable = yes |
| 215 | +domain-controllers = dc1.ad.company.local dc2.ad.company.local |
| 216 | +[computer] |
| 217 | +computer-site = site1 |
| 218 | +``` |
| 219 | + |
| 220 | +- Plus qu'un outil de consultation, vous pouvez utiliser adcli pour interagir avec votre domaine : gérer les utilisateurs ou les groupes, modifier le mot de passe, etc. |
| 221 | + |
| 222 | +Exemple : utiliser `adcli` pour obtenir des informations sur un ordinateur : |
| 223 | + |
| 224 | +!!! note "Remarque" |
| 225 | + |
| 226 | + Cette fois, nous fournirons un nom d'utilisateur admin grâce à l'option `-U` |
| 227 | + |
| 228 | +```sh |
| 229 | +[user@host ~]$ adcli show-computer pctest -U admin_username |
| 230 | +Password for admin_username@AD: |
| 231 | +sAMAccountName: |
| 232 | + pctest$ |
| 233 | +userPrincipalName: |
| 234 | + - not set - |
| 235 | +msDS-KeyVersionNumber: |
| 236 | + 9 |
| 237 | +msDS-supportedEncryptionTypes: |
| 238 | + 24 |
| 239 | +dNSHostName: |
| 240 | + pctest.ad.company.local |
| 241 | +servicePrincipalName: |
| 242 | + RestrictedKrbHost/pctest.ad.company.local |
| 243 | + RestrictedKrbHost/pctest |
| 244 | + host/pctest.ad.company.local |
| 245 | + host/pctest |
| 246 | +operatingSystem: |
| 247 | + Rocky |
| 248 | +operatingSystemVersion: |
| 249 | + 8 |
| 250 | +operatingSystemServicePack: |
| 251 | + - not set - |
| 252 | +pwdLastSet: |
| 253 | + 133189248188488832 |
| 254 | +userAccountControl: |
| 255 | + 69632 |
| 256 | +description: |
| 257 | + - not set - |
| 258 | +``` |
| 259 | + |
| 260 | +Exemple: utilisez `adcli` pour changer le mot de passe de l'utilisateur : |
| 261 | + |
| 262 | +```sh |
| 263 | +[user@host ~]$ adcli passwd-user user_test -U admin_username |
| 264 | +Password for admin_username@AD: |
| 265 | +Password for user_test: |
| 266 | +[user@host ~]$ |
| 267 | +``` |
| 268 | + |
| 269 | +## Dépannage |
| 270 | + |
| 271 | +Parfois, le service réseau démarre après SSSD, ce qui pose problème avec l'authentification. |
| 272 | + |
| 273 | +Aucun utilisateur AD ne sera en mesure de se connecter jusqu'à ce que vous redémarriez le service. |
| 274 | + |
| 275 | +Dans ce cas, vous devrez remplacer le fichier de service du système pour gérer ce problème. |
| 276 | + |
| 277 | +Copiez ce contenu dans `/etc/systemd/system/sssd.service` : |
| 278 | + |
| 279 | +``` |
| 280 | +[Unit] |
| 281 | +Description=System Security Services Daemon |
| 282 | +# SSSD must be running before we permit user sessions |
| 283 | +Before=systemd-user-sessions.service nss-user-lookup.target |
| 284 | +Wants=nss-user-lookup.target |
| 285 | +After=network-online.target |
| 286 | +
|
| 287 | +
|
| 288 | +[Service] |
| 289 | +Environment=DEBUG_LOGGER=--logger=files |
| 290 | +EnvironmentFile=-/etc/sysconfig/sssd |
| 291 | +ExecStart=/usr/sbin/sssd -i ${DEBUG_LOGGER} |
| 292 | +Type=notify |
| 293 | +NotifyAccess=main |
| 294 | +PIDFile=/var/run/sssd.pid |
| 295 | +
|
| 296 | +[Install] |
| 297 | +WantedBy=multi-user.target |
| 298 | +``` |
| 299 | + |
| 300 | +Lors du prochain redémarrage, le service sera relancé suivant ses nouvelles exigences et tout ira bien. |
| 301 | + |
| 302 | +## Quitter l'Active Directory |
| 303 | + |
| 304 | +Parfois, il est nécessaire de quitter la AD. |
| 305 | + |
| 306 | +Vous pouvez à nouveau procéder avec `realm` et ensuite supprimer les paquets qui ne sont plus nécessaires : |
| 307 | + |
| 308 | +```sh |
| 309 | +[user@host ~]$ sudo realm leave ad.company.local |
| 310 | +[user@host ~]$ sudo dnf remove realmd oddjob oddjob-mkhomedir sssd adcli krb5-workstation |
| 311 | +``` |
0 commit comments