Come utilizzare il comando Icacls per gestire le autorizzazioni dei file

Icacls è un’utilità della riga di comando Windows che gli amministratori IT possono utilizzare per modificare gli elenchi di controllo degli accessi su file e cartelle. Uno dei compiti più comuni che un IT Pro o un amministratore di sistema svolge è la modifica delle autorizzazioni su un server di file. Utilizzare il comando icacls è un modo molto efficiente per farlo, e spiegheremo come utilizzare questo comando in questa guida.

Come utilizzare il comando icacls

Basandoci sulla mia esperienza personale, la modifica delle autorizzazioni dei file su Windows di solito viene fatta utilizzando Esplora file. Per molti professionisti IT, è molto intuitivo aprire Esplora file, navigare fino alla posizione di rete che sta causando problemi di accesso per alcuni utenti e modificare le autorizzazioni da ‘Lettura’ a ‘Lettura/Modifica’ o simili. Bello e veloce, abbastanza facile da usare.

Annuncio

Tuttavia, ci sono innumerevoli scenari che abbracciano diversi livelli di portata in cui l’interfaccia grafica semplicemente non è robusta come vorremmo. Se dobbiamo modificare le autorizzazioni su 22 milioni di file e cartelle, vogliamo farlo nel modo giusto!

Cosa è un elenco di controllo degli accessi (ACL)?

Nei sistemi Windows e nei filesystem NTFS, ogni oggetto file (file, cartella) ha una lista di controllo degli accessi. Questa lista è composta da voci di controllo degli accessi (ACE). La lista contiene tutti gli utenti e/o altri oggetti contenitore di sicurezza (gruppi, ecc.) che hanno un certo livello di autorizzazione sull’oggetto file.

Cos’è una voce di controllo degli accessi? Un momento…

Cos’è una voce di controllo degli accessi (ACE)?

Una voce di controllo degli accessi (ACE) è un record individuale o una regola di autorizzazione che controlla i livelli di autorizzazione individuali di un utente/gruppo su un oggetto file. Vorrei elencare le autorizzazioni di base di alto livello disponibili per una ACL:

Pubblicità

  • Accesso completo (F)
  • Accesso di modifica (M) (include ‘cancella’)
  • Accesso lettura ed esecuzione (RX)
  • Accesso in sola lettura (R)
  • Accesso in sola scrittura (W)

Ci sono circa una dozzina o più autorizzazioni ‘avanzate’, ma queste escono dal contesto di questo articolo.

Limitazioni di Esplora risorse

Ora, se fossi il responsabile del programma presso Microsoft per Esplora file (non è un lavoro che invidio particolarmente), ecco le funzionalità che aggiungerei. E credimi, le ho desiderate per decenni!

Immagina di gestire una migrazione del server file da Server A a Server B. Hai già copiato i dati alla destinazione (Server B). Hai scoperto che non tutte le autorizzazioni sono correttamente ricorsive.

Quindi, vai alla radice del tuo albero, accedi alla scheda Sicurezza e apporti alcune modifiche alla lista di controllo degli accessi. Selezioni la casella per modificare ricorsivamente tutti i 22 milioni di file e cartelle sotto la radice. Inizia a fare modifiche e quindi mostra alcune finestre di dialogo di conferma su modifiche ai file di sistema, file in sola lettura, ecc.

Pubblicità

Ora, ecco la mia richiesta: nel mini ‘wizard’ potrebbero creare, desidero specificare di semplicemente assumere e fare clic su ‘Sì’ su tutte le richieste di conferma. Quindi, il processo continuerebbe su eventuali errori e quindi mi offrirebbe un riepilogo quando è finito, con un link per scaricare l’output grezzo del file in modo che possa tornare indietro e controllare eventuali errori o avvisi che sono comparsi.

No, non so se Microsoft offrirà mai un set di funzionalità così meraviglioso, robusto e “set it and forget it” come questo. Quindi, nel frattempo, ricorriamo al potere della riga di comando e dello scripting. È qui che entra in gioco il comando icacls integrato.

Comprensione della sintassi di icacls

