HALP! Saya telah mewarisi mimpi buruk izin untuk folder / direktori home yang diarahkan

22

Majikan baru saya memiliki pengaturan pengalihan folder untuk ratusan penggunanya, dan orang yang mengaturnya tidak benar-benar tahu apa yang dia lakukan. Akibatnya, praktik terbaik untuk izin pada folder / direktori home diarahkan tidak diikuti.

Solusi untuk membiarkan orang mengakses lokasi folder yang dialihkan adalah alih-alih menerapkan Full Controlizin (izin NTFS, bukan izin "berbagi", tentu saja) ke Everyonedirektori root ("Beranda") dan menyebarkannya ke semua subfolder dan file di bawah root .

Apa yang mungkin salah, bukan? Ini tidak seperti CEO memiliki informasi rahasia di My Documentsfoldernya, atau siapa pun akan terinfeksi dengan CryptoWall dan mengenkripsi file orang lain. Kanan?

Jadi, bagaimanapun, sekarang setelah infeksi CryptoWall telah dihapus dan cadangan telah dipulihkan, sejumlah orang ingin kami mengganti izin saat ini dengan sesuatu yang kurang mengerikan, dan saya ingin tidak perlu mengklik di sekitar dialog izin di beberapa ratusan folder.

Bagaimana PowerShell bisa menyelesaikan masalah ini untuk saya, dan membuat hidup menjadi layak untuk dijalani kembali?

HopelessN00b
sumber

Jawaban:

18

Dengan terima kasih kepada JScott untuk merujuk saya ke System.Security.Principal... kelas atau metode atau apa pun itu, beberapa PowerShell untuk mengganti ACL pada sekelompok subfolder dengan yang sesuai untuk direktori home pengguna:

$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
sumber
1
Keren, dengan anggapan bahwa \"ia lolos dari tanda kutip, dan CSSnya berantakan!
Luke Kanada REINSTATE MONICA
3
@CanadianLuke Terima kasih! Saya bertanya-tanya WTH. Melemparkan spasi nol lebar di sana untuk memperbaiki CSS ... jadi, jika ada orang yang terdesak untuk menyalin-pasta, ada karakter yang tidak dapat dicetak antara garis miring dan kutipan di baris yang menyatakan $ objuser.
HopelessN00b
2

Jawaban sebelumnya tidak akan berfungsi JIKA folder rumah / folder redirected diatur dengan "Berikan hak eksklusif pengguna". Ini karena ketika opsi ini dipilih yang tidak direkomendasikan , hanya SYSTEM dan THE USER yang memiliki hak atas folder tersebut. Anda kemudian tidak dapat mengubah perms (bahkan sebagai admin) tanpa mengambil kepemilikan folder.

Ini ADALAH metode untuk mengatasi ini TANPA mengambil kepemilikan. Ini adalah proses dua langkah.

Buat skrip PowerShell yang menjalankan ICACLS untuk memodifikasi perm pada folder & subfolder.

jalankan PSexec untuk memulai skrip Powershell.

diambil dan dimodifikasi dari: https://mypkb.wordpress.com/2008/12/29/how-to-restore-administrators-access-to-redirected-my-documents-folder/

1 Buat / salin / curi skrip PowerShell (membutuhkan PS 3.0 atau lebih baik)

#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. jalankan PSEXEC, ia beroperasi sebagai akun SYSTEM dan karena itu dapat mengubah perm pada folder yang hanya diakses oleh SYSTEM dan pengguna. Instal dan jalankan PSexec. https://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

Dari Command Line:

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