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

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

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

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

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

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

22 голоса | спросил HopelessN00b 7 +03002015-10-07T23:32:04+03:00312015bEurope/MoscowWed, 07 Oct 2015 23:32:04 +0300 2015, 23:32:04

2 ответа


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

}
ответил HopelessN00b 7 +03002015-10-07T23:32:04+03:00312015bEurope/MoscowWed, 07 Oct 2015 23:32:04 +0300 2015, 23:32:04
2

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

Это метод обхода этого без права собственности. Это двухэтапный процесс.

Создайте скрипт powershell, который запускает ICACLS, чтобы изменить perms в папках & вложенные папки.

запустить 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 и, следовательно, может изменить perms в папке, к которой имеет доступ только SYSTEM и пользователь. Установите и запустите PSexec. https://technet.microsoft.com/en-us/sysinternals/bb897553. ASPX

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

psexec -s -i powershell -noexit "& 'C:\Path\To\ChangePermissions.ps1'"
ответил matt Forchette 15 +03002015-10-15T20:06:55+03:00312015bEurope/MoscowThu, 15 Oct 2015 20:06:55 +0300 2015, 20:06:55

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132