Permessi NTFS: Get-Acl e Set-Acl
Gestione dei permessi di file, cartelle e chiavi di registro.
Leggere i permessi
Get-Acl C:\Dati
(Get-Acl C:\Dati).Access
(Get-Acl C:\Dati).Access | Format-Table IdentityReference, FileSystemRights, AccessControlType, IsInherited -AutoSize
(Get-Acl C:\Dati).Owner
(Get-Acl C:\Dati).Sddl
Campi principali:
| Campo | Significato |
|---|---|
IdentityReference | Utente o gruppo |
FileSystemRights | Diritti (FullControl, Modify, ReadAndExecute, Read, Write) |
AccessControlType | Allow o Deny |
InheritanceFlags | Se si applica a file e sottocartelle |
IsInherited | Se deriva dalla cartella superiore |
Aggiungere un permesso
$acl = Get-Acl C:\Dati
$regola = New-Object System.Security.AccessControl.FileSystemAccessRule(
"DOMINIO\Utente",
"Modify",
"ContainerInherit,ObjectInherit",
"None",
"Allow")
$acl.AddAccessRule($regola)
Set-Acl C:\Dati $acl
Parametri della regola, nell'ordine: identità, diritti, flag di ereditarietà, propagazione, tipo.
Rimuovere un permesso
$acl = Get-Acl C:\Dati
$acl.Access | Where-Object { $_.IdentityReference -eq "DOMINIO\Utente" } | ForEach-Object { $acl.RemoveAccessRule($_) | Out-Null }
Set-Acl C:\Dati $acl
Disabilitare l'ereditarietà
$acl = Get-Acl C:\Dati
$acl.SetAccessRuleProtection($true, $true)
Set-Acl C:\Dati $acl
- Primo argomento
$true: disabilita l'ereditarietà. - Secondo argomento
$true: mantiene copie dei permessi ereditati;$falseli rimuove.
Cambiare il proprietario
$acl = Get-Acl C:\Dati
$acl.SetOwner([System.Security.Principal.NTAccount]"BUILTIN\Administrators")
Set-Acl C:\Dati $acl
Se non hai accesso alla cartella, prima usa takeown /f C:\Dati /r /d y da prompt amministratore.
Copiare i permessi da un'altra cartella
Get-Acl C:\Modello | Set-Acl C:\Dati
Ricorsivo su molti elementi
Get-ChildItem C:\Dati -Recurse | ForEach-Object { Set-Acl $_.FullName $acl }
Per operazioni massicce icacls è più veloce e semplice:
icacls C:\Dati /grant "DOMINIO\Utente:(OI)(CI)M" /T
Report: chi ha accesso a cosa
Get-ChildItem C:\Condivisioni -Directory | ForEach-Object {
$cartella = $_.FullName
(Get-Acl $cartella).Access | ForEach-Object {
[pscustomobject]@{
Cartella = $cartella
Identita = $_.IdentityReference
Diritti = $_.FileSystemRights
Tipo = $_.AccessControlType
}
}
} | Export-Csv .\permessi.csv -NoTypeInformation -Encoding UTF8
Registro di sistema
Get-Acl HKLM:\SOFTWARE\MiaApp
Attenzione
- Evita regole
Deny: hanno precedenza e rendono i permessi difficili da capire. - Preferisci i gruppi ai singoli utenti.
- Non modificare i permessi di
C:\WindowsoC:\Program Filessenza un backup (icacls ... /save).