Hoe je het Icacls Commando Gebruikt om Bestandsmachtigingen te Beheren

Icacls is een Windows command-line hulpprogramma dat IT-beheerders kunnen gebruiken om toegangscontrolelijsten voor bestanden en mappen te wijzigen. Een van de meest voorkomende taken die een IT Professional of systeembeheerder uitvoert, is het wijzigen van machtigingen op een bestandsserver. Het gebruiken van het icacls commando is een zeer efficiënte manier om dit te doen, en we zullen uitleggen hoe je dit commando kunt gebruiken in deze handleiding.

Hoe het icacls commando te gebruiken

Op basis van mijn eigen ervaring wordt het wijzigen van bestandsmachtigingen op Windows doorgaans gedaan met behulp van de Verkenner. Voor veel IT-medewerkers is het heel intuïtief om Verkenner te openen, te bladeren naar de netwerklocatie die problemen veroorzaakt voor sommige gebruikers en hun machtigingen van ‘Lezen’ naar ‘Lezen/Wijzigen’ of iets soortgelijks te wijzigen. Mooi en snel, vrij eenvoudig te gebruiken.

Advertentie

Er zijn echter talloze scenario’s met verschillende mate van omvang waarbij de GUI gewoon niet zo robuust is als we zouden willen. Als we machtigingen willen wijzigen voor 22 miljoen bestanden en mappen, willen we het goed doen!

Wat is een toegangscontrolelijst (ACL)?

In Windows en NTFS-bestandsystemen heeft elk bestandobject (bestand, map) een toegangsbeheerlijst. Deze lijst bestaat uit toegangsbeheeritems (ACE). De lijst bevat alle gebruikers en/of andere beveiligingscontainerobjecten (groepen, enz.) die een bepaald niveau van machtiging hebben voor het genoemde bestandobject.

Wat is een toegangsbeheeritem (ACE)?

Een toegangsbeheeritem (ACE) is een individueel record of machtigingsregel die de individuele machtigingsniveaus van een gebruiker/groep op een bestandobject regelt. Hier volgt een overzicht van de hoogwaardige basismachtigingen die beschikbaar zijn voor een ACL:

Advertentie

  • Volledige toegang (F)
  • Wijzigingsmachtiging (M) (inclusief ‘verwijderen’)
  • Lees- en uitvoermachtigingen (RX)
  • Alleen-lezen toegang (R)
  • Alleen-schrijven toegang (W)

Er zijn een dozijn of meer “geavanceerde” machtigingen, maar deze vallen buiten het bestek van dit artikel.

Beperkingen van Bestandsverkenner

Nu, als ik de programmamanager bij Microsoft was voor de Verkenner (GEEN functie waar ik bijzonder naar uitkijk), dit zijn de functies die ik zou toevoegen. En geloof me, ik heb gewild dat ze deze toevoegen voor decennia!

Laten we zeggen dat je een bestandsservermigratie van Server A naar Server B aan het beheren bent. Je hebt de gegevens al gekopieerd naar de bestemming (Server B). Je hebt ontdekt dat niet alle machtigingen recursief juist lijken te zijn.

Dus, je gaat naar de root van je boom, gaat naar het Beveiliging tabblad, en maakt een paar wijzigingen in de toegangsbeheerlijst. Je vinkt het vakje aan om alle 22 miljoen bestanden en mappen onder de root recursief te wijzigen. Het begint wijzigingen aan te brengen en gooit dan een paar bevestigingspop-ups naar jou over het maken van wijzigingen in systeembestanden, alleen-lezen bestanden, enzovoort.

Advertentie

En nu is hier mijn verzoek – In de mini ‘wizard’ die ze zouden kunnen maken, wil ik kunnen specificeren om eenvoudig aan te nemen en op ‘Ja’ te klikken bij alle verzoeken om bevestiging. Vervolgens zou het proces doorgaan bij eventuele fouten en mij dan een samenvatting aanbieden wanneer het klaar is, met een link om de ruwe output van het bestand te downloaden zodat ik terug kan gaan en controleren of er fouten of waarschuwingen verschenen zijn.

Nee, ik weet niet of Microsoft ooit zo’n prachtige, robuuste, instellen-en-vergeten functieset zal aanbieden als deze. Dus, in de tussentijd, gaan we naar de kracht van de opdrachtregel en scripting. Dat is waar de ingebouwde icacls opdracht van pas komt.

Het begrijpen van de icacls syntaxis

De syntaxis van icacls is eigenlijk vrij eenvoudig en relatief gemakkelijk te leren. Eigenlijk gebruik je het commando, voeg je vervolgens het bestand of map toe dat je wilt controleren of manipuleren, en dan de machtiging(en) die je wilt toevoegen/wijzigen/verwijderen.

Er zijn natuurlijk ook commandoregelschakelaars. We zullen dit binnenkort allemaal behandelen. Hier is een voorbeeld van wat er gebeurt als je gewoon het volgende commando uitvoert en dan een bestandsnaam toevoegt.

icacls Excellent.txt
Using icacls to view current permissions

Er wordt één ACE per regel weergegeven, dus bij het bovenstaande voorbeeld:

  • Het ingebouwde ‘SYSTEM’-account heeft Geërfde (I) en Volledige (F) toegangsrechten
  • De ingebouwde Beheerdersgroep heeft dezelfde rechten
  • De ingebouwde Gebruikersgroep heeft Geërfde (I), Lezen (R) en Uitvoeren (X) rechten.

Kun je icacls in PowerShell gebruiken?

Nou, zoals je kunt zien aan mijn voorbeeld hierboven en de schermafbeelding, kun je zeker PowerShell gebruiken om het icacls-commando te gebruiken. Je moet alleen op de hoogte zijn van enkele omgevingsvariabelen die iets anders moeten worden aangesproken.

De equivalent PowerShell-cmdlets om ACL’s op bestandsobjecten te bekijken en te beheren zijn Get-Acl en Set-Acl. Het klinkt als een idee voor een toekomstige post! ?

Het instellen van machtigingen voor een bestand of map met behulp van icacls

Omdat het icacls-commando ingebouwd is in Windows, ben je vrij om het commando te gaan gebruiken zodra je de basisbeginselen begrijpt. Je kan ook gewoon ‘icacls’ typen op de opdrachtregel om de beschikbare Help-informatie te bekijken. Je kan ook soortgelijke Microsoft-documentatie voor het icacls-commando op deze pagina bekijken.

Hoe de huidige ACL voor een object weergeven

Oké, dat is genoeg uiteenzetting… laten we beginnen met het gebruiken van het commando. Om de huidige ACL voor een bestand of map weer te geven, gebruik je eenvoudigweg de volgende commando’s:

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

Hier is ‘Download’ een map met bestanden en submappen. Zoals je zult opmerken, is de uitvoer een beetje anders voor mapobjecten. Je ziet (OI) en (CI) omdat dit speciale container-erfbaarheidsniveaupermissies zijn die alleen van toepassing zijn op mappen.

Voor de ingebouwde groep Beheerders zie je dat deze volledige rechten heeft en geërfde machtigingen heeft. De ‘(OI)’ toont aan dat de andere objecten in deze map dit ACE zullen erven. De ‘(CI)’ toont aan dat andere mappen in deze map opnieuw dit ACE zullen erven. (Deze map heeft er toevallig geen, maar als die er waren, zou het automatisch dezelfde ACEs erven).

Rechten toekennen aan een bestand of map

Nu beginnen de dingen op te warmen. Laten we machtigingen instellen en enkele toevoegen aan andere gebruikers in ons Active Directory domein met de /grant-schakelaar. Met het volgende commando geven we Billy Reinders (breinders) alleen-lezen (R) machtigingen voor het Excellent.txt-bestand.

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

Het vorige commando hier werd succesvol uitgevoerd; ik heb vervolgens mijn wijzigingen gevalideerd door machtigingen te controleren – we zien nu dat ‘REINDERS\breinders’ alleen-lezen (R) machtigingen heeft. En, omdat we geen ‘I’ vermeld zien, weten we dat het niet geërfd is, het is expliciet.

Even ter herinnering, de ‘/t’ schakelaar wordt gebruikt om de machtigingen recursief in de hele mapstructuur in te stellen. De ‘/c’ schakelaar vertelt het commando om door te gaan als het eventuele fouten tegenkomt.

Machtigingen verwijderen voor een bestand of map

In plaats van de /grant-schakelaar te gebruiken om machtigingen toe te voegen, gebruiken we de /remove-schakelaar om machtigingen van een ACE te verwijderen. Laten we nu doorgaan en Billy’s vrij kortstondige toegang tot het Excellent.txt-bestand verwijderen.

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

Hier gebruiken we de ‘/remove:g’ schakelaar om de machtiging die eerder aan Billy Reinders was verleend te verwijderen. Ik heb het commando opnieuw uitgevoerd ter verificatie en je zult zien dat de ACL voor Billy is verdwenen. Uitstekend! ?

Machtigingen weigeren voor een bestand of map

Over het algemeen wilt u het gebruik van expliciete ‘weigeren’ machtigingen vermijden vanwege de complexiteit die het in uw algehele machtigingsinfrastructuur doordringt. In de meeste situaties kunt u vertrouwen op een impliciete weigering, de standaard, om met deze omstandigheden om te gaan.

Als een gebruiker niet wordt vermeld in een ACL en de gebruiker geen lid is van een van de in de ACL vermelde groep(en), wordt ervan uitgegaan (tussen haakjes) door Windows dat die gebruiker GEEN machtigingen heeft op dat object. Het volgende voorbeeld illustreert echter hoe uit de hand dit kan lopen – als een gebruiker lid is van twee groepen, en aan de ene groep toegang wordt verleend terwijl de andere groep wordt geweigerd, zal die gebruiker worden geweigerd. Dat op zich is logisch, maar het kan erg ingewikkeld worden bij het proberen dit soort dingen op te lossen.

Als u echter expliciet een weigering wilt toevoegen, kunt u de algemene ‘/deny’ schakelaar gebruiken om dit te bereiken.

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

Hier zie je de opdracht die ik heb uitgevoerd; deze is met succes voltooid. Vervolgens heb ik het tabblad Beveiliging voor de map Download gecontroleerd – je ziet dat Billy weigeringsmachtigingen heeft op het object en al zijn inhoud.

Hoe u de ACL voor een object opnieuw instelt

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

[afbeelding]

Direct nadat ik Billy opnieuw ‘RW’-rechten voor de map Download en de inhoud had toegekend, heb ik de resetopdracht uitgevoerd. Zoals je kunt zien, is zijn naam opnieuw afwezig in de ACL op het tabblad Beveiliging. Lekker makkelijk.

Hoe u ACL’s kunt opslaan en herstellen

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.

Als je merkt dat je halverwege je script een syntaxisfout hebt gemaakt, kun je het eventueel afbreken en vervolgens de status van de ACL’s voor de gehele boom herstellen met één uitvoering van het commando met behulp van de ‘/restore’ parameter! Laten we het proberen!

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

Dit zal de volledige ACL-boom van de map Download opslaan in een enkel bestand met de naam ‘Download_ACL_Backup’. Ik raad je ten zeerste aan om NIET te knoeien met dat tekstbestand. Ja, het ziet eruit als wat gekke dingen zoals Linux of zoiets. 😉 Gewoon een grapje.

Hier is de huidige status van de map Download.

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

Laten we nu aannemen dat een junior beheerder Billy Reinders volledige toegang verleent tot de locatie. Laten we ook aannemen dat het HR-gegevens bevat waar Billy GEEN toegang toe zou moeten hebben.

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

Na het commando controleer ik opnieuw en zie ik dat Billy volledige, expliciete controle heeft in deze map. Met één klap kan worden aangenomen dat de machtigingen met één uitvoering van dit commando terugkeren naar de standaardinstellingen.

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

Na het uitvoeren van het reset-commando zie je dat zijn naam OPNIEUW is verwijderd uit de ACL. Hij heeft niet langer volledige toegang tot de map. Herinnering – dit zal de volledige maphiërarchie scannen.

Tip: Gedurende dit scenario heb je misschien gemerkt dat Billy wel degelijk alleen-lezen toegang heeft omdat de ingebouwde Gebruikersgroep (waar Billy lid van is) standaard Lezen en Uitvoeren-machtigingen heeft. Gewoon ter informatie.

Hoe Windows-integriteitsniveaus te beheren met icacls

Er is een minder bekende functie ingebouwd in Windows genaamd verplichte toegangscontrole (MAC). Het bestaat al een tijdje. Echter, Microsoft introduceerde verplichte integriteitscontrole (MIC) in Windows Vista/Windows Server 2008.

Machtigingen worden gedefinieerd door op beleid gebaseerde vaste regels en kunnen over het algemeen niet worden overschreven door gebruikers. Het wordt over het algemeen aangeduid als Windows integriteitscontrole (WIC). Het integriteitsniveau wordt gebruikt om het beschermingsniveau van een object in Windows te bepalen. In wezen wil je altijd zorgen dat je de juiste machtigingen hebt voor je gebruikers.

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

Kortom, het hoge niveau is synoniem met de benodigde machtigingen om een taak of proces uit te voeren als beheerder (beheerdersrechten). Dus zelfs als Billy Reinders Volledige controle had over deze map, tenzij hij op de een of andere manier magische beheerdersmachtigingen had gekregen, EN in staat was om Bestandsverkenner als beheerder uit te voeren (dat kan hij niet…), zou hij GEEN toegang hebben tot deze map en de inhoud ervan.

Dus, in wezen is het nog een laag van beveiliging en bescherming die je kunt gebruiken om zeer gevoelige gegevens te beschermen.

Hoe machtigingserfenis te beheren met icacls

We kunnen ook de icacls-opdracht gebruiken om de overervingstoestemming op bestanden en mappen te bekijken en aan te passen. Dit stelt ons in staat om expliciete machtigingen in te stellen voor één map terwijl de overige mappen zijn ingesteld om de ACL’s van de bovenliggende container automatisch te accepteren.

Schakel overerving uit voor bestanden en mappen

We kunnen overerving uitschakelen voor een bestand of map door de parameter ‘/overerving:d’ te gebruiken. In mijn voorbeeld hebben we een Install-map in de Download-map. Je kunt hier zien dat de map is ingesteld om alle machtigingen van hierboven over te nemen.

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

Laten we de overerving op de Install-map verwijderen.

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

Daar ga je. Je zult merken dat alle ‘(I)’ vermeldingen verdwenen zijn. Dit zijn nu allemaal expliciete machtigingen. En je kunt hieronder verificatie zien vanuit de GUI dat de knop ‘Overerving inschakelen’ beschikbaar is omdat we deze hebben uitgeschakeld.

Conclusie

Het meest intrigerende aspect van icacls voor mij is de robuustheid om met deze opdracht complexe projecten te scripten. En, opnieuw, hoef je je geen zorgen te maken over de betrouwbaarheid van de Verkenner als deze een fout tegenkomt, crasht, dat soort dingen.

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

Gerelateerd artikel:

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