HALP! Ich habe einen Albtraum von Berechtigungen für umgeleitete Ordner / Basisverzeichnisse geerbt

22

Mein neuer Arbeitgeber hat die Ordnerumleitung für Hunderte von Benutzern eingerichtet, und die Person, die sie eingerichtet hat, wusste nicht wirklich, was sie tat. Infolgedessen wurden die Best Practices für Berechtigungen für umgeleitete Ordner / Basisverzeichnisse nicht befolgt.

Die Lösung für den Zugriff auf umgeleitete Ordner bestand darin, Full ControlBerechtigungen (natürlich NTFS-Berechtigungen, keine Freigabeberechtigungen) Everyoneauf das Stammverzeichnis ("Home") anzuwenden und diese an alle Unterordner und Dateien unterhalb des Stammverzeichnisses weiterzugeben .

Was könnte eventuell schief gehen, oder? Es ist nicht so, dass der CEO vertrauliche Informationen in seinem My DocumentsOrdner hat oder dass sich jemand mit CryptoWall infiziert und die Dateien aller anderen verschlüsselt. Recht?

Nun, da die CryptoWall-Infektion beseitigt und Backups wiederhergestellt wurden, möchten eine Reihe von Leuten, dass wir die aktuellen Berechtigungen durch etwas weniger Schreckliches ersetzen, und ich möchte nicht mehr in mehreren Berechtigungsdialogen herumklicken müssen hundert Ordner.

Wie kann PowerShell dieses Problem für mich lösen und das Leben wieder lebenswert machen?

HopelessN00b
quelle

Antworten:

18

Dank JScott für den Hinweis auf die System.Security.PrincipalKlasse oder Methode ... oder was auch immer, einige PowerShell- Komponenten , um die ACLs in einer Reihe von Unterordnern durch diejenigen zu ersetzen, die für Benutzer-Basisverzeichnisse geeignet sind:

$Root = "Path to the root folder that holds all the user home directories"

$Paths = Get-ChildItem $Root | Select-Object -Property Name,FullName

$DAAR = New-Object system.security.accesscontrol.filesystemaccessrule("MyDomain\Domain Admins","FullControl","ContainerInherit, ObjectInherit","None","Allow")
#Domain Admin Access Rule.

$SysAR = New-Object system.security.accesscontrol.filesystemaccessrule("SYSTEM","FullControl","ContainerInherit, ObjectInherit","None","Allow")
#SYSTEM Access Rule.

foreach ($Folder in $Paths)
{

    Write-Host "Generating ACL for $($folder.FullName) ... "
    #For error handling purposes - not all folders will map to a user of the exact same name, this makes them easier to handle when viewing the output.

    $ACL = New-Object System.Security.AccessControl.DirectorySecurity
    #Creates a blank ACL object to add access rules into, also blanks out the ACL for each iteration of the loop.

    $objUser = New-Object System.Security.Principal.NTAccount("MyDomain\​"+$folder.name)
    #Creating the right type of User Object to feed into our ACL, and populating it with the user whose folder we're currently on.

    $UserAR = New-Object system.security.accesscontrol.filesystemaccessrule( $objuser ,"FullControl","ContainerInherit, ObjectInherit","None","Allow")
    #Access Rule for the user whose folder we're dealing with during this iteration.

    $acl.SetOwner($objUser)
    $acl.SetAccessRuleProtection($true, $false)
    #Change the inheritance/propagation settings of the folder we're dealing with

    $acl.SetAccessRule($UserAR)
    $acl.SetAccessRule($DAAR)
    $acl.SetAccessRule($SysAR)

    Write-Host "Changing ACL on $($folder.FullName) to:"
    $acl | fl
    #For error handling purposes - not all folders will map to a user of the exact same name, this makes them easier to handle when viewing the output.

    Set-Acl -Path $Folder.Fullname -ACLObject $acl

}
HopelessN00b
quelle
1
Cool, es wird vorausgesetzt \", dass das Anführungszeichen fehlt und das CSS durcheinander ist!
Kanadier Luke REINSTATE MONICA
3
@CanadianLuke Vielen Dank! Ich habe mich gefragt, WTH. Wirf ein Leerzeichen mit der Breite Null ein, um das CSS zu korrigieren. Wenn also jemand den Drang hat, Pasta zu kopieren, befindet sich zwischen dem Schrägstrich und dem Zitat in der Zeile, die $ objuser deklariert, ein nicht druckbares Zeichen.
HopelessN00b
2

Die vorherige Antwort funktioniert nicht, wenn die Ausgangsordner / umgeleiteten Ordner mit "Benutzer-Exklusivrechte gewähren" eingerichtet wurden. Dies liegt daran, dass bei Auswahl dieser Option, die nicht empfohlen wird , nur SYSTEM und THE USER Rechte für den Ordner haben. Sie können die Berechtigungen dann nicht ändern (auch nicht als Administrator), ohne den Besitz des Ordners zu übernehmen.

Dies ist eine Methode, um dies zu umgehen, ohne den Besitz zu übernehmen. Es ist ein zweistufiger Prozess.

Erstellen Sie ein Powershell-Skript, mit dem ICACLS ausgeführt wird, um die Berechtigungen für die Ordner und Unterordner zu ändern.

Führen Sie PSexec aus, um das Powershell-Skript zu starten.

entnommen und geändert aus: https://mypkb.wordpress.com/2008/12/29/how-to-restore-administrators-access-to-redirected-my-documents-folder/

1 PowerShell-Skript erstellen / kopieren / stehlen (erfordert PS 3.0 oder höher)

#ChangePermissions.ps1
# CACLS rights are usually
# F = FullControl
# C = Change
# R = Readonly
# W = Write

$StartingDir= "c:\shares\users"   ##Path to root of users home dirs
$Principal="domain\username"    #or "administrators"
$Permission="F"

$Verify=Read-Host `n "You are about to change permissions on all" `
"files starting at"$StartingDir.ToUpper() `n "for security"`
"principal"$Principal.ToUpper() `
"with new right of"$Permission.ToUpper()"."`n `
"Do you want to continue? [Y,N]"

if ($Verify -eq "Y") {

foreach ($FOLDER in $(Get-ChildItem -path $StartingDir -directory -recurse)) {

$temp = $Folder.fullname
CACLS `"$temp`" /E /P `"${Principal}`":${Permission} >$NULL
#write-host $Folder.FullName 
}
}
  1. Führen Sie PSEXEC aus. Es fungiert als SYSTEM-Konto und kann daher die Berechtigungen für den Ordner ändern, auf den nur SYSTEM und der Benutzer Zugriff haben. Installiere und starte PSexec. https://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

Von der Kommandozeile:

psexec -s -i powershell -noexit "& 'C:\Path\To\ChangePermissions.ps1'"
matte Forchette
quelle