HALP! Heredé una pesadilla de permisos para carpetas redirigidas / directorios de inicio

22

Mi nuevo empleador tiene una configuración de redirección de carpetas para sus cientos de usuarios, y la persona que la configuró realmente no sabía lo que estaba haciendo. Como resultado, no se siguieron las mejores prácticas para los permisos en carpetas redirigidas / directorios principales .

La solución para permitir que las personas accedan a sus ubicaciones de carpetas redirigidas fue aplicar Full Controlpermisos (permisos NTFS, no permisos de "compartir", por supuesto) al Everyonedirectorio raíz ("Inicio") y propagarlo a todas las subcarpetas y archivos debajo de la raíz .

¿Qué podría salir mal, verdad? No es que el CEO tenga información confidencial en su My Documentscarpeta, o que alguien se infecte con CryptoWall y cifre los archivos de todos los demás. ¿Correcto?

Entonces, de todos modos, ahora que se ha eliminado la infección CryptoWall y se han restaurado las copias de seguridad, a varias personas les gustaría que reemplazáramos los permisos actuales por algo menos horrible, y me gustaría no tener que hacer clic en los diálogos de permisos en varios cien carpetas

¿Cómo puede PowerShell resolver este problema por mí y hacer que la vida valga la pena volver a vivir?

HopelessN00b
fuente

Respuestas:

18

Gracias a JScott por referirme a la System.Security.Principal... clase o método o lo que sea, algunos PowerShell para reemplazar las ACL en un grupo de subcarpetas con aquellas que son apropiadas para los directorios de inicio de los usuarios:

$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
fuente
1
¡Genial, está asumiendo que se \"está escapando de las comillas, y el CSS está en mal estado!
Canadian Luke REINSTATE MONICA
3
@CanadianLuke ¡Gracias! Me preguntaba WTH. Lancé un espacio de ancho cero para arreglar el CSS ... así que, si alguien siente la necesidad de copiar y pegar, hay un carácter no imprimible entre la barra y la cita en la línea que declara $ objuser.
HopelessN00b
2

La respuesta anterior no funcionará SI las carpetas de inicio / carpetas redirigidas se configuraron con "Conceder derechos exclusivos al usuario". Esto se debe a que cuando se selecciona esta opción que no se recomienda , solo SYSTEM y EL USUARIO tienen derechos sobre la carpeta. Entonces no puede cambiar los permisos (incluso como administrador) sin tomar posesión de la carpeta.

Este ES un método para solucionar esto SIN tomar posesión. Es un proceso de dos pasos.

Cree un script de PowerShell que ejecute ICACLS para modificar los permisos en las carpetas y subcarpetas.

ejecute PSexec para iniciar el script Powershell.

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

1 Crear / copiar / robar script de PowerShell (requiere PS 3.0 o mejor)

#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. ejecute PSEXEC, funciona como la cuenta SYSTEM y, por lo tanto, puede cambiar los permisos en la carpeta a la que solo tienen acceso SYSTEM y el usuario. Instala y ejecuta PSexec. https://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

Desde la línea de comando:

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