HALP! Eu herdei um pesadelo de permissões para pastas redirecionadas / diretórios pessoais

22

Meu novo empregador tem uma configuração de redirecionamento de pastas para centenas de usuários, e a pessoa que a configurou não sabia realmente o que estava fazendo. Como resultado, as práticas recomendadas para permissões em pastas redirecionadas / diretórios pessoais não foram seguidas.

A solução para permitir que as pessoas acessem seus locais de pasta redirecionada era aplicar Full Controlpermissões (permissões NTFS, não "compartilhar", é claro)) Everyoneno diretório raiz ("Página inicial") e propagá-lo para todas as subpastas e arquivos abaixo da raiz .

O que poderia dar errado, certo? Não é como se o CEO tivesse informações confidenciais em sua My Documentspasta ou alguém fosse infectado pelo CryptoWall e criptografasse os arquivos de todos os outros. Direita?

Portanto, agora que a infecção pelo CryptoWall foi removida e os backups foram restaurados, várias pessoas gostariam que substituíssemos as permissões atuais por algo menos horrível, e eu gostaria de não precisar clicar nas caixas de diálogo de permissões em vários cem pastas.

Como o PowerShell pode resolver esse problema para mim e tornar a vida digna de ser vivida novamente?

HopelessN00b
fonte

Respostas:

18

Com os agradecimentos ao JScott por me referir à System.Security.Principal... classe ou método ou seja o que for, alguns PowerShell substituem as ACLs em várias subpastas pelas que são apropriadas para os diretórios pessoais do usuário:

$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
fonte
1
Legal, está assumindo que \"está escapando das aspas e o CSS está bagunçado!
Canadian Luke REINSTATE MONICA
3
@CanadianLuke Thank you! Eu estava pensando WTH. Jogou um espaço de largura zero para corrigir o CSS ... então, se alguém sentir vontade de copiar massas, haverá um caractere não imprimível entre a barra e a citação na linha que declara $ objuser.
HopelessN00b
2

A resposta anterior não funcionará se as pastas iniciais / pastas redirecionadas foram configuradas com "Conceder direitos exclusivos ao usuário". Isso ocorre porque quando essa opção é selecionada, a qual não é recomendada , apenas SYSTEM e THE USER têm direitos para a pasta. Você não pode alterar as permissões (mesmo como administrador) sem se apropriar da pasta.

Este é um método para contornar isso sem tomar posse. É um processo de duas etapas.

Crie um script do PowerShell que execute o ICACLS para modificar as permissões nas pastas e subpastas.

execute o PSexec para iniciar o script do Powershell.

retirado e modificado de: https://mypkb.wordpress.com/2008/12/29/how-to-restore-administrators-access-to-redirected-my-documents-folder/

1 Crie / copie / roube o script do PowerShell (requer o PS 3.0 ou superior)

#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. executar o PSEXEC, ele opera como a conta SYSTEM e, portanto, pode alterar as permissões na pasta à qual somente SYSTEM e o usuário têm acesso. Instale e execute o PSexec. https://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

Na linha de comando:

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