Esplico: per lavoro mi son trovato a gestire una share in cui su richiesta del cliente è necessario gestire gli accessi ad n livelli di sotto cartelle.
Impostato il tutto, esiste comunque una situazione che è difficile monitorare, cioè quando una persona con accessi RW su due cartelle nella share “sposta” qualcosa da una all’altra.. cosa succede? Semplice se un’altra persona ha accesso alla cartella destinazione e non alla sorgente non riuscirà ad accedere a quanto è stato spostato, questo perchè in uno spostamento (o taglia/incolla) la risorsa mantiene le ACL che aveva in origine.
Non essendo possibile prevenire la cosa ho deciso di cercare di monitorarla e per fare cio’ ho preso spunto dall’eccellente idea di Wayne Martin ottenendo il seguente script per Powershell (prima o poi mi stabilizzo su un linguaggio, promesso! 😉 )
broken_ACL_report_4.ps1
Il mio consiglio è quello di leggere l’articolo citato sopra, in breve vi posso dire che le istruzioni chiave nella function ENUMFOLDER sono le seguenti:
- $parentacl = get-acl -Path $a.GetFolder($tld.fullname).ShortPath legge le ACL della cartella che sta analizzando
- $ParentAccessRules = $parentacl.GetAccessRules($true, $true, [System.Security.Principal.NTAccount]) legge le regole di ereditarietà e gli account abilitati sul folder
Le stesse istruzioni poi vengono eseguite per ogni sottocartella e quando si trova che una cartella eredita dal parent le ACL, ma confrontandole gli account/gruppi abilitati risultano differenti, allora abbiamo scovato una cartella spostata.
Si potrebbe fare la stessa cosa anche per i files facendo analizzare tutti i ChildItems, non solo le cartelle (che vengono riconosciute da $_.PSIsContainer), ma se la mole di dati è significativa (come nel mio caso), i tempi per la scansione di tutta la share renderebbe il tutto inutilizzabile..
Alla prossima
Sergio