¡MEDIO! Heredé una pesadilla de permisos para carpetas/directorios de inicio redirigidos

¡MEDIO! Heredé una pesadilla de permisos para carpetas/directorios de inicio redirigidos

Mi nuevo empleador tiene configurado el redireccionamiento de carpetas para sus cientos de usuarios, y la persona que lo configuró no sabía realmente lo que estaba haciendo. Como resultado,las mejores prácticas para permisos en carpetas/directorios de inicio redirigidosno fue seguido.

La solución para permitir que las personas accedan a las ubicaciones de sus carpetas redirigidas fue aplicar Full Controlpermisos (permisos NTFS, no permisos de "compartir", por supuesto) en Everyoneel directorio 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 vaya a infectarse con CryptoWall y cifrar los archivos de los demás. ¿Bien?

De todos modos, ahora que se eliminó la infección CryptoWall y se restauraron las copias de seguridad, a varias personas les gustaría que reemplazáramos los permisos actuales con algo menos horrible, y a mí 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 y hacer que valga la pena volver a vivir la vida?

Respuesta1

Con agradecimiento a JScott.por referirme a la System.Security.Principal... clase o método o lo que sea, algo de PowerShell para reemplazar las ACL en un montón 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

}

Respuesta2

La respuesta anterior no funcionará.SIlas carpetas de inicio/carpetas redirigidas se configuraron con "Otorgar al usuario derechos exclusivos". Esto se debe a que cuando se selecciona esta opciónlo cual no es recomendable, sólo el SISTEMA y EL USUARIO tienen derechos sobre la carpeta. Entonces no podrá cambiar los permisos (ni siquiera como administrador) sin tomar posesión de la carpeta.

Este ES un método para solucionar este problema 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 de 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 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. ejecute PSEXEC, funciona como la cuenta del SISTEMA y, por lo tanto, puede cambiar los permisos en la carpeta a la que solo el SISTEMA y el usuario tienen acceso. Instale y ejecute 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'"

información relacionada