NÓI! Tôi đã thừa hưởng một cơn ác mộng về quyền đối với các thư mục được chuyển hướng / thư mục nhà


22

Chủ nhân mới của tôi có thiết lập chuyển hướng thư mục cho hàng trăm người dùng và người thiết lập nó không thực sự biết anh ta đang làm gì. Do đó, các cách thực hành tốt nhất cho quyền trên các thư mục được chuyển hướng / thư mục chính không được tuân theo.

Giải pháp cho phép mọi người truy cập vào các vị trí thư mục được chuyển hướng của họ là thay vào đó áp dụng các Full Controlquyền (tất nhiên là quyền NTFS, không phải là quyền "chia sẻ") Everyonetại thư mục gốc ("Trang chủ") và truyền xuống tất cả các thư mục con và tệp bên dưới thư mục gốc .

Điều gì có thể đi sai, phải không? Không giống như Giám đốc điều hành có thông tin bí mật trong My Documentsthư mục của mình hoặc bất kỳ ai sẽ bị nhiễm CryptoWall và mã hóa các tệp của mọi người khác. Đúng?

Vì vậy, dù sao, bây giờ, việc nhiễm CryptoWall đã bị xóa và các bản sao lưu đã được khôi phục, một số người muốn chúng tôi thay thế các quyền hiện tại bằng một cái gì đó ít kinh khủng hơn và tôi không muốn phải nhấp vào các hộp thoại quyền trong một số trăm thư mục.

Làm cách nào PowerShell có thể giải quyết vấn đề này cho tôi và khiến cuộc sống trở nên đáng sống trở lại?

Câu trả lời:


18

Nhờ có JScott đã giới thiệu tôi đến System.Security.Principal... lớp hoặc phương thức hoặc bất kể đó là gì, một số PowerShell để thay thế ACL trên một loạt các thư mục con bằng các thư mục phù hợp cho thư mục nhà của người dùng:

$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
Thật tuyệt, nó giả sử \"đang thoát khỏi dấu ngoặc kép và CSS bị rối tung!
Luke Luke REINSTATE MONICA của Canada

3
@CanadianLuke Cảm ơn bạn! Tôi đã tự hỏi WTH. Đã tạo một không gian có độ rộng bằng 0 để sửa CSS ... vì vậy, nếu bất kỳ ai có nhu cầu sao chép pasta, sẽ có một ký tự không thể in giữa dấu gạch chéo và dấu ngoặc kép trong dòng khai báo $ objuser.
Vô vọngN00b

2

Câu trả lời trước sẽ không hoạt động NẾU các thư mục nhà / thư mục được chuyển hướng được thiết lập với "Cấp quyền độc quyền cho người dùng". Điều này là do khi tùy chọn này được chọn không được khuyến nghị , chỉ có HỆ THỐNG và NGƯỜI DÙNG có quyền đối với thư mục. Sau đó, bạn không thể thay đổi perm (ngay cả với tư cách quản trị viên) mà không có quyền sở hữu thư mục.

Đây là một phương pháp để giải quyết vấn đề này mà KHÔNG cần sở hữu. Đó là một quá trình hai bước.

Tạo một tập lệnh powershell chạy ICACLS để sửa đổi các perm trên các thư mục và thư mục con.

chạy PSexec để khởi động kịch bản Powershell.

lấy và sửa đổi từ: https://mypkb.wordpress.com/2008/12/29/how-to-restore-adologists-access-to-redirected-my-document-folder/

1 Tạo / sao chép / đánh cắp tập lệnh powershell (yêu cầu PS 3.0 trở lên)

#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. chạy PSEXEC, nó hoạt động như tài khoản HỆ THỐNG và do đó có thể thay đổi các perm trên thư mục mà chỉ HỆ THỐNG và người dùng có quyền truy cập. Cài đặt và chạy PSexec. https://technet.microsoft.com/en-us/sysiternals/bb897553.aspx

Từ dòng lệnh:

psexec -s -i powershell -noexit "& 'C:\Path\To\ChangePermissions.ps1'"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.