HALP! Я унаследовал кошмар разрешений для перенаправленных папок / домашних каталогов

22

У моего нового работодателя есть настройка перенаправления папок для сотен пользователей, и человек, который его настраивал, на самом деле не знал, что делает. В результате, лучшие практики для разрешений на перенаправленные папки / домашние каталоги не были соблюдены.

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

Что может пойти не так, не так ли? Это не My Documentsзначит, что генеральный директор хранит конфиденциальную информацию в своей папке, или кто-то может заразиться CryptoWall и зашифровать все остальные файлы. Правильно?

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

Как PowerShell может решить эту проблему для меня и сделать жизнь достойной жизни?

HopelessN00b
источник

Ответы:

18

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

$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
источник
1
Круто, он предполагает, что \"кавычка не в кавычках, а CSS испорчен!
Канадец Люк восстановил Монику
3
@CanadianLuke Спасибо! Мне было интересно WTH. Бросил туда пробел нулевой ширины, чтобы исправить CSS ... так что, если у кого-то возникает желание скопировать-pasta, между косой чертой и кавычкой в ​​строке, которая объявляет $ objuser, есть непечатаемый символ.
HopelessN00b
2

Предыдущий ответ не будет работать, если домашние папки / перенаправленные папки были настроены с «Предоставить пользователю эксклюзивные права». Это связано с тем, что при выборе этого параметра, который не рекомендуется , только СИСТЕМА и ПОЛЬЗОВАТЕЛЬ имеют права на эту папку. После этого вы не сможете изменить права доступа (даже с правами администратора), не вступив во владение папкой.

Это метод, позволяющий обойти это БЕЗ владения. Это двухступенчатый процесс.

Создайте сценарий powershell, который запускает ICACLS для изменения разрешений в папках и подпапках.

запустите PSexec, чтобы запустить скрипт Powershell.

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

1 Создание / копирование / кража сценария powershell (требуется 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 и, следовательно, может изменять права доступа к папке, к которой имеют доступ только SYSTEM и пользователь. Установите и запустите PSexec. https://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

Из командной строки:

psexec -s -i powershell -noexit "& 'C:\Path\To\ChangePermissions.ps1'"
Мэтт Форчетт
источник