HALP! ฉันได้รับสิทธิ์ในฝันร้ายสำหรับการเปลี่ยนเส้นทางโฟลเดอร์ / โฮมไดเร็กตอรี่


22

นายจ้างใหม่ของฉันมีการตั้งค่าการเปลี่ยนเส้นทางโฟลเดอร์สำหรับผู้ใช้หลายร้อยคนและผู้ตั้งค่าไม่รู้ว่าเขากำลังทำอะไรอยู่ เป็นผลให้การปฏิบัติที่ดีที่สุดสำหรับสิทธิ์ในการเปลี่ยนเส้นทางโฟลเดอร์ไดเรกทอรี / บ้านไม่ได้ตาม

วิธีแก้ปัญหาเพื่อให้ผู้ใช้เข้าถึงตำแหน่งโฟลเดอร์ที่ถูกเปลี่ยนเส้นทางของพวกเขาคือการใช้Full Controlสิทธิ์ (สิทธิ์ NTFS ไม่ใช่สิทธิ์ "แชร์" แน่นอน) ไปEveryoneที่ไดเรกทอรีราก ("บ้าน") และเผยแพร่ลงไปที่โฟลเดอร์ย่อยและไฟล์ทั้งหมดใต้ราก .

มีอะไรผิดปกติใช่มั้ย ไม่ใช่ว่า CEO มีข้อมูลที่เป็นความลับในMy Documentsโฟลเดอร์ของเขาหรือใครก็ตามที่ติดเชื้อ CryptoWall และเข้ารหัสไฟล์ของคนอื่น ขวา?

ดังนั้นตอนนี้การติดเชื้อ CryptoWall ได้ถูกลบและการสำรองข้อมูลได้รับการกู้คืนผู้คนจำนวนมากต้องการให้เราแทนที่สิทธิ์ปัจจุบันด้วยบางสิ่งที่น่ากลัวน้อยกว่าและฉันไม่ต้องการคลิกไปที่กล่องโต้ตอบการอนุญาตในหลาย ๆ ร้อยโฟลเดอร์

PowerShell สามารถแก้ปัญหานี้ให้ฉันได้อย่างไรและทำให้ชีวิตมีค่าควรแก่การมีชีวิตอีกครั้ง?

คำตอบ:


18

ด้วย JScott ที่อ้างถึงฉันถึงSystem.Security.Principal... คลาสหรือวิธีการหรืออะไรก็ตาม PowerShell บางอันที่จะแทนที่ ACLs ในโฟลเดอร์ย่อย ๆ ด้วยโฟลเดอร์ย่อยที่เหมาะสมสำหรับโฮมไดเรกทอรีผู้ใช้:

$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

}

1
เยี่ยมเลยสมมติว่า\"เครื่องหมาย Escape อยู่ระหว่างการหลบหนีและ CSS ก็ยุ่งเหยิง!
Canadian Luke ติดตั้ง MONICA ใหม่

3
@CanadianLuke ขอบคุณ! ฉันสงสัย WTH โยนพื้นที่ว่างที่มีความกว้างเป็นศูนย์เพื่อแก้ไข CSS ... ดังนั้นหากใครก็ตามได้รับการกระตุ้นให้คัดลอกพาสต้ามีอักขระที่ไม่สามารถพิมพ์ได้ระหว่างเครื่องหมายทับและเครื่องหมายคำพูดในบรรทัดที่ประกาศ $ objuser
HopelessN00b

2

คำตอบก่อนหน้านี้จะไม่ทำงานหากตั้งค่าโฮมโฟลเดอร์ / โฟลเดอร์ที่เปลี่ยนเส้นทางด้วย "ให้สิทธิ์ผู้ใช้แบบเอกสิทธิ์" นี่เป็นเพราะเมื่อเลือกตัวเลือกนี้ซึ่งไม่แนะนำระบบและผู้ใช้เท่านั้นที่มีสิทธิ์ในโฟลเดอร์ จากนั้นคุณไม่สามารถเปลี่ยน perms (แม้ในฐานะผู้ดูแลระบบ) โดยไม่ต้องเป็นเจ้าของโฟลเดอร์

นี่เป็นวิธีการแก้ไขโดยไม่ต้องมีกรรมสิทธิ์ มันเป็นกระบวนการสองขั้นตอน

สร้างสคริปต์ 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 มันทำหน้าที่เป็นบัญชีระบบและดังนั้นจึงสามารถเปลี่ยน perms ในโฟลเดอร์ที่มีเพียงระบบและผู้ใช้ที่มีการเข้าถึง ติดตั้งและเรียกใช้ PSexec https://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

จากบรรทัดคำสั่ง:

psexec -s -i powershell -noexit "& 'C:\Path\To\ChangePermissions.ps1'"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.