Windows - Gestion des Droits et Groupes
- Fondamentaux
- Permissions NTFS
- Partage reseau
- Groupes et Active Directory
- GPO et delegation
- PowerShell
- Bonnes pratiques et depannage
1. Concepts fondamentaux
Avant de manipuler les permissions Windows, il est essentiel de comprendre les concepts de base qui regissent le systeme de securite.
1.1 SID (Security Identifier)
Chaque objet de securite (utilisateur, groupe, ordinateur) possede un SID unique. C'est un identifiant interne utilise par Windows pour gerer les droits, independamment du nom affiche.
# Afficher le SID de l'utilisateur courant
whoami /user
# Afficher tous les SID des groupes de l'utilisateur courant
whoami /groups
# Trouver le SID d'un utilisateur specifique (PowerShell)
(New-Object System.Security.Principal.NTAccount("DOMAINE\utilisateur")).Translate([System.Security.Principal.SecurityIdentifier]).Value
# Trouver le SID d'un utilisateur AD
Get-ADUser -Identity "jdupont" | Select-Object SID
# SID connus (Well-Known SIDs)
# S-1-5-18 : SYSTEM (Local System)
# S-1-5-32-544 : Administrateurs (Builtin)
# S-1-5-32-545 : Utilisateurs (Builtin)
# S-1-5-11 : Utilisateurs authentifies
# S-1-1-0 : Tout le monde (Everyone)
1.2 ACL (Access Control List)
Une ACL est une liste ordonnee d'entrees de controle d'acces attachee a un objet (fichier, dossier, cle de registre, objet AD). Il existe deux types :
- DACL (Discretionary ACL) : definit qui peut acceder a l'objet et avec quels droits
- SACL (System ACL) : definit les regles d'audit (qui est surveille lors de l'acces)
# Afficher la DACL d'un fichier ou dossier
icacls "C:\Donnees\Partage"
# Afficher la DACL en PowerShell
Get-Acl "C:\Donnees\Partage" | Format-List
# Afficher les ACL detaillees
(Get-Acl "C:\Donnees\Partage").Access | Format-Table IdentityReference, FileSystemRights, AccessControlType, IsInherited -AutoSize
1.3 ACE (Access Control Entry)
Chaque entree dans une ACL est un ACE. Un ACE definit :
- Le SID du principal (utilisateur ou groupe)
- Le type : Allow (autoriser) ou Deny (refuser)
- Les droits accordes ou refuses
- Les flags d'heritage (comment l'ACE se propage)
1.4 Heritage (Inheritance)
Par defaut, les sous-dossiers et fichiers heritent des permissions de leur dossier parent. L'heritage peut etre :
- Active : les permissions du parent se propagent aux enfants
- Desactive : les permissions sont definies explicitement sur chaque objet
- Mixte : certaines permissions sont heritees, d'autres sont explicites
# Verifier si l'heritage est active sur un dossier (PowerShell)
(Get-Acl "C:\Donnees\Partage").AreAccessRulesProtected
# True = heritage DESACTIVE (les regles sont protegees)
# False = heritage ACTIVE
# Desactiver l'heritage et CONSERVER les permissions heritees en tant que permissions explicites
icacls "C:\Donnees\Partage" /inheritance:d
# Desactiver l'heritage et SUPPRIMER les permissions heritees
icacls "C:\Donnees\Partage" /inheritance:r
# Reactiver l'heritage
icacls "C:\Donnees\Partage" /inheritance:e
1.5 Permissions NTFS vs Permissions de partage
Il est crucial de comprendre la difference :
| Critere | Permissions NTFS | Permissions de partage |
|---|---|---|
| S'appliquent | En local ET a distance | Uniquement a distance (via reseau) |
| Granularite | Tres fine (13+ permissions speciales) | Basique (3 niveaux : Lecture, Modification, Controle total) |
| Heritage | Oui, dossier par dossier | Non, uniquement au niveau du partage |
| Acces combine | Le droit le plus restrictif entre NTFS et partage s'applique | |
2. Permissions NTFS standard
Les permissions NTFS standard sont des regroupements de permissions speciales, concus pour simplifier la gestion courante.
2.1 Les 6 permissions standard
| Permission | Description | Fichier | Dossier |
|---|---|---|---|
| Lecture (Read) | Voir le contenu, les attributs, les permissions | Ouvrir et lire | Lister le contenu |
| Lecture et execution (Read & Execute) | Lecture + execution de programmes | Executer | Traverser le dossier |
| Afficher le contenu du dossier (List Folder Contents) | Similaire a Lecture et execution mais herite differemment | N/A | Lister uniquement |
| Ecriture (Write) | Creer des fichiers/dossiers, modifier les attributs | Modifier le contenu | Creer des sous-elements |
| Modification (Modify) | Lecture + Ecriture + Suppression | Tout sauf changer les permissions | Tout sauf changer les permissions |
| Controle total (Full Control) | Toutes les permissions + changer les permissions et le proprietaire | Tout | Tout |
2.2 Appliquer des permissions NTFS via l'interface graphique
Methode GUI pour Windows Server 2019+ et Windows 10+ :
- Clic droit sur le dossier/fichier > Proprietes
- Onglet Securite
- Cliquer sur Modifier... pour modifier les permissions
- Cliquer sur Ajouter... pour ajouter un utilisateur ou groupe
- Saisir le nom > Verifier les noms > OK
- Cocher les permissions souhaitees (Autoriser / Refuser)
- Cliquer sur Appliquer puis OK
2.3 Appliquer des permissions NTFS en ligne de commande
# Donner le droit de Lecture a un utilisateur
icacls "C:\Donnees\Partage" /grant "DOMAINE\jdupont:(R)"
# Donner le droit de Modification
icacls "C:\Donnees\Partage" /grant "DOMAINE\jdupont:(M)"
# Donner le Controle total
icacls "C:\Donnees\Partage" /grant "DOMAINE\jdupont:(F)"
# Donner Lecture et Execution
icacls "C:\Donnees\Partage" /grant "DOMAINE\jdupont:(RX)"
# Donner Ecriture
icacls "C:\Donnees\Partage" /grant "DOMAINE\jdupont:(W)"
# Donner des droits sur un dossier ET ses sous-elements (heritage)
icacls "C:\Donnees\Partage" /grant "DOMAINE\jdupont:(OI)(CI)(M)"
# (OI) = Object Inherit : s'applique aux fichiers enfants
# (CI) = Container Inherit : s'applique aux sous-dossiers
3. Permissions NTFS speciales et heritage
3.1 Les 13 permissions speciales
Chaque permission standard est composee d'une ou plusieurs permissions speciales :
| Permission speciale | Code icacls | Description |
|---|---|---|
| Traverse Folder / Execute File | X | Traverser un dossier / Executer un fichier |
| List Folder / Read Data | RD | Lister le dossier / Lire les donnees |
| Read Attributes | RA | Lire les attributs |
| Read Extended Attributes | REA | Lire les attributs etendus |
| Create Files / Write Data | WD | Creer des fichiers / Ecrire des donnees |
| Create Folders / Append Data | AD | Creer des dossiers / Ajouter des donnees |
| Write Attributes | WA | Modifier les attributs |
| Write Extended Attributes | WEA | Modifier les attributs etendus |
| Delete Subfolders and Files | DC | Supprimer les sous-dossiers et fichiers |
| Delete | DE | Supprimer l'objet lui-meme |
| Read Permissions | RC | Lire les permissions |
| Change Permissions | WDAC | Modifier les permissions |
| Take Ownership | WO | Prendre possession |
# Accorder des permissions speciales avec icacls
# Exemple : Autoriser un utilisateur a creer des fichiers et lire le contenu, sans pouvoir supprimer
icacls "C:\Donnees\Partage" /grant "DOMAINE\jdupont:(OI)(CI)(RD,WD,AD,RA,REA,RC)"
# Donner la permission de modifier les permissions (WDAC) - delegation
icacls "C:\Donnees\Projet" /grant "DOMAINE\chef-projet:(OI)(CI)(WDAC)"
3.2 Flags d'heritage detailles
Les flags d'heritage controlent la propagation des permissions :
| Flag | Nom complet | Effet |
|---|---|---|
| (OI) | Object Inherit | Les fichiers enfants heritent |
| (CI) | Container Inherit | Les sous-dossiers heritent |
| (IO) | Inherit Only | L'ACE ne s'applique PAS a l'objet courant, seulement aux enfants |
| (NP) | No Propagate | L'heritage ne se propage qu'au premier niveau |
| (I) | Inherited | Indique que l'ACE est heritee (non explicite) |
# Appliquer des droits UNIQUEMENT aux sous-dossiers (pas au dossier courant, pas aux fichiers)
icacls "C:\Donnees" /grant "DOMAINE\groupe:(CI)(IO)(M)"
# Appliquer des droits UNIQUEMENT aux fichiers contenus (pas aux dossiers)
icacls "C:\Donnees" /grant "DOMAINE\groupe:(OI)(IO)(M)"
# Appliquer au dossier courant + sous-dossiers + fichiers (le plus courant)
icacls "C:\Donnees" /grant "DOMAINE\groupe:(OI)(CI)(M)"
# Appliquer uniquement au premier niveau de sous-dossiers et fichiers (pas de propagation profonde)
icacls "C:\Donnees" /grant "DOMAINE\groupe:(OI)(CI)(NP)(M)"
3.3 Gestion de l'heritage via GUI
- Clic droit > Proprietes > onglet Securite > Avance...
- En bas de la fenetre, voir la case "Inclure les autorisations heritables provenant du parent de cet objet"
- Decocher pour bloquer l'heritage
- Choisir : Convertir (conserver en explicite) ou Supprimer (tout effacer)
- Pour remplacer l'heritage sur tous les enfants : cocher "Remplacer toutes les entrees d'autorisation des objets enfants..."
4. Gestion avec icacls
icacls est l'outil en ligne de commande principal pour gerer les permissions NTFS sous Windows Server 2019+ et Windows 10+.
4.1 Syntaxe de base
# Syntaxe generale
icacls "chemin" /grant "utilisateur:(permissions)"
icacls "chemin" /deny "utilisateur:(permissions)"
icacls "chemin" /remove "utilisateur"
# Codes de permissions
# F = Full Control (Controle total)
# M = Modify (Modification)
# RX = Read & Execute (Lecture et execution)
# R = Read (Lecture)
# W = Write (Ecriture)
# D = Delete (Suppression)
4.2 Consulter les permissions
# Afficher les permissions d'un dossier
icacls "C:\Donnees\Partage"
# Afficher les permissions de maniere recursive (tous les sous-elements)
icacls "C:\Donnees\Partage" /T
# Afficher les permissions d'un fichier specifique
icacls "C:\Donnees\Partage\rapport.docx"
# Sauvegarder les permissions dans un fichier (pour backup ou audit)
icacls "C:\Donnees\Partage" /save "C:\Backup\permissions.txt" /T
4.3 Modifier les permissions
# GRANT : Ajouter des permissions (sans toucher aux existantes)
icacls "C:\Donnees\Compta" /grant "DOMAINE\GRP_Compta_RW:(OI)(CI)(M)"
# GRANT:R : Remplacer les permissions existantes de l'utilisateur
icacls "C:\Donnees\Compta" /grant:r "DOMAINE\GRP_Compta_RW:(OI)(CI)(M)"
# DENY : Refuser explicitement un droit
icacls "C:\Donnees\Confidentiel" /deny "DOMAINE\stagiaires:(OI)(CI)(F)"
# REMOVE : Retirer toutes les permissions d'un utilisateur/groupe
icacls "C:\Donnees\Partage" /remove "DOMAINE\ancien-employe"
# REMOVE:G : Retirer uniquement les autorisations (garder les refus)
icacls "C:\Donnees\Partage" /remove:g "DOMAINE\utilisateur"
# REMOVE:D : Retirer uniquement les refus (garder les autorisations)
icacls "C:\Donnees\Partage" /remove:d "DOMAINE\utilisateur"
4.4 Operations recursives et restauration
# Appliquer des permissions de maniere recursive
icacls "C:\Donnees\Partage" /grant "DOMAINE\groupe:(OI)(CI)(M)" /T
# Remplacer le proprietaire de maniere recursive
icacls "C:\Donnees\Partage" /setowner "DOMAINE\administrateur" /T
# Reinitialiser les permissions (retablir l'heritage du parent)
icacls "C:\Donnees\Partage" /reset /T
# Restaurer les permissions depuis une sauvegarde
icacls "C:\Donnees" /restore "C:\Backup\permissions.txt"
/grant:r au lieu de /grant lorsque vous voulez definir des droits precis. La variante sans :r ajoute les permissions aux droits existants, ce qui peut creer des ACL complexes et difficiles a gerer.
4.5 Exemples pratiques courants
# Creer un dossier de partage type entreprise
mkdir "C:\Donnees\Service-RH"
# Retirer les droits par defaut (heritage) et tout nettoyer
icacls "C:\Donnees\Service-RH" /inheritance:r
# Remettre les droits essentiels
icacls "C:\Donnees\Service-RH" /grant "BUILTIN\Administrateurs:(OI)(CI)(F)"
icacls "C:\Donnees\Service-RH" /grant "NT AUTHORITY\SYSTEM:(OI)(CI)(F)"
# Ajouter les groupes metier
icacls "C:\Donnees\Service-RH" /grant "DOMAINE\GRP_RH_Lecture:(OI)(CI)(R)"
icacls "C:\Donnees\Service-RH" /grant "DOMAINE\GRP_RH_Modif:(OI)(CI)(M)"
icacls "C:\Donnees\Service-RH" /grant "DOMAINE\GRP_RH_Admin:(OI)(CI)(F)"
# Verifier le resultat
icacls "C:\Donnees\Service-RH"
5. Permissions de partage (SMB)
Les permissions de partage s'appliquent uniquement lors d'un acces distant via le reseau (protocole SMB/CIFS). Elles sont independantes des permissions NTFS.
5.1 Les 3 niveaux de permissions de partage
| Permission | Description |
|---|---|
| Lecture (Read) | Afficher les noms de fichiers/dossiers, lire les fichiers, executer les programmes |
| Modification (Change) | Lecture + creer/modifier/supprimer des fichiers et dossiers |
| Controle total (Full Control) | Modification + modifier les permissions du partage |
5.2 Creer un partage via GUI
- Clic droit sur le dossier > Proprietes > onglet Partage
- Cliquer sur Partage avance...
- Cocher "Partager ce dossier"
- Definir le Nom du partage (ajouter un
$a la fin pour un partage masque) - Cliquer sur Autorisations pour definir les droits de partage
- Retirer "Tout le monde" et ajouter les groupes appropries
5.3 Creer un partage en ligne de commande
# Creer un partage avec net share
net share NomPartage="C:\Donnees\Partage" /grant:"DOMAINE\GRP_Utilisateurs",CHANGE /grant:"DOMAINE\GRP_Admins",FULL
# Creer un partage masque (avec $)
net share Partage$="C:\Donnees\Partage" /grant:"DOMAINE\GRP_Utilisateurs",READ
# Lister tous les partages du serveur
net share
# Supprimer un partage
net share NomPartage /delete
# Afficher les details d'un partage
net share NomPartage
5.4 Gerer les partages avec PowerShell (Windows Server 2019+)
# Creer un nouveau partage SMB
New-SmbShare -Name "Compta" -Path "C:\Donnees\Compta" -Description "Partage comptabilite" `
-FullAccess "DOMAINE\GRP_Compta_Admin" `
-ChangeAccess "DOMAINE\GRP_Compta_Modif" `
-ReadAccess "DOMAINE\GRP_Compta_Lecture"
# Creer un partage masque
New-SmbShare -Name "Admin$" -Path "C:\Admin" -FullAccess "DOMAINE\Admins du domaine"
# Lister tous les partages
Get-SmbShare
# Afficher les permissions d'un partage
Get-SmbShareAccess -Name "Compta"
# Modifier les permissions d'un partage existant
Grant-SmbShareAccess -Name "Compta" -AccountName "DOMAINE\GRP_Direction" -AccessRight Read -Force
Revoke-SmbShareAccess -Name "Compta" -AccountName "DOMAINE\ancien-groupe" -Force
# Supprimer un partage
Remove-SmbShare -Name "Compta" -Force
# Lister les sessions SMB actives
Get-SmbSession
# Lister les fichiers ouverts sur les partages
Get-SmbOpenFile
6. Partage vs NTFS - Combinaison des droits
Lorsqu'un utilisateur accede a un dossier partage via le reseau, les deux niveaux de permissions s'appliquent. Le resultat effectif est toujours le plus restrictif des deux.
6.1 Regle de combinaison
Acces effectif = MIN(Permission Partage, Permission NTFS)
| Permission Partage | Permission NTFS | Acces effectif (via reseau) |
|---|---|---|
| Controle total | Lecture | Lecture |
| Lecture | Controle total | Lecture |
| Modification | Modification | Modification |
| Controle total | Modification | Modification |
6.2 Bonne pratique recommandee
La strategie la plus simple et la plus efficace :
- Definir les permissions de partage a "Tout le monde : Controle total" (ou "Utilisateurs authentifies : Modification")
- Gerer la securite uniquement via les permissions NTFS
# Strategie recommandee - Partage ouvert, securite NTFS
# 1. Creer le partage avec droits larges
New-SmbShare -Name "Donnees" -Path "C:\Donnees" `
-ChangeAccess "Utilisateurs authentifies" `
-FullAccess "DOMAINE\Admins du domaine"
# 2. Securiser finement avec NTFS
icacls "C:\Donnees" /inheritance:r
icacls "C:\Donnees" /grant "BUILTIN\Administrateurs:(OI)(CI)(F)"
icacls "C:\Donnees" /grant "NT AUTHORITY\SYSTEM:(OI)(CI)(F)"
icacls "C:\Donnees" /grant "DOMAINE\GRP_Donnees_Lecture:(OI)(CI)(R)"
icacls "C:\Donnees" /grant "DOMAINE\GRP_Donnees_Modif:(OI)(CI)(M)"
7. Groupes Active Directory
Active Directory propose differents types et etendues de groupes pour organiser la gestion des acces dans un domaine ou une foret.
7.1 Types de groupes
| Type | Usage | SID |
|---|---|---|
| Securite | Attribution de permissions sur des ressources (fichiers, partages, GPO, etc.) | Oui |
| Distribution | Listes de diffusion email (Exchange, Microsoft 365). Ne peut PAS etre utilise pour les permissions. | Non |
7.2 Etendues de groupes
| Etendue | Membres possibles | Ou utiliser | Usage typique |
|---|---|---|---|
| Local de domaine (Domain Local) | Tout objet de la foret + groupes approuves | Uniquement dans le domaine local | Attribution des permissions sur les ressources |
| Global | Uniquement des objets du meme domaine | Partout dans la foret | Regrouper des utilisateurs par role/service |
| Universel | Tout objet de la foret | Partout dans la foret | Environnements multi-domaines |
7.3 Creer et gerer des groupes AD via GUI
- Ouvrir Utilisateurs et ordinateurs Active Directory (dsa.msc)
- Naviguer jusqu'a l'OU souhaitee
- Clic droit > Nouveau > Groupe
- Definir le nom, l'etendue et le type
- Pour ajouter des membres : double-cliquer sur le groupe > onglet Membres > Ajouter
7.4 Convention de nommage recommandee
# Format : GRP_[Service/Projet]_[NiveauAcces]
# Exemples :
GRP_Compta_Lecture # Lecture sur les dossiers comptabilite
GRP_Compta_Modif # Modification sur les dossiers comptabilite
GRP_Compta_Admin # Controle total sur les dossiers comptabilite
GRP_RH_Lecture # Lecture sur les dossiers RH
GRP_Projet-Alpha_Modif # Modification sur le projet Alpha
GRP_Direction_Lecture # Lecture pour la direction
# Pour les groupes globaux (roles) :
ROLE_Comptables # Tous les comptables
ROLE_DRH # Personnel des ressources humaines
ROLE_Managers # Tous les managers
8. Groupes locaux (Windows 10+)
Sur les postes clients Windows 10+ (hors domaine ou en complement du domaine), des groupes locaux predefinis (builtin) gerent les acces systeme.
8.1 Groupes builtin principaux
| Groupe | Description |
|---|---|
| Administrateurs | Acces complet au systeme. Membres : administrateur local + admins du domaine (si joint) |
| Utilisateurs | Droits standard. Peuvent executer des applications, pas installer de logiciels systeme |
| Utilisateurs du Bureau a distance | Autorises a se connecter via RDP |
| Operateurs de sauvegarde | Peuvent sauvegarder et restaurer des fichiers, meme sans droits NTFS |
| Utilisateurs avec pouvoir | Droits intermediaires (obsolete depuis Vista, conserve pour compatibilite) |
| Invites | Acces tres restreint, compte generalement desactive |
| Operateurs de configuration reseau | Peuvent modifier les parametres reseau (IP, DNS, etc.) |
| Utilisateurs du journal de performances | Acces aux compteurs et journaux de performances |
8.2 Gerer les groupes locaux en ligne de commande
# Lister tous les groupes locaux
net localgroup
# Afficher les membres d'un groupe local
net localgroup "Administrateurs"
net localgroup "Utilisateurs du Bureau a distance"
# Ajouter un utilisateur a un groupe local
net localgroup "Administrateurs" "DOMAINE\jdupont" /add
net localgroup "Utilisateurs du Bureau a distance" "DOMAINE\support-it" /add
# Retirer un utilisateur d'un groupe local
net localgroup "Administrateurs" "DOMAINE\jdupont" /delete
# Creer un groupe local personnalise
net localgroup "Support-Applicatif" /add
# Supprimer un groupe local personnalise
net localgroup "Support-Applicatif" /delete
8.3 Gerer les groupes locaux avec PowerShell
# Lister les groupes locaux
Get-LocalGroup
# Afficher les membres d'un groupe local
Get-LocalGroupMember -Group "Administrateurs"
# Ajouter un utilisateur du domaine a un groupe local
Add-LocalGroupMember -Group "Administrateurs" -Member "DOMAINE\jdupont"
# Ajouter un utilisateur local a un groupe
Add-LocalGroupMember -Group "Utilisateurs du Bureau a distance" -Member "utilisateur-local"
# Retirer un membre
Remove-LocalGroupMember -Group "Administrateurs" -Member "DOMAINE\jdupont"
# Creer un groupe local
New-LocalGroup -Name "Support-Applicatif" -Description "Equipe de support applicatif"
# Supprimer un groupe local
Remove-LocalGroup -Name "Support-Applicatif"
# Script : Ajouter un utilisateur a plusieurs groupes
$groupes = @("Utilisateurs du Bureau a distance", "Operateurs de configuration reseau")
foreach ($groupe in $groupes) {
Add-LocalGroupMember -Group $groupe -Member "DOMAINE\technicien01"
Write-Host "Ajoute a : $groupe"
}
9. Strategie AGDLP / IGDLA
La strategie AGDLP (Account > Global > Domain Local > Permission) est la methode recommandee par Microsoft pour gerer les acces dans un environnement Active Directory.
9.1 Principe AGDLP
- A (Account) : Le compte utilisateur est place dans...
- G (Global group) : Un groupe global representant son role, qui est place dans...
- DL (Domain Local group) : Un groupe local de domaine representant un acces a une ressource, qui recoit...
- P (Permission) : Les permissions effectives sur la ressource
9.2 Exemple concret
# Scenario : Les comptables doivent avoir acces en modification au dossier "Compta"
# Etape 1 - A : Les comptes utilisateurs existent deja
# Marie Dupont (mdupont), Jean Martin (jmartin), etc.
# Etape 2 - G : Creer le groupe global (role)
New-ADGroup -Name "ROLE_Comptables" -GroupScope Global -GroupCategory Security `
-Path "OU=Groupes,OU=Globaux,DC=domaine,DC=local" `
-Description "Tous les comptables de l'entreprise"
# Ajouter les utilisateurs au groupe global
Add-ADGroupMember -Identity "ROLE_Comptables" -Members "mdupont","jmartin"
# Etape 3 - DL : Creer le groupe local de domaine (acces ressource)
New-ADGroup -Name "GRP_Compta_Modif" -GroupScope DomainLocal -GroupCategory Security `
-Path "OU=Groupes,OU=Ressources,DC=domaine,DC=local" `
-Description "Acces modification au dossier Compta"
# Ajouter le groupe global dans le groupe local de domaine
Add-ADGroupMember -Identity "GRP_Compta_Modif" -Members "ROLE_Comptables"
# Etape 4 - P : Appliquer les permissions NTFS
icacls "C:\Donnees\Compta" /grant "DOMAINE\GRP_Compta_Modif:(OI)(CI)(M)"
9.3 Avantages de l'AGDLP
- Separation des responsabilites : l'equipe RH/management gere les roles (groupes globaux), l'equipe IT gere les acces (groupes locaux de domaine)
- Flexibilite : un nouvel employe est simplement ajoute au groupe global de son role
- Audit simplifie : on voit clairement qui a acces a quoi et pourquoi
- Multi-domaines : les groupes globaux sont visibles dans toute la foret
9.4 Variante IGDLA
IGDLA est la notation equivalente utilisee dans certaines documentations :
- I = Identite (Account)
- G = Groupe Global
- DL = Groupe Domain Local (ou L = Local)
- A = Acces (Permission)
10. GPO et gestion des droits
Les GPO (Group Policy Objects) permettent de gerer centralement les droits, les restrictions et les configurations de securite sur l'ensemble du domaine.
10.1 Droits utilisateur via GPO
Chemin : Configuration ordinateur > Strategies > Parametres Windows > Parametres de securite > Attribution des droits utilisateur
| Droit | Description |
|---|---|
| Ouvrir une session localement | Permet de se connecter physiquement au poste/serveur |
| Autoriser l'ouverture de session par les services Bureau a distance | Permet la connexion RDP |
| Acceder a cet ordinateur depuis le reseau | Acces aux partages reseau |
| Prendre possession de fichiers ou d'autres objets | Permet de devenir proprietaire |
| Gerer le journal d'audit et de securite | Gestion des journaux d'evenements |
| Arreter le systeme | Autorisation d'eteindre le poste/serveur |
| Refuser l'ouverture de session localement | Interdit la connexion locale (priorite sur l'autorisation) |
10.2 Groupes restreints (gestion des groupes locaux par GPO)
Permet de controler centralement les membres des groupes locaux sur les postes du domaine.
Chemin : Configuration ordinateur > Strategies > Parametres Windows > Parametres de securite > Groupes restreints
- Clic droit > Ajouter un groupe...
- Selectionner le groupe local cible (ex: Administrateurs)
- Definir les "Membres de ce groupe" (les utilisateurs/groupes AD qui doivent etre membres)
- A chaque application de la GPO, les membres seront remplaces par ceux definis dans la strategie
10.3 Preferences de strategie de groupe (meilleure approche)
Chemin : Configuration ordinateur > Preferences > Parametres du Panneau de configuration > Utilisateurs et groupes locaux
Cette methode est plus flexible que les groupes restreints :
- Permet d'ajouter des membres sans supprimer les existants
- Permet de supprimer des membres specifiques
- Supporte le ciblage au niveau de l'element (filtrage par OU, groupe, OS, etc.)
10.4 Strategies d'audit via GPO
Chemin : Configuration ordinateur > Strategies > Parametres Windows > Parametres de securite > Configuration avancee de la strategie d'audit
# Activer l'audit via PowerShell (sur le serveur de fichiers)
auditpol /set /subcategory:"File System" /success:enable /failure:enable
auditpol /set /subcategory:"File Share" /success:enable /failure:enable
# Verifier la configuration d'audit
auditpol /get /category:*
# Consulter les evenements d'audit
Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4663} -MaxEvents 50 |
Select-Object TimeCreated, Message | Format-List
10.5 Commandes GPO utiles
# Forcer l'application immediate des GPO
gpupdate /force
# Generer un rapport RSoP (Resultant Set of Policy)
gpresult /r
# Rapport RSoP detaille en HTML
gpresult /h "C:\Temp\rapport-gpo.html"
# Rapport RSoP pour un autre utilisateur
gpresult /user "DOMAINE\jdupont" /h "C:\Temp\rapport-jdupont.html"
# Afficher les GPO appliquees en PowerShell
Get-GPResultantSetOfPolicy -ReportType Html -Path "C:\Temp\rsop.html"
# Lister toutes les GPO du domaine
Get-GPO -All | Select-Object DisplayName, GpoStatus, CreationTime | Sort-Object DisplayName
11. Delegation d'administration
La delegation permet d'accorder des droits d'administration specifiques sur des OU (Unites d'Organisation) sans donner les droits d'administrateur du domaine complet.
11.1 Delegation via l'assistant GUI
- Ouvrir Utilisateurs et ordinateurs Active Directory
- Clic droit sur l'OU cible > Deleguer le controle...
- Selectionner les utilisateurs ou groupes a deleguer
- Choisir les taches : Creer/supprimer/gerer des comptes, Reinitialiser les mots de passe, etc.
- Terminer l'assistant
11.2 Taches de delegation courantes
| Tache deleguee | A qui | Cas d'usage |
|---|---|---|
| Reinitialiser les mots de passe | Helpdesk / Support N1 | Debloquer les utilisateurs sans appeler un admin |
| Creer/modifier des comptes | Equipe RH technique | Gestion des arrivees/departs |
| Gerer les membres de groupes | Responsables de service | Ajouter/retirer des membres dans les groupes de leur service |
| Joindre des ordinateurs au domaine | Techniciens de deploiement | Deploiement de nouveaux postes |
| Gerer les GPO d'une OU | Admin delegue de site | Gestion autonome d'un site distant |
11.3 Delegation avec PowerShell / dsacls
# Visualiser les permissions d'une OU
dsacls "OU=Utilisateurs,OU=Paris,DC=domaine,DC=local"
# Deleguer la reinitialisation de mot de passe sur une OU
dsacls "OU=Utilisateurs,OU=Paris,DC=domaine,DC=local" /I:S /G "DOMAINE\GRP_Helpdesk:CA;Reset Password;user"
# Deleguer la creation de comptes utilisateurs
dsacls "OU=Utilisateurs,OU=Paris,DC=domaine,DC=local" /I:S /G "DOMAINE\GRP_RH:CC;user"
# Deleguer la gestion des membres de groupes
dsacls "OU=Groupes,OU=Paris,DC=domaine,DC=local" /I:S /G "DOMAINE\GRP_Managers:WP;member;group"
# Visualiser les delegations en PowerShell
Import-Module ActiveDirectory
(Get-Acl "AD:OU=Utilisateurs,OU=Paris,DC=domaine,DC=local").Access |
Where-Object { $_.IsInherited -eq $false } |
Select-Object IdentityReference, ActiveDirectoryRights, ObjectType |
Format-Table -AutoSize
12. Gestion des ACL avec PowerShell
PowerShell offre des cmdlets puissantes pour gerer les ACL de maniere avancee et scriptable.
12.1 Lire les ACL
# Lire les ACL d'un dossier
Get-Acl "C:\Donnees\Partage"
# Afficher les ACL de maniere detaillee
Get-Acl "C:\Donnees\Partage" | Format-List
# Afficher chaque ACE individuellement
(Get-Acl "C:\Donnees\Partage").Access | Format-Table -AutoSize
# Filtrer les ACE non heritees (explicites uniquement)
(Get-Acl "C:\Donnees\Partage").Access |
Where-Object { $_.IsInherited -eq $false } |
Format-Table IdentityReference, FileSystemRights, AccessControlType -AutoSize
# Afficher le proprietaire
(Get-Acl "C:\Donnees\Partage").Owner
# Lire les ACL de maniere recursive
Get-ChildItem "C:\Donnees\Partage" -Recurse -Directory |
ForEach-Object {
$acl = Get-Acl $_.FullName
[PSCustomObject]@{
Chemin = $_.FullName
Proprietaire = $acl.Owner
NombreACE = $acl.Access.Count
}
} | Format-Table -AutoSize
12.2 Modifier les ACL
# Ajouter une permission (Modify) a un groupe
$acl = Get-Acl "C:\Donnees\Partage"
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule(
"DOMAINE\GRP_Projet_Modif", # Identite
"Modify", # Droits
"ContainerInherit,ObjectInherit", # Heritage (CI + OI)
"None", # Propagation
"Allow" # Type
)
$acl.AddAccessRule($rule)
Set-Acl "C:\Donnees\Partage" $acl
# Supprimer une permission specifique
$acl = Get-Acl "C:\Donnees\Partage"
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule(
"DOMAINE\ancien-groupe",
"Modify",
"ContainerInherit,ObjectInherit",
"None",
"Allow"
)
$acl.RemoveAccessRule($rule)
Set-Acl "C:\Donnees\Partage" $acl
# Supprimer TOUTES les permissions d'un utilisateur/groupe
$acl = Get-Acl "C:\Donnees\Partage"
$acl.Access |
Where-Object { $_.IdentityReference -eq "DOMAINE\ancien-groupe" } |
ForEach-Object { $acl.RemoveAccessRule($_) }
Set-Acl "C:\Donnees\Partage" $acl
12.3 Gerer l'heritage avec PowerShell
# Desactiver l'heritage et CONSERVER les permissions heritees (en explicite)
$acl = Get-Acl "C:\Donnees\Partage"
$acl.SetAccessRuleProtection($true, $true) # (proteger, preserver les regles heritees)
Set-Acl "C:\Donnees\Partage" $acl
# Desactiver l'heritage et SUPPRIMER les permissions heritees
$acl = Get-Acl "C:\Donnees\Partage"
$acl.SetAccessRuleProtection($true, $false) # (proteger, ne PAS preserver)
Set-Acl "C:\Donnees\Partage" $acl
# Reactiver l'heritage
$acl = Get-Acl "C:\Donnees\Partage"
$acl.SetAccessRuleProtection($false, $false)
Set-Acl "C:\Donnees\Partage" $acl
12.4 Changer le proprietaire
# Changer le proprietaire d'un fichier/dossier
$acl = Get-Acl "C:\Donnees\Partage"
$owner = New-Object System.Security.Principal.NTAccount("DOMAINE\administrateur")
$acl.SetOwner($owner)
Set-Acl "C:\Donnees\Partage" $acl
# Changer le proprietaire de maniere recursive
Get-ChildItem "C:\Donnees\Partage" -Recurse | ForEach-Object {
$acl = Get-Acl $_.FullName
$owner = New-Object System.Security.Principal.NTAccount("DOMAINE\administrateur")
$acl.SetOwner($owner)
Set-Acl $_.FullName $acl
}
12.5 Script complet : configuration d'un dossier partage
# Script complet de configuration de droits pour un nouveau dossier de service
param(
[string]$Chemin = "C:\Donnees\NouveauService",
[string]$GroupeLecture = "DOMAINE\GRP_Service_Lecture",
[string]$GroupeModif = "DOMAINE\GRP_Service_Modif",
[string]$GroupeAdmin = "DOMAINE\GRP_Service_Admin"
)
# Creer le dossier s'il n'existe pas
if (!(Test-Path $Chemin)) {
New-Item -Path $Chemin -ItemType Directory -Force
Write-Host "Dossier cree : $Chemin" -ForegroundColor Green
}
# Recuperer les ACL
$acl = Get-Acl $Chemin
# Desactiver l'heritage et supprimer les permissions heritees
$acl.SetAccessRuleProtection($true, $false)
# Ajouter SYSTEM - Controle total
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule(
"NT AUTHORITY\SYSTEM", "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)
# Ajouter Administrateurs - Controle total
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule(
"BUILTIN\Administrateurs", "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)
# Ajouter groupe Lecture
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule(
$GroupeLecture, "ReadAndExecute", "ContainerInherit,ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)
# Ajouter groupe Modification
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule(
$GroupeModif, "Modify", "ContainerInherit,ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)
# Ajouter groupe Admin
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule(
$GroupeAdmin, "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)
# Appliquer les ACL
Set-Acl $Chemin $acl
Write-Host "Permissions appliquees avec succes sur $Chemin" -ForegroundColor Green
# Afficher le resultat
(Get-Acl $Chemin).Access | Format-Table IdentityReference, FileSystemRights, AccessControlType -AutoSize
13. Gestion des groupes AD avec PowerShell
Le module ActiveDirectory fournit toutes les cmdlets necessaires pour gerer les groupes et les appartenances.
13.1 Prerequis
# Verifier si le module est installe
Get-Module -ListAvailable -Name ActiveDirectory
# Installer les outils RSAT sur Windows 10+ (si absent)
Add-WindowsCapability -Online -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0
# Installer sur Windows Server (si absent)
Install-WindowsFeature -Name RSAT-AD-PowerShell
# Importer le module
Import-Module ActiveDirectory
13.2 Creer des groupes
# Creer un groupe global de securite
New-ADGroup -Name "ROLE_Developpeurs" `
-SamAccountName "ROLE_Developpeurs" `
-GroupScope Global `
-GroupCategory Security `
-Path "OU=Groupes,OU=Globaux,DC=domaine,DC=local" `
-Description "Tous les developpeurs de l'entreprise"
# Creer un groupe local de domaine
New-ADGroup -Name "GRP_Projet-Web_Modif" `
-SamAccountName "GRP_Projet-Web_Modif" `
-GroupScope DomainLocal `
-GroupCategory Security `
-Path "OU=Groupes,OU=Ressources,DC=domaine,DC=local" `
-Description "Acces modification au projet Web"
# Creer un groupe universel (multi-domaines)
New-ADGroup -Name "GRP_Universal_VPN" `
-SamAccountName "GRP_Universal_VPN" `
-GroupScope Universal `
-GroupCategory Security `
-Path "OU=Groupes,OU=Universels,DC=domaine,DC=local" `
-Description "Acces VPN pour toute la foret"
# Creer un groupe de distribution (email)
New-ADGroup -Name "DL_Newsletter_Interne" `
-SamAccountName "DL_Newsletter_Interne" `
-GroupScope Universal `
-GroupCategory Distribution `
-Path "OU=Groupes,OU=Distribution,DC=domaine,DC=local" `
-Description "Liste de diffusion newsletter interne"
13.3 Gerer les membres
# Ajouter un membre a un groupe
Add-ADGroupMember -Identity "ROLE_Developpeurs" -Members "jdupont"
# Ajouter plusieurs membres
Add-ADGroupMember -Identity "ROLE_Developpeurs" -Members "jdupont","mmartin","pdurand"
# Ajouter un groupe dans un autre groupe (imbrication AGDLP)
Add-ADGroupMember -Identity "GRP_Projet-Web_Modif" -Members "ROLE_Developpeurs"
# Retirer un membre
Remove-ADGroupMember -Identity "ROLE_Developpeurs" -Members "jdupont" -Confirm:$false
# Lister les membres d'un groupe
Get-ADGroupMember -Identity "ROLE_Developpeurs" | Select-Object Name, SamAccountName, ObjectClass
# Lister les membres de maniere RECURSIVE (inclut les sous-groupes)
Get-ADGroupMember -Identity "GRP_Projet-Web_Modif" -Recursive |
Select-Object Name, SamAccountName | Sort-Object Name
# Trouver dans quels groupes un utilisateur est membre
Get-ADPrincipalGroupMembership -Identity "jdupont" |
Select-Object Name, GroupScope, GroupCategory | Sort-Object Name
13.4 Rechercher et auditer les groupes
# Lister tous les groupes d'une OU
Get-ADGroup -Filter * -SearchBase "OU=Groupes,DC=domaine,DC=local" |
Select-Object Name, GroupScope, GroupCategory | Sort-Object Name
# Rechercher un groupe par nom (partiel)
Get-ADGroup -Filter 'Name -like "*Compta*"' |
Select-Object Name, GroupScope, Description
# Trouver les groupes VIDES (sans membres)
Get-ADGroup -Filter * -Properties Members |
Where-Object { $_.Members.Count -eq 0 } |
Select-Object Name, GroupScope, Description |
Sort-Object Name
# Exporter la liste des groupes et leurs membres en CSV
$rapport = @()
Get-ADGroup -Filter 'GroupCategory -eq "Security"' | ForEach-Object {
$groupe = $_
$membres = Get-ADGroupMember -Identity $_.SamAccountName -ErrorAction SilentlyContinue
foreach ($membre in $membres) {
$rapport += [PSCustomObject]@{
Groupe = $groupe.Name
Etendue = $groupe.GroupScope
Membre = $membre.Name
TypeMembre = $membre.ObjectClass
SamAccountName = $membre.SamAccountName
}
}
}
$rapport | Export-Csv "C:\Temp\audit-groupes.csv" -NoTypeInformation -Encoding UTF8
13.5 Modifier et supprimer des groupes
# Modifier la description d'un groupe
Set-ADGroup -Identity "ROLE_Developpeurs" -Description "Developpeurs - Equipe technique"
# Changer l'etendue d'un groupe (Global vers Universel)
Set-ADGroup -Identity "ROLE_Developpeurs" -GroupScope Universal
# Convertir un groupe de distribution en groupe de securite
Set-ADGroup -Identity "DL_Equipe_IT" -GroupCategory Security
# Deplacer un groupe vers une autre OU
Move-ADObject -Identity (Get-ADGroup "ROLE_Developpeurs").DistinguishedName `
-TargetPath "OU=Groupes,OU=Archive,DC=domaine,DC=local"
# Supprimer un groupe (avec confirmation)
Remove-ADGroup -Identity "GRP_Ancien_Projet" -Confirm:$true
14. Bonnes pratiques
14.1 Principe du moindre privilege
- N'accorder que les droits strictement necessaires a l'execution des taches
- Privilegier Lecture par defaut, Modification si necessaire, Controle total uniquement pour les administrateurs
- Ne jamais mettre d'utilisateurs standards dans le groupe Administrateurs
- Utiliser des comptes d'administration dedies (pas de navigation web avec un compte admin)
14.2 Organisation des permissions
- Toujours utiliser des groupes, jamais des comptes individuels
- Appliquer la strategie AGDLP systematiquement
- Definir une convention de nommage stricte pour les groupes
- Eviter les refus explicites (Deny) sauf absolue necessite
- Ne pas imbriquer les groupes sur plus de 3 niveaux (sinon le depannage devient tres complexe)
14.3 Gestion de l'heritage
- Bloquer l'heritage au plus haut niveau pertinent, pas sur chaque sous-dossier
- Structurer l'arborescence des dossiers en fonction des besoins de securite
- Eviter de melanger heritage et permissions explicites sans raison
14.4 Audit et documentation
- Activer l'audit d'acces aux fichiers sur les dossiers sensibles
- Generer un rapport de permissions regulierement (mensuel ou trimestriel)
- Documenter chaque partage : chemin, groupes autorises, niveau d'acces
- Revoir les permissions lors des departs d'employes et des changements de poste
# Script d'audit : exporter les permissions de tous les dossiers de premier niveau
$racine = "C:\Donnees"
$rapport = @()
Get-ChildItem $racine -Directory | ForEach-Object {
$acl = Get-Acl $_.FullName
foreach ($ace in $acl.Access) {
$rapport += [PSCustomObject]@{
Dossier = $_.Name
Chemin = $_.FullName
Identite = $ace.IdentityReference
Droits = $ace.FileSystemRights
Type = $ace.AccessControlType
Herite = $ace.IsInherited
}
}
}
$rapport | Export-Csv "C:\Temp\audit-permissions.csv" -NoTypeInformation -Encoding UTF8
Write-Host "Rapport genere : C:\Temp\audit-permissions.csv" -ForegroundColor Green
14.5 Securite des partages
- Desactiver les partages administratifs par defaut (C$, ADMIN$) si non necessaires
- Utiliser SMB 3.x avec chiffrement lorsque possible
- Desactiver SMBv1 (vulnerabilite WannaCry et autres)
- Surveiller les sessions SMB ouvertes regulierement
# Verifier la version SMB utilisee
Get-SmbConnection
# Desactiver SMBv1 (OBLIGATOIRE pour la securite)
# Sur Windows Server
Set-SmbServerConfiguration -EnableSMB1Protocol $false -Force
# Sur Windows 10+
Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol -NoRestart
# Activer le chiffrement SMB
Set-SmbServerConfiguration -EncryptData $true -Force
# Forcer SMB 3.x minimum sur un partage
Set-SmbShare -Name "Confidentiel" -EncryptData $true -Force
15. Depannage
15.1 Diagnostiquer un probleme d'acces
Methodologie systematique pour resoudre un "Acces refuse" :
- Identifier l'utilisateur et ses groupes
- Verifier les permissions effectives
- Verifier les permissions de partage (si acces reseau)
- Verifier les GPO qui pourraient restreindre l'acces
- Verifier les Deny explicites
15.2 whoami - Identifier l'utilisateur et ses groupes
# Afficher l'utilisateur courant
whoami
# Afficher tous les groupes de l'utilisateur
whoami /groups
# Afficher les privileges de l'utilisateur
whoami /priv
# Afficher TOUT (utilisateur, groupes, privileges, SID)
whoami /all
# Afficher les groupes sous forme de tableau
whoami /groups /fo table
# Afficher les groupes en CSV (pour export)
whoami /groups /fo csv > C:\Temp\mes-groupes.csv
15.3 Permissions effectives (Effective Access)
L'onglet "Acces effectif" (Effective Access) dans les proprietes avancees permet de simuler l'acces d'un utilisateur.
- Clic droit sur le dossier > Proprietes > onglet Securite > Avance...
- Onglet Acces effectif
- Cliquer sur Selectionner un utilisateur
- Saisir le nom de l'utilisateur concerne
- Cliquer sur Afficher l'acces effectif
- Analyser les resultats : une coche verte signifie acces autorise, une croix rouge signifie acces refuse
# Verifier les permissions effectives en PowerShell
# Necessite le module NTFSSecurity (optionnel mais recommande)
# Install-Module NTFSSecurity
# Methode native : simuler en listant les groupes de l'utilisateur et comparant avec les ACL
$utilisateur = "DOMAINE\jdupont"
$chemin = "C:\Donnees\Partage"
# Lister les groupes de l'utilisateur
$groupesUtilisateur = (Get-ADUser $utilisateur.Split('\')[1] -Properties MemberOf).MemberOf |
Get-ADGroup | Select-Object -ExpandProperty Name
# Lister les ACE du dossier
$acl = Get-Acl $chemin
$acl.Access | ForEach-Object {
$identite = $_.IdentityReference.Value
$estMembre = $groupesUtilisateur -contains ($identite.Split('\')[1])
[PSCustomObject]@{
Identite = $identite
Droits = $_.FileSystemRights
Type = $_.AccessControlType
UtilisateurEstMembre = $estMembre
}
} | Format-Table -AutoSize
15.4 Accesschk (Sysinternals)
accesschk est un outil Sysinternals tres puissant pour diagnostiquer les permissions.
# Telecharger accesschk depuis Sysinternals
# https://docs.microsoft.com/en-us/sysinternals/downloads/accesschk
# Verifier les acces effectifs d'un utilisateur sur un dossier
accesschk.exe "DOMAINE\jdupont" "C:\Donnees\Partage" -d
# Verifier les acces de maniere recursive
accesschk.exe "DOMAINE\jdupont" "C:\Donnees\Partage" -d -s
# Voir quels dossiers un utilisateur peut ecrire
accesschk.exe "DOMAINE\jdupont" "C:\Donnees" -d -s -w
# Lister tous les utilisateurs/groupes ayant acces a un dossier
accesschk.exe * "C:\Donnees\Confidentiel" -d
# Verifier les droits sur un service Windows
accesschk.exe "DOMAINE\jdupont" -scw "NomDuService"
# Verifier les droits sur une cle de registre
accesschk.exe "DOMAINE\jdupont" -k "HKLM\SOFTWARE\MonAppli"
15.5 Problemes courants et solutions
| Probleme | Cause probable | Solution |
|---|---|---|
| Acces refuse malgre l'ajout au groupe | Le token Kerberos n'est pas mis a jour | L'utilisateur doit fermer et rouvrir sa session (ou klist purge) |
| Acces refuse - l'utilisateur est bien dans le groupe | Un Deny explicite bloque l'acces | Verifier les ACE Deny dans les permissions avancees |
| Acces en lecture seule alors que Modification est accorde | Permission de partage trop restrictive | Verifier les permissions de partage (net share / Get-SmbShareAccess) |
| Heritage ne se propage pas | Heritage bloque sur un sous-dossier | icacls "chemin" /reset /T pour reinitialiser ou verifier chaque niveau |
| Impossible de modifier les permissions | Pas proprietaire et pas de droit WDAC | Prendre possession : icacls "chemin" /setowner "admin" /T |
| Acces refuse au partage reseau | Pare-feu bloque le port SMB (445) | Verifier les regles de pare-feu : Test-NetConnection serveur -Port 445 |
| Permissions incoherentes apres migration | SID orphelins (comptes supprimes) | Identifier et nettoyer les SID non resolus dans les ACL |
15.6 Commandes de depannage rapide
# Verifier la connectivite SMB
Test-NetConnection -ComputerName "serveur-fichiers" -Port 445
# Purger le cache Kerberos (forcer le renouvellement du token)
klist purge
# Verifier les tickets Kerberos actuels
klist
# Tester l'acces a un partage
Test-Path "\\serveur\partage"
Get-ChildItem "\\serveur\partage" -ErrorAction SilentlyContinue
# Trouver les SID orphelins (non resolus) dans les ACL d'un dossier
(Get-Acl "C:\Donnees\Partage").Access |
Where-Object { $_.IdentityReference.Value -match "^S-1-" } |
Select-Object IdentityReference, FileSystemRights
# Nettoyer les SID orphelins
$acl = Get-Acl "C:\Donnees\Partage"
$acl.Access | Where-Object { $_.IdentityReference.Value -match "^S-1-" } |
ForEach-Object { $acl.RemoveAccessRule($_) }
Set-Acl "C:\Donnees\Partage" $acl
# Verifier les evenements d'acces refuse dans le journal de securite
Get-WinEvent -FilterHashtable @{
LogName = 'Security'
ID = 4656, 4663, 5145
} -MaxEvents 100 |
Where-Object { $_.Message -match "Failure" } |
Select-Object TimeCreated, @{N='Details';E={$_.Message.Substring(0,200)}} |
Format-Table -Wrap
# Diagnostic complet d'acces en un seul script
Write-Host "=== DIAGNOSTIC ACCES ===" -ForegroundColor Cyan
Write-Host "`nUtilisateur : $(whoami)" -ForegroundColor Yellow
Write-Host "`nGroupes :" -ForegroundColor Yellow
whoami /groups /fo table
Write-Host "`nPermissions du dossier :" -ForegroundColor Yellow
icacls "C:\Donnees\Partage"
Write-Host "`nPartages disponibles :" -ForegroundColor Yellow
net share
Write-Host "`nConnexions SMB :" -ForegroundColor Yellow
Get-SmbConnection | Format-Table -AutoSize