La sintassi di icacls è in realtà piuttosto semplice e relativamente facile da imparare. Fondamentalmente, si utilizza il comando, quindi si aggiunge il file o la cartella che si desidera controllare o manipolare, e quindi si specificano i permessi che si desidera aggiungere/modificare/eliminare.

Vi sono anche degli switch da linea di comando, naturalmente. Ne parleremo presto. Ecco un esempio di cosa accade quando si esegue il seguente comando e poi un nome di file.

icacls Excellent.txt
Using icacls to view current permissions

Verrà restituito un ACE per riga, quindi utilizzando l’esempio sopra:

  • L’account builtin ‘SYSTEM’ ha permessi di accesso Ereditati (I) e Completi (F)
  • Il gruppo builtin Amministratori ha gli stessi permessi
  • Il gruppo builtin Utenti ha permessi Ereditati (I), Lettura (R) ed Esecuzione (X).

Posso usare icacls in PowerShell?

Bene, come puoi vedere dall’esempio sopra e dalla schermata, puoi certamente utilizzare PowerShell per utilizzare il comando icacls. Devi solo essere consapevole di alcune variabili d’ambiente che devono essere referenziate in modo un po’ diverso.

I cmdlet equivalenti di PowerShell per visualizzare e gestire ACL sugli oggetti file sono Get-Acl e Set-Acl. Sembra essere un’idea per un futuro post! ?

Utilizzare icacls per impostare i permessi per un file o una cartella

Poiché il comando icacls è incorporato in Windows, sei libero di iniziare a usare il comando non appena comprendi i concetti di base qui. Puoi anche digitare semplicemente ‘icacls’ da solo sulla riga di comando per visualizzare le informazioni di Aiuto disponibili. Puoi inoltre consultare documentazione simile di Microsoft per il comando icacls su questa pagina.

Come visualizzare l’ACL attuale per un oggetto

Ora basta esposizione… iniziamo ad usare il comando. Per visualizzare l’ACL attuale di un file o di una cartella, utilizza semplicemente i seguenti comandi:

icacls file or directory
icacls Download
Using icacls to view permissions on a folder

Qui, ‘Download’ è una cartella con file e sottocartelle. Come noterai, l’output è un po’ diverso per gli oggetti di tipo cartella. Vedrai (OI) e (CI) perché si tratta di permessi speciali ereditati a livello di contenitore che si applicano solo alle cartelle.

Per il gruppo di Amministratori predefinito, vedrai che ha pieni diritti e permessi ereditati. Il ‘(OI)’ indica che gli altri oggetti in questa cartella erediteranno questo ACE. Il ‘(CI)’ indica che le altre cartelle in questa directory erediteranno di nuovo questo ACE. (Questa cartella non accade di possedere, ma se lo fosse, erediterebbe automaticamente gli stessi ACE).

Concessione di autorizzazioni per un file o una cartella

Ora le cose stanno iniziando ad infiammarsi. Impostiamo le autorizzazioni e aggiungiamo alcuni utenti al nostro dominio Active Directory con lo switch /grant. Con il comando seguente, daremo a Billy Reinders (breinders) le autorizzazioni in sola lettura (R) sul file Excellent.txt.

icacls Excellent.txt /grant reinders\breinders:R /t /c
Granting permissions to a file for a user

Il comando precedente è stato completato con successo; ho poi convalidato le mie modifiche controllando le autorizzazioni – ora vediamo che ‘REINDERS\breinders’ ha le autorizzazioni in sola lettura (R). E, poiché non vediamo un ‘I’ elencato, sappiamo che non è ereditato, è esplicito.

Solo per ricordare, lo switch ‘/t’ è utilizzato per impostare le autorizzazioni in modo ricorsivo sull’intera struttura della cartella. Lo switch ‘/c’ indica al comando di continuare in caso di eventuali errori.

Rimuovere le autorizzazioni da un file o una cartella

Invece di utilizzare lo switch /grant per dare/aggiungere autorizzazioni, utilizziamo lo switch /remove per rimuovere autorizzazioni da un ACE. Andiamo avanti e rimuoviamo l’accesso piuttosto breve di Billy al file Excellent.txt.

icacls Excellent.txt /remove:g reinders\breinders /t /c
Using the /remove switch to remove permissions to a file for a user

Qui, stiamo utilizzando lo switch ‘/remove:g’ per rimuovere l’autorizzazione che è stata precedentemente concessa a Billy Reinders. Ho eseguito di nuovo il comando per verificare e vedrai che l’ACL per Billy è sparita. Eccellente! ?

Negare autorizzazioni a un file o una cartella

In generale, vorrai evitare di utilizzare autorizzazioni di negazione esplicite a causa della complessità che permea nella tua infrastruttura generale di autorizzazioni. Per la maggior parte delle situazioni, puoi fare affidamento su una negazione implicita, quella predefinita, per gestire queste circostanze.

Se un utente non è elencato in un ACL e l’utente non è membro di nessun gruppo elencato nell’ACL, si presume (correttamente) da parte di Windows che quell’utente non abbia autorizzazioni su tale oggetto. Tuttavia, l’esempio seguente illustra quanto fuori controllo ciò possa diventare: se un utente è membro di due gruppi e a uno dei gruppi è concesso l’accesso mentre all’altro è negato, quell’utente verrà negato l’accesso. Questo, di per sé, ha senso, ma può diventare molto complicato nel cercare di risolvere questo tipo di situazione.

Tuttavia, se vuoi aggiungere esplicitamente un’autorizzazione di negazione, puoi utilizzare lo switch generale ‘/deny’ per farlo.

icacls Download /deny reinders\breinders:(OI)(CI)F /t /c
Using the /deny switch to put explicit deny permissions on a file or folder structure

Ecco il comando che ho eseguito; è stato completato con successo. Ho quindi controllato la scheda Sicurezza della cartella Download: puoi vedere che Billy ha autorizzazioni di negazione sull’oggetto e su tutti i suoi contenuti.

Come ripristinare l’ACL per un oggetto

I can’t tell you how many file server migrations or movements of large amounts of file projects I’ve been involved in where I just needed to start from scratch. This invaluable step includes resetting the ACLs on an object in case things get too far gone, or you succumb to a bad idea after being up all night. Maybe a malware attack crippled an entire HR directory that NEEDS to get resolved ASAP. Thankfully, you can use the ‘/reset’ flag to reset the permissions to the default.

icacls Download /reset /t /c

[immagine]

Appena ho nuovamente concesso a Billy i diritti ‘RW’ sulla cartella Download e sui suoi contenuti, ho eseguito il comando di ripristino. Come puoi vedere, il suo nome è nuovamente assente dall’ACL sulla scheda Sicurezza. Bel facile.

Come salvare e ripristinare ACL

A wonderfully powerful feature included with icacls is the ability to backup and restore the ACL of an object to a file for safekeeping. Before you start a large script that changes or resets permissions on millions of files, you can first save the current state of those millions of files’ ACLs to a single file.

Se noti a metà del tuo script che hai commesso un errore di sintassi forse, puoi interromperlo, quindi ripristinare lo stato degli ACL per l’intero albero con una sola esecuzione del comando utilizzando il parametro ‘restore’! Proviamolo!

icacls Download /save Download_ACL_Backup /t
What the backed-up text file looks like with all the ACLs – wowzers!

Questo salverà l’intero albero ACL della cartella Download in un unico file denominato ‘Download_ACL_Backup’. Ora, ti consiglio vivamente di NON giocare con quel file di testo. Sì, sembra roba da Linux o qualcosa del genere. Scherzo.

Ecco lo stato attuale della cartella Download.

The ‘Download’ folder before Junior performs his ill-advised permissions changes…

Ora, supponiamo che un amministratore junior conceda a Billy Reinders il pieno accesso alla posizione. Supponiamo anche che contenga dati HR a cui Billy non dovrebbe avere accesso.

icacls Download /grant reinders\breinders:F /t /c
Our Junior Admin has granted Billy Reinders Full access to the location

Dopo il comando, controllo di nuovo e vedo che Billy ha il pieno controllo esplicito in questa cartella. In un colpo solo, posso assumere che le autorizzazioni torneranno ai valori predefiniti con una sola esecuzione di questo comando.

icacls Download /reset /t /c
After running the /reset switch, we see Billy no longer has explicit access!

Dopo aver eseguito il comando di reset, puoi vedere che il suo nome è NUOVAMENTE rimosso dall’ACL. Non ha più il pieno accesso alla cartella. Ricorda – questo scannerizzerà l’intera gerarchia delle cartelle.

Suggerimento: In tutta questa situazione, potresti aver capito che Billy effettivamente ha accesso in sola lettura perché il gruppo Utenti predefinito (di cui Billy è membro) ha autorizzazioni di lettura e di esecuzione predefinite. Solo una nota a margine.

Come gestire i livelli di integrità di Windows con icacls

C’è una funzionalità poco conosciuta integrata in Windows chiamata mandatory access control (MAC). È presente da parecchio tempo. Tuttavia, Microsoft ha introdotto il controllo dell’integrità obbligatoria (MIC) in Windows Vista/Windows Server 2008.

Le autorizzazioni sono definite da regole fisse basate su criteri e generalmente non possono essere sovrascritte dagli utenti. È generalmente indicato come controllo dell’integrità di Windows (WIC). Il livello di integrità è utilizzato per determinare il livello di protezione di un oggetto in Windows. Fondamentalmente, si desidera sempre assicurarsi di avere le autorizzazioni corrette per i propri utenti.

I won’t go into great detail here, but I can show you a few examples of how to use the icacls command with it. If we create a new folder, Test, in the Download directory, we can adjust its integrity level to ‘h’igh.

icacls Test /setintegritylevel h

Per farla breve, il livello alto è sinonimo delle autorizzazioni necessarie per eseguire un’attività o un processo come amministratore (diritti di amministratore). Quindi, anche se Billy Reinders avesse il controllo totale su questa cartella, a meno che non gli fossero stati in qualche modo concessi permessi magici da amministratore e fosse in grado di eseguire Esplora file come amministratore (cosa che non può fare…), NON sarebbe in grado di accedere a questa cartella e ai suoi contenuti.

In sostanza, è un altro livello di sicurezza e protezione che si può utilizzare per proteggere dati altamente sensibili.

Come gestire l’ereditarietà delle autorizzazioni con icacls

Possiamo anche utilizzare il comando icacls per visualizzare e modificare l’ereditarietà dei permessi su file e cartelle. Questo ci consente di impostare autorizzazioni esplicite su una cartella mantenendo le altre cartelle impostate per accettare automaticamente gli ACL del contenitore principale.

Disabilitare l’ereditarietà su file e cartelle

Possiamo disabilitare l’ereditarietà su un file o una cartella utilizzando il parametro ‘/ereditarietà:d’. Nel mio esempio, abbiamo una cartella Install nella cartella Download. Qui puoi vedere che la cartella è impostata per ereditare tutte le sue autorizzazioni da sopra.

icacls Download
Disabling inheritance on the Install folder leaving only explicit ACEs

Eliminiamo l’ereditarietà sulla cartella Install.

icacls Install /inheritance:d /t /c
We can see that inheritance has been disabled as the ‘Enable inheritance’ button/toggle is available

Ecco fatto. Noterai che tutte le voci ‘(I)’ sono scomparse. Queste sono ora tutte autorizzazioni esplicite. E puoi vedere sotto la verifica dall’interfaccia grafica che il pulsante ‘Abilita ereditarietà’ è disponibile perché l’abbiamo disabilitato.

Conclusione

L’aspetto più intrigante di icacls per me è la robustezza di poter scrivere script con questo comando per progetti complicati. E, ancora una volta, senza doversi preoccupare della affidabilità dell’Esplora file nel caso si verifichi un errore, si blocchi, cose del genere.

I hope you learned more about using the command line to modify permissions. Please leave a comment or question below. Thank you!

Articolo correlato:

Source:
https://petri.com/icacls-command/