Windows NTFS - Thêm quyền cho mỗi ACL rõ ràng trong tất cả các thư mục con


0

Chúng tôi có một cấu trúc thư mục với nhiều quyền rõ ràng như

root Folder
- subfolder 1 (explicit acl, no inherit acl)
- subfolder 2 (explicit acl, no inherit acl)
--subsubfolder 1 (no explicit rights, inherit acl)
--subsubfolder 2 (explicit acl, no inherit acl)

và v.v.

Tôi muốn thêm quyền (Tài khoản hệ thống) cho tất cả các ACL rõ ràng nhưng không cho phép những ACL không rõ ràng. Và tất nhiên, có một số Thư mục không thể truy cập được ngay cả bởi tài khoản Quản trị viên, vì vậy tôi cần bỏ qua Lỗi.

Bất cứ ai cũng biết về một kịch bản có thể đạt được điều này?

Edit1
Nhờ Hardoman, đây là một giải pháp làm việc cho thư mục hiện hành, thư mục con và các tập tin và không bắt lỗi ...

$folders = (Get-ChildItem C:\Temp -Directory -Recurse) | select -ExpandProperty fullname
foreach ($item in $folders) {
    $inheritance = (Get-Acl $item).access[0] | select -ExpandProperty isinherited
    if ($inheritance -eq $false) {
            icacls.exe $item /grant 'System:(OI)(CI)(RX)'
    }
}

Không tìm thấy giải pháp với set-acl, có thể ai đó có ý tưởng, đây là trạng thái set-acl hiện tại của tôi nhưng thư mục con không nhận được quyền ngay cả khi chúng được kế thừa.

$folders = (Get-ChildItem C:\Temp -Directory -Recurse) | select -ExpandProperty fullname
foreach ($item in $folders) {
    $inheritance = (Get-Acl $item).access[0] | select -ExpandProperty isinherited
    if ($inheritance -eq $false) {
    try {
        $acl = Get-Acl $item
        $AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("System","FullControl, Synchronize", "ContainerInherit,ObjectInherit", "None", "Allow")
        $acl.SetAccessRule($AccessRule)
        Set-Acl $item $acl
    }
    catch {
        "Failed to access folder $item"
        "Exception type is $($_.Exception.GetType().Name)"
        }
    }
}

Sử dụng icaclscông cụ và thêm quyền ưa thích của bạn. Thêm chi tiết tại đây: ss64.com/nt/icacls.html
Biswapriyo

Câu trả lời:


0

Bạn cần phải viết một kịch bản Powershell cho điều đó. Bạn cần phải nhận đệ quy tất cả các thư mục và thư mục con, kiểm tra tính kế thừa cho từng thư mục và sử dụng các ủy ban Get-ACLSet-ACL thêm quyền cho tài khoản hệ thống . Thử / bắt sẽ xử lý các lỗi trong trường hợp tập lệnh không thể truy cập vào thư mục.

Đây là mẫu tôi đã viết cho bạn giả sử rằng bạn tái diễn trong thư mục C: \ temp làm ví dụ.

$folders = (Get-ChildItem c:\temp -Directory -Recurse) | select -ExpandProperty fullname
foreach ($item in $folders) {
    $inheritance = (Get-Acl $item).access[0] | select -ExpandProperty isinherited
    if ($inheritance -eq $false) {
    try {
        $acl = Get-Acl $item
        $AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule ("System","FullControl","Allow")
        $acl.SetAccessRule($AccessRule)
        $acl | Set-Acl $item
    }
    catch {
        "Failed to access folder $item"
        "Exception type is $($_.Exception.GetType().Name)"
        }
    }
}

PS Để Get-ChildItem với -Directory hoạt động, bạn cần có Powershell 4+. Công tắc này bị thiếu trong PS 2.0


Cảm ơn cho đến nay về vấn đề này, có vấn đề là bây giờ Hệ thống được đặt ở (các) thư mục chính xác và khi tôi thêm "ContainerInherit, ObjectInherit" vào quy tắc Access, quyền được đặt ngay trên thư mục đã đặt quyền ... nhưng tất cả các thư mục con / tệp không nhận được sự cho phép ngay cả khi chúng được kế thừa. Bất cứ ý tưởng về điều này? Đã tìm thấy nhiều Chủ đề liên quan đến vấn đề này với set-acl nhưng không có giải pháp thực sự nào ngoại trừ việc sử dụng icacls.exe thay vì set-acl
Blafasel
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.