ХАЛП! Я успадкував кошмар дозволів на перенаправлені папки / домашні каталоги


22

Мій новий роботодавець має налаштування переадресації папок для своїх сотень користувачів, і людина, яка його налаштувала, насправді не знала, що він робить. Як результат, найкращі практики для дозволів на перенаправлені папки / домашні каталоги не дотримувалися.

Рішенням дозволити людям отримувати доступ до своїх перенаправлених місць папок було натомість застосовувати Full Controlдозволи (звичайно, дозволи NTFS, не "ділитися") до Everyoneкореневого каталогу ("Домашня сторінка") і розповсюджувати це до всіх папок і файлів під коренем .

Що може піти не так, правда? Це не так, як генеральний директор має конфіденційну інформацію у своїй My Documentsпапці, або хтось збирається заразитися CryptoWall та зашифрувати файли всіх інших. Правильно?

Отож, у будь-якому випадку, тепер, коли було видалено інфекцію CryptoWall і відновлено резервні копії, багато людей хотіли б, щоб ми замінили поточні дозволи чимось менш жахливим, і мені хотілося б не потрібно клацати діалоги дозволів у кількох сотня папок.

Як PowerShell може вирішити цю проблему для мене і зробити життя вартим знову?

Відповіді:


18

Завдяки JScott за те, що він посилав мене на System.Security.Principalклас ... або метод чи будь-який інший, якийсь PowerShell замінить ACL на купі підпапок на ті, що підходять для домашніх каталогів користувачів:

$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

}

1
Класно, передбачається, що \"втеча лапки, і CSS заплутався!
Канадський Люк ВІДНОВЛЕННЯ МОНИЦИ

3
@CanadianLuke Дякую! Мені було цікаво WTH. Вкиньте туди пробіл із нульовою шириною, щоб виправити CSS ... тож, якщо хтось отримає бажання скопіювати пасту, між рядком та лапою в рядку, який оголошує $ objuser, є недрукований символ.
HopelessN00b

2

Попередня відповідь не допоможе, якщо домашні папки / переспрямовані папки були створені з "Надати користувачеві ексклюзивні права". Це відбувається тому, що коли вибрано цей параметр, який не рекомендується , права на папку мають лише СИСТЕМА та КОРИСТУВАЧ. Потім ви не можете змінити perms (навіть як адміністратор) без права власності на папку.

Це метод обходу цього БЕЗ взяття права власності. Це двоетапний процес.

Створіть скрипт powerhell, який запускає ICACLS, щоб змінити візитки для папок і підпапок.

запустіть PSexec для запуску скрипту Powershell.

взято та змінено з: https://mypkb.wordpress.com/2008/12/29/how-to-restore-administrators-access-to-redirected-my-documents-folder/

1 Створіть / скопіюйте / викрадайте скрипт повноважень (потрібен PS 3.0 або вище)

#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. запустіть PSEXEC, він функціонує як обліковий запис SYSTEM і тому може змінювати perms в папці, до якої мають доступ лише SYSTEM та користувач. Встановити та запустити PSexec. https://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

З командного рядка:

psexec -s -i powershell -noexit "& 'C:\Path\To\ChangePermissions.ps1'"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.