Rencontre 17 - Active Directory
- 👨🏫 Déroulement du cours
- 💻 Exercices à compléter
- 📚 Ressources à consulter
- Rappel de Active Directory
- Administration AD avec PowerShell
- Gestion des comptes et des groupes
La présentation PowerPoint est sur le Teams du cours, sous le canal Général > Fichiers > Supports de cours.
Gestion du domaine Active Directory
Outils RSAT
Lorsqu'on fait la promotion d'un serveur Windows en contrôleur de domaine, les outils d'administration d'Active Directory s'installent automatiquement sur cette machine. Les outils d'administration AD font partie d'une collection de consoles MMC connue sous le nom de RSAT (Remote Server Administration Tools).
Il existe plusieurs outils RSAT, qui sont normalement activés lorsqu'on installe le rôle ou la fonctionnalité sur un serveur, afin d'être utilisés localement sur ce serveur. Ce sont des composants optionnels de Windows, qui sont prêts à être installés lorsque nécessaire. Ainsi, la console RSAT DNS est installée automatiquement sur un serveur lorsqu'on active le rôle DNS, et la console DHCP s'installe automatiquement sur un serveur DHCP, etc. On n'est pas obligé d'installer toutes les consoles RSAT, seulement celles dont on a besoin.
Lorsqu'on installe un rôle (par exemple, Active Directory Domain Services), les consoles pour AD s'installent automatiquement. Mais il arrive qu'on souhaite installer une console RSAT sur une machine pour l'administration à distance. On peut donc installer les consoles indépendamment, ce qui nous permet d'utiliser ce serveur pour administrer un service hébergé sur un autre serveur.
Par exemple, il est rare que les administrateurs AD démarrent une session interactive RDP ou locale sur un contrôleur de domaine pour y créer des utilisateurs. Ce n'est pas une bonne pratique. Généralement, les administrateurs vont opérer la console sur une autre machine, soit leur poste de travail ou sur un serveur tiers qu'on qualifie de "jump station".
Les consoles qui font partie des outils RSAT pour Active Directory sont:
- Active Directory Users and Computers (dsa.msc)
- Active Directory Sites and Services (dssite.msc)
- Active Directory Domains and Trusts (domain.msc)
- ADSIEdit (adsiedit.msc)
- Active Directory Administrative Center (dsac.exe)
- Group Policy Managament Tool (gpmc.msc)
Lorsqu'on installe les outils RSAT pour Active Directory, un module PowerShell pour manipuler Active Directory s'installe également. On peut utiliser ce module pour accéder à des commandes PowerShell utilisable dans nos scripts pour automatiser ce que nous ferions normalement à la main via les consoles MMC. Les outils RSAT installés sont exposés via l'élément Administrative Tools du menu Démarrer ou du vieux panneau de configuration de Windows (control.exe).
Les procédures et les commandes pour installer les outils RSAT ne sont pas les mêmes pour les éditions client et serveur de Windows.
Installer RSAT sous Windows Server
Sur un serveur Windows, par défaut, lorsqu'on installe un rôle ou une fonctionnalité, les outils RSAT correspondants s'installent aussi. Pour installer un outil RSAT sans installer le rôle ou la fonctionnalité, on peut utiliser les commandes dont le nom est WindowsFeature.
La commande Get-WindowsFeature
permet d'obtenir la liste des rôles et fonctionnalités (dans la même liste, contrairement à l'interface graphique). Chaque fonctionnalité a son nom qui respecte une convention de nommage, et toutes les consoles d'administrations commencent par le préfixe RSAT (à l'exception de la console de gestion des stratégies de groupe).
Pour voir tous les outils d'administration disponibles, on peut lancer:
Get-WindowsFeature -Name "RSAT-*", "GPMC"
Pour installer toutes les consoles de gestion pour Active Directory DS, y compris la console de gestion des stratégies de groupe (GPMC) et le module PowerShell, lancez la commande suivante:
Install-WindowsFeature -Name RSAT-AD-Tools, GPMC -IncludeAllSubFeature
Installer RSAT sous Windows 10/11
Sur un client Windows, les outils RSAT sont considérés comme des composants optionnels, aussi appelés "Feature-on-Demand", qui peuvent être installés à la demande. Contrairement aux serveurs, les éditions clientes de Windows doivent télécharger les composants RSAT d'Internet sur les serveurs de mises à jour de Microsoft.
Pour gérer ces composants optionnels, on peut utiliser les commande PowerShell dont le nom est "WindowsCapability".
Pour installer toutes les consoles de gestion pour Active Directory DS, y compris la console de gestion des stratégies de groupe (GPMC) et le module PowerShell, lancez la commande suivante:
Get-WindowsCapability -Online | Where-Object { $_.Name -Match "^rsat\.activedirectory|grouppolicy.*$" } | Add-WindowsCapability -Online
Module PowerShell pour ADDS
Les outils RSAT pour administrer Active Directory comprennent un module PowerShell qui offre une panoplie de commandes pour contrôler AD.
Pour l'utiliser, il faut importer le module.
Import-Module ActiveDirectory
Il n'est pas nécessaire d'exécuter ces commandes à partir d'un contrôleur de domaine. En fait, il est préférable de le faire à partir d'un autre ordinateur, pourvu qu'il soit membre du domaine. C'est le compte utilisé pour lancer les commandes qui importe, pas la machine sur laquelle elles sont lancées.
On peut ensuite lister toutes les commandes qui sont offertes par ce module.
Get-Command -Module ActiveDirectory
On peut vérifier les modules installés qui sont disponibles pour être importés. Pour vérifier quels modules sont importés dans la session PowerShell en cours, on utilise la commande Get-Module
.
Get-Module -ListAvailable
Pour charger le module Active Directory dans un script, on doit lancer la commande Import-Module
au début du script (plus précisément, avant de lancer toute commande de ce module).
Il est aussi recommandé d'ajouter une instruction #Requires
, pour faire planter le script automatiquement avant même le début de son exécution si le module Active Directory n'est pas installé. On évite ainsi des erreurs plus tard dans le script.
#Requires -Module ActiveDirectory
Import-Module ActiveDirectory
Plus de détails sur l'instruction #Requires
ici: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_requires?view=powershell-5.1
Informations sur le domaine et la forêt
Les commandes Get-ADDomain
et Get-ADForest
permettent d'obtenir de l'information sur le domaine et la forêt respectivement, tels que le niveau fonctionnel, les contrôleurs de domaine qui disposent d'un rôle FSMO, les conteneurs par défaut, le SID du domaine, la topologie des sites, etc.
Une information intéressante est celle du contexte de nom par défaut (Default Naming Context). Il équivaut à la partie domaine à la fin des noms distinctifs des objets dans le domaine. On peut l'obtenir à l'aide de la commande Get-RootDSE
.
(Get-ADRootDSE).defaultNamingContext
Unités d'organisation
Les unités d'organisation (Organizational Unit, ou OU) sont des conteneurs dans lesquels on peut disposer des objets du domaine et sur lesquels on peut lier des stratégies de groupe (GPO). Ce ne sont pas tous les conteneurs qui sont des unités d'organisation; ces dernières portent le préfixe OU=
dans leur nom distinctif relatif.
Recherche d'une unité d'organisation
Pour obtenir de l'information sur une unité d'organisation spécifique, on peut utiliser la commande Get-ADOrganizationalUnit
en lui fournissant le nom distinctif (DN) de l'unité d'organisation.
Get-ADOrganizationalUnit -Identity "OU=Laptops,DC=ad,DC=mondomaine,DC=com"
On peut obtenir la liste de toutes les unités d'organisation du domaine en spécifiant le filtre *
Get-ADOrganizationalUnit -Filter * | Format-Table
Création d'une unit é d'organisation
Pour créer une unité d'organisation dans un domaine, on utilise la commande New-ADOrganizationalUnit
en lui spécifiant le nom de l'OU à créer ainsi que le nom distinctif complet du conteneur parent.
$ADOrganizationalUnitSplat = @{
Name = "Laptops"
Path = "OU=Laptops,DC=ad,DC=mondomaine,DC=com"
}
New-ADOrganizationalUnit @ADOrganizationalUnitSplat
La commande New-ADOrganizationalUnit
ne retourne pas d'objet par défaut dans le pipeline. Pour qu'elle en retourne un, on n'a qu'à lui passer le switch -PassThru
.
New-ADOrganizationalUnit @ADOrganizationalUnitSplat -PassThru
Comptes utilisateurs
Recherche d'un compte utilisateur
Pour rechercher un utilisateur dans Active Directory, la commande à utiliser est Get-ADUser
.
Pour rechercher un utilisateur spécifique, on peut spécifier le paramètre -Identity
. Ce paramètre peut admettre comme valeur le nom d'utilisateur court (sAMAccountName), le nom distinctif (DN), le SID ou le GUID.
Get-ADUser -Identity "zzappa"
Pour rechercher les utilisateurs obéissant à certains critères, on peut utiliser le paramètre -Filter
.
Get-ADUser -Filter 'sAMAccountName -like "z*"'
Vérification de l'existence d'un compte utilisateur
Pour tester l'existence d'un utilisateur dans le domaine, voici un exemple:
if (Get-ADUser -Filter 'sAMAccountName -eq "zzappa"') {
Write-Host "L'utilisateur existe."
}
else {
Write-Host "L'utilisateur n'existe pas."
}
Création d'un nouveau compte utilisateur
Pour créer un nouvel utilisateur, on peut utiliser la commande New-ADUser
. Étant donné la quantité d'attributs disponibles dans les objets utilisateurs, cette commande admet un très grand nombre d'arguments. Voici un exemple de création d'un compte utilisateur (la plupart de ces attributs sont facultatifs; en fait, seul le paramètre Name
est obligatoire).
$ADUserSplat = @{
Path = "OU=Utilisateurs,DC=ad,DC=mondomaine,DC=com"
Name = "Zoe Zappa"
GivenName = "Zoé"
Surname = "Zappa"
Initials = "Z."
Title = "Dr."
DisplayName = "Dr. Zoé Zappa, Ph.D."
Description = "VP de chépoquoi"
SamAccountName = "zzappa"
UserPrincipalName = "zzappa@ad.mondomaine.com"
AccountPassword = "Passw0rd" | ConvertTo-SecureString -AsPlainText -Force
ChangePasswordAtLogon = $true
StreetAddress = "42 rue des timinous"
City = "Minoupolis"
Country = "CA"
PostalCode = "H0H 0H0"
MobilePhone = "(555) 555-5555"
EmployeeNumber = "2546011"
EmailAddress = "zzappa@mondomaine.com"
Enabled = $true
}
New-ADUser @ADUserSplat
Vous pouvez consulter la liste des paramètres de cette commande sur sa page de documentation.
Modification d'un compte utilisateur existant
On peut utiliser la commande Set-ADUser
pour modifier un attribut d'un compte utilisateur existant. L'exemple suivant modifie l'adresse courriel de l'utilisateur Bob.
$ADSetUserSplat = @{
Identity = "Bob"
EmailAddress = "bob@mondomaine.com"
}
Set-ADUser @ADSetUserSplat
Suppression d'un compte utilisateur
On peut utiliser la commande Remove-ADUser
pour supprimer un compte utilisateur. Voici un exemple en lui passant un compte utilisateur par le pipeline.
Get-ADUser -Identity "zzappa" | Remove-ADUser
Dans son comportement par défaut, Remove-ADUser
demande une confirmation. Pour rendre l'opération complètement automatique, on peut désactiver le switch -Confirm
, qui est activé par défaut (étrangement).
Remove-ADUser -Identity "zzappa" -Confirm:$false
Groupes
Recherche d'un groupe
Pour obtenir de l'information sur un groupe, on peut utiliser la commande Get-ADGroup
. Cette commande s'emploie de la même manière que pour les utilisateurs.
Get-ADGroup -Identity "Comptables"
Le paramètre -Identity
peut admettre le nom du compte (sAMAccountName) mais aussi son SID, son GUID ou son nom distinctif (DN).
Get-ADGroup -Identity "CN=Comptables,OU=Groupes,DC=ad,DC=mondomaine,DC=com"
Vérification de l'existence d'un groupe
Pour vérifier si un groupe existe, on peut employer la même logique que pour les utilisateurs.
if (Get-ADGroup -Filter 'sAMAccountName -eq "Comptables"') {
Write-Host "L'utilisateur existe."
}
else {
Write-Host "L'utilisateur n'existe pas."
}
Création d'un nouveau groupe
Pour créer un nouveau groupe, voici un exemple. Il faut minimalement spécifier son nom, sa portée (global, domaine local ou universel) ainsi que le nom distinctif complet du conteneur dans lequel le créer.
$ADGroupSplat = @{
Name = "Gestionnaires"
GroupScope = "Global"
Path = "OU=Groupes,DC=ad,DC=mondomaine,DC=com"
}
New-ADGroup @ADGroupSplat
Membres de groupes
Un groupe possède des membres, qui peuvent être soit des utilisateurs, des ordinateurs ou d'autres groupes. On nomme ces objets des principaux de sécurité.
Obtention des membres d'un groupe
Pour consulter quels principaux de sécurité sont membres d'un groupe spécifique, voici un exemple:
Get-ADGroupMember -Identity "Comptables"
On peut aussi passer un groupe par le pipeline.
Get-ADGroup -Identity "Comptables" | Get-ADGroupMember
Ajout de membres à un groupe
Pour ajouter un utilisateur à un groupe, voici un exemple:
Add-ADGroupMember -Identity "Admins du domaine" -Members "zzappa"
On peut également ajouter un autre type de principal de sécurité, comme un compte ordinateur ou un groupe. Le procédé est alors exactement le même; il suffit de donner le nom du groupe ou de l'ordinateur dans l'argument -Members
. Par ailleurs, puisque le paramètre -Members
admet un tableau, il est possible de lui passer un tableaux de membres, qui seront tous ajoutés d'un coup au groupe.
Retrait de membres à un groupe
Pour retirer un compte d'un groupe, il suffit d'utiliser cette commande:
Remove-ADGroupMember -Identity "Admins du domaine" -Members "zzappa"
Pour éviter de dépendre de la langue du système et de la traduction de ses noms de groupes, on peut utiliser le SID des groupes bien connus, comme le groupe des admins du domaine.
Le SID du groupe des admins du domaine est constitué du SID du domaine suivi du RID 512. Ainsi, voici comment on peut le trouver dynamiquement.
$DomainSID = (Get-ADDomain).DomainSID.Value
$DomainAdminSID = "$DomainSID-512"
Add-ADGroupMember -Identity $DomainAdminSID -Members "zzappa"
Attributs
Lorsqu'on utilise des commandes Get comme Get-ADUser
ou Get-ADComputer
, ce ne sont pas tous les attributs des objets qui sont interrogés, et ce, même si on le passe dans un Select-Object *
. Pour interroger un attribut qui ne l'est pas par défaut, il faut le spécifier au moyen du paramètre -Properties
.
Get-ADUser -Identity "zzappa" -Properties *
Par exemple, pour obtenir la date de création, on peut ajouter la propriété Created
, qui n'est pas incluse dans l'objet par défaut.
Outils supplémentaires
Pour parcourir graphiquement les attributs des objets, on peut utiliser divers outils.
Fonctionnalités avancées de la console ADUC
Tout d'abord, la console Utilisateurs et ordinateurs Active Directory (dsa.msc) offre un onglet Éditeur d'attributs. Il n'est pas visible par défaut; il faut d'abord activer les fonctionnalités avancées de la console via le menu Affichage.
ADSI Edit
Il existe également un autre outil provenant des outils RSAT: l'outil de modification ADSI (adsiedit.msc). Il permet de parcourir la base de données LDAP du domaine et permet un meilleur contrôle du domaine, à plus bas niveau.
ADExplorer (Sysinternals)
Finalement, l'outil ADExplorer, provenant de la suite SysInternals de Microsoft, permet de parcourir le domaine à très bas niveau, tout comme ADSIEdit, mais ne nécessite pas l'installation des outils RSAT. Il permet une navigation plus fluide que ADSIEdit, en montrant l'arborescence LDAP dans le panneau de gauche et les attributs de l'objet sélectionné dans le panneau de droite. Cet outil n'est pas inclus dans Windows, il faut le télécharger à partir du site Web de Microsoft.
Module AdsiPS
Le module Active Directory de Windows est très pratique mais présente deux inconvénients:
- Il nécessite l'installation des outils RSAT (donc des droits admin locaux et un accès à Microsoft Update)
- Ses commandes n'emploient pas le protocole LDAP standard (port 389/tcp) mais plutôt ADWS (port 9389/tcp)
Mon collègue François-Xavier Cat a développé un module PowerShell qui se veut une alternative au module Active Directory. Il ne nécessite pas d'installation de RSAT et passe par le protocole LDAP.
Voici le lien vers son module: https://github.com/lazywinadmin/AdsiPS
La manière la plus simple d'installer le module est avec la commande Install-Module
Install-Module -Name AdsiPS
Si vous ne disposez pas de droits d'administration sur votre machine, vous pouvez alors le faire seulement pour votre profil utilisateur
Install-Module -Name AdsiPS -Scope CurrentUser
Consultez cette page pour connaître la syntaxe des commandes de ce module: https://github.com/lazywinadmin/AdsiPS/blob/master/docs/doc_functions.md
EXTRA: SID, RID et principaux de sécurité
Dans les services de domaine Active Directory, certains objets ont la propriété de pouvoir se faire attribuer des droits à des ressources. Ce sont ces types d'objets qui peuvent, par exemple, être ajoutés à une liste de contrôle d'accès (ACL). Ces objets se nomment les principaux de sécurité.
Active Directory compte quatre types de principaux de sécurité: les comptes utilisateurs, les comptes d'ordinateurs, les groupes, ainsi que les comptes de service gérés, plus rarement utilisés. Ces objets possèdent un numéro unique de sécurité, le SID, et c'est ce numéro qui est référencé dans les listes de permissions.
Principaux de sécurité Active Directory
Certains utilisateurs et groupes dans un domaine Active Directory sont créés automatiquement dès la création du domaine. Leur nom peut varier d'un domaine à l'autre, en fonction de la langue du premier contrôleur de domaine ayant été promu. Dans un domaine en anglais, le groupe des admins du domaine se nomme "Domain Admins", alors que dans un domaine en français, il se nomme "Admins du domaine". Même chose pour le compte Administrateur, qui se nomme Administrateur en français, et qu'il est même possible de renommer au moyen d'une GPO. Cela peut compliquer le développement de scripts, qu'on a avantage à rendre le plus général possible.
À titre d'exemple, voici le SID du groupe des admins du domaine sur un domaine donné. Il est composé de l'identifiant du domaine, auquel on greffe un identifiant relatif, le RID, à la fin de celui-ci. Le contrôleur de domaine qui détient le rôle FSMO de RID Master est responsable de la gestion de ces RID, afin de s'assurer qu'ils sont uniques dans tout le domaine.
Les principaux de domaine, quant à eux, sont relatifs au domaine, mais leur RID est toujours le même d'un domaine à l'autre. Le groupe des admins du domaine possède le RID 512, donc leur SID est équivalent au SID du domaine, suivi de "-512". On peut donc obtenir le SID de tout principal de domaine simplement en connaissant son RID ainsi que le SID du domaine, qui peut être obtenu par la commande Get-ADDomain. Les identifiants sont documentés sur le site de Microsoft.
En voici quelques exemples:
Nom | Type | RID (décimal) | RID (hexadécimal) |
---|---|---|---|
Administrateur | Utilisateur | 500 | 0x000001F4 |
Admins du domaine | Groupe global | 512 | 0x00000200 |
Utilisateurs du domaine | Groupe global | 513 | 0x00000201 |
Ordinateurs du domaine | Groupe global | 515 | 0x00000203 |
Contrôleurs de domaine | Groupe global | 516 | 0x00000204 |
Administrateurs du schéma | Groupe universel | 518 | 0x00000206 |
Administrateurs de l'entreprise | Groupe universel | 519 | 0x00000207 |
Il est préférable d'utiliser le SID d'un de ces principaux, plutôt que son nom, car ainsi, le script peut fonctionner indépendamment de la langue. Il suffit de réunir le SID du domaine et le RID du principal pour obtenir son SID.
$DOMAIN_GROUP_RID_ADMINS = 512
$DomainSID = (Get-ADDomain).DomainSid.Value
$DomainAdminSID = "$DomainSID-$DOMAIN_GROUP_RID_ADMINS"
Get-ADGroup -Identity $DomainAdminSID
Groupes de sécurité locaux
Windows dispose de groupes créés automatiquement dès son installation, ainsi que des principaux spéciaux, comme les "utilisateurs authentifiés" ou le groupe "tout le monde". Ces principaux ont toujours le même SID peu importe la machine et peu importe la langue. Les principaux locaux possèdent toujours le même SID.
Nom | SID |
---|---|
Administrateurs | S-1-5-32-544 |
Utilisateurs | S-1-5-32-545 |
Utilisateurs du bureau à distance | S-1-5-32-555 |
Invités | S-1-5-32-546 |
Utilisateurs authentifiés | S-1-5-11 |
SYSTÈME | S-1-5-18 |
Tout le monde | S-1-1-0 |
Référence: Security identifiers (Windows 10) - Windows security | Microsoft Docs