HALP! Odziedziczyłem koszmar uprawnień dla przekierowanych folderów / katalogów domowych

22

Mój nowy pracodawca skonfigurował przekierowanie folderów dla setek użytkowników, a osoba, która go skonfigurowała, nie wiedziała, co robi. W rezultacie nie przestrzegano najlepszych praktyk dotyczących uprawnień do przekierowanych folderów / katalogów domowych .

Rozwiązaniem umożliwiającym ludziom dostęp do lokalizacji przekierowanych folderów było zastosowanie Full Controluprawnień (uprawnień NTFS, a nie uprawnień „udostępniania”, oczywiście) do Everyonekatalogu głównego („Dom”) i propagowanie tego do wszystkich podfolderów i plików poniżej katalogu głównego .

Co może pójść nie tak, prawda? To nie jest tak, że CEO ma poufne informacje w swoim My Documentsfolderze, albo ktoś zarazi się CryptoWall i zaszyfruje pliki innych osób. Dobrze?

Tak więc w każdym razie, teraz, gdy infekcja CryptoWall została usunięta i kopie zapasowe zostały przywrócone, wiele osób chciałoby, abyśmy zastąpili obecne uprawnienia czymś mniej okropnym, a ja nie chciałbym klikać okien dialogowych uprawnień w kilku sto folderów.

W jaki sposób PowerShell może rozwiązać ten problem i sprawić, że życie będzie warte ponownego życia?

Beznadziejny
źródło

Odpowiedzi:

18

Dzięki JScott za skierowanie mnie do System.Security.Principal... klasy, metody lub cokolwiek to jest, niektóre PowerShell do zastąpienia list ACL w wielu podfolderach tymi, które są odpowiednie dla katalogów domowych użytkowników:

$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

}
Beznadziejny
źródło
1
Fajnie, przy założeniu, że \"ucieka on od cudzysłowu, a CSS jest popsuty!
Kanadyjczyk Luke REINSTATE MONICA,
3
@CanadianLuke Dziękujemy! Zastanawiałem się nad WTH. Wrzuciłem tam przestrzeń o zerowej szerokości, aby naprawić CSS ... więc jeśli ktoś ma ochotę na kopiowanie makaronu, między ukośnikiem a cytatem w wierszu, który deklaruje $ objuser, jest znak, którego nie można wydrukować.
HopelessN00b,
2

Poprzednia odpowiedź nie zadziała, JEŚLI foldery domowe / foldery przekierowane zostały skonfigurowane z opcją „Przyznaj użytkownikowi wyłączne prawa”. Wynika to z faktu, że po wybraniu tej opcji, która nie jest zalecana , tylko SYSTEM i UŻYTKOWNIK mają uprawnienia do folderu. Nie można wtedy zmienić uprawnień (nawet jako administrator) bez przejęcia własności folderu.

Jest to metoda obejścia tego problemu BEZ przejęcia własności. Jest to proces dwuetapowy.

Utwórz skrypt PowerShell, który uruchamia ICACLS, aby zmodyfikować perms na folderach i podfolderach.

uruchom PSexec, aby uruchomić skrypt Powershell.

wzięte i zmodyfikowane z: https://mypkb.wordpress.com/2008/12/29/how-to-restore-administrators-access-to-redirected-my-documents-folder/

1 Utwórz / skopiuj / kradnij skrypt Powershell (wymaga PS 3.0 lub nowszego)

#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. uruchom PSEXEC, działa on jako konto SYSTEM i dlatego może zmieniać perms w folderze, do którego mają dostęp tylko SYSTEM i użytkownik. Zainstaluj i uruchom PSexec. https://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

Z wiersza poleceń:

psexec -s -i powershell -noexit "& 'C:\Path\To\ChangePermissions.ps1'"
matowa Forchette
źródło