Liệt kê quyền truy cập thư mục của người dùng


14

Tôi có một người dùng trong một miền có quyền truy cập vào nhiều thư mục con trong nhiều thư mục. Quyền của ông được xác định khá chi tiết. Bây giờ anh ấy rời công ty nhưng sẽ tiếp tục làm việc cho một công ty như một nguồn lực theo hợp đồng.

Tôi cần tìm tất cả các thư mục anh ta có quyền truy cập và thu hồi quyền của mình, sau đó thiết lập cho anh ta một bộ quyền truy cập khác.

Có công cụ nào (tốt nhất là phần mềm miễn phí) liệt kê tất cả các quyền NTFS cho một người dùng nhất định không? Tôi đã thử với AccessEnum từ Sysiternals, nhưng danh sách này không thể được lọc theo tên người dùng và đối với tôi là vô dụng. Tôi cũng đã xem CACLS, nhưng theo như tôi có thể nói nó hiển thị các quyền được sắp xếp theo tệp chứ không phải bởi người dùng.

Có ý kiến ​​gì không?


1
Đây là lý do tại sao bạn phải luôn cấp quyền thành viên dựa trên các nhóm, ngay cả khi chỉ có một người dùng trong nhóm. Bạn có thể vừa loại anh ta ra khỏi nhóm. Trong khi chờ đợi câu trả lời, bạn có thể vô hiệu hóa tài khoản của anh ấy trong AD.
MDMarra

Bạn đã thử công cụ này: AccessChk v5.0? Là một phần của việc đảm bảo rằng họ đã tạo ra một môi trường an toàn, các quản trị viên Windows thường cần biết loại người dùng hoặc nhóm truy cập cụ thể nào có tài nguyên bao gồm các tệp, thư mục, khóa Registry, đối tượng toàn cầu và dịch vụ Windows. AccessChk nhanh chóng trả lời những câu hỏi này với giao diện và đầu ra trực quan. Tìm thấy ở đây: technet.microsoft.com/en-us/sysiternals/bb664922.aspx
Luke99

@MarkM: Thật vậy ... Chỉ là khi người dùng cần quyền truy cập vào một thư mục duy nhất, bạn thêm anh ta. Sau đó vài tháng anh ta cần một quyền truy cập khác vào chia sẻ hoàn toàn khác. Và trong vài tháng nữa trên 2 hoặc 3 thư mục. Làm thế nào để bạn tạo một nhóm với tên có ý nghĩa cho người dùng như vậy? "Tên người dùng_granular_access_group"? Điều này có thể sẽ làm các mẹo. @ Luke99: Công cụ thú vị từ Sysiternals. Làm thế nào tôi có thể bỏ lỡ nó. Dù sao, tôi thấy nó hiển thị tất cả các thư mục người dùng có quyền truy cập trực tiếp hoặc gián tiếp. Có cách nào để chỉ hiển thị các thư mục mà người dùng được liệt kê rõ ràng trong ACL (không bao gồm acc qua các nhóm) không?
fantodei

Câu trả lời:


13

Điều này dường như thực hiện mẹo (có lẽ là một lời cảnh báo), để tìm tất cả các thư mục mà người dùng "someuser" có quyền truy cập, trong ví dụ này trên ổ C, sử dụng lệnh icacls tích hợp trong Windows:

icacls c:\*. /findsid someuser /t /c /l

/ T là cần thiết để nói với nó để lặp lại các thư mục. / C là cần thiết để bảo nó tiếp tục ngay cả khi nó gặp lỗi. / L làm cho nó hoạt động với các liên kết tượng trưng (nếu có). (Cái cuối cùng là chữ L và những lá cờ này có thể là chữ hoa hoặc chữ thường.)

Điều *.này sẽ được các bộ định thời cũ của DOS công nhận là cách để nói "tìm thư mục, không phải tệp". Tất nhiên, nếu bạn muốn tìm tệp và không phải thư mục, hãy đổi nó thành *.*, và tất nhiên bạn có thể trỏ nó vào bất kỳ ổ đĩa nào, hoặc chạy nó từ bất kỳ thư mục nào và rời khỏi đường dẫn ổ đĩa / thư mục và để nó tìm kiếm liên quan đến nó chỉ thư mục.

Tôi đã tìm kiếm câu trả lời tương tự như OP, và tìm thấy mục này, nhưng thật bất ngờ khi chỉ thấy một đề nghị dựa trên một công cụ có thể tải xuống. Giống như những người khác, tôi thích sử dụng một cái gì đó tích hợp và tôi đã tìm thấy nó, trong công cụ icacls này.

Và tôi đã xác nhận nó hoạt động trên Windows Server 2012, 2008 và Windows 7, vì vậy tôi nghi ngờ nó sẽ hoạt động tốt trong Server 2003, Windows 8, v.v.

Danh sách kết quả sẽ là các thư mục được chỉ định dòng sau dòng, chẳng hạn như:

Đã tìm thấy SID: c: \ somedir \ somesubdir.

Lưu ý rằng nếu bạn chạy nó với tư cách là người dùng không có quyền đối với một số thư mục đang được duyệt, bạn sẽ gặp lỗi xen kẽ trong các kết quả, chẳng hạn như:

c: \ Thông tin khối lượng hệ thống: Truy cập bị từ chối.

Và nếu bạn có thể đang tìm kiếm toàn bộ ổ đĩa, điều đó có thể dẫn đến hàng trăm lỗi như vậy, khiến cho việc tìm kiếm kết quả trong chúng trở nên khó khăn.

Một số người có thể nghĩ rằng câu trả lời là chạy dòng lệnh với tư cách quản trị viên, nhưng điều đó đơn giản sẽ gây ra nhiều lỗi như vậy xuất hiện, vì bây giờ bạn sẽ duyệt qua các thư mục đã bị ẩn trước đó.

Bây giờ, nếu bạn quan tâm đến việc che giấu các lỗi đó, bạn sẽ không thể sử dụng lệnh find để chỉ xử lý các kết quả DO thành công (những lỗi này tham chiếu đến "SID find"), vì các lỗi sẽ KHÔNG được lọc bằng đường ống đến lệnh find. Thay vào đó, nếu bạn muốn loại bỏ tất cả các lỗi, bạn cần sử dụng thủ thuật khá mơ hồ để chuyển hướng luồng lỗi (stderr) sang "bit bit" bằng cách sử dụng 2>nul:. Vì vậy, ví dụ trên sẽ trở thành:

icacls c:\*. /findsid someuser /t /c /l 2>nul:

Chỉ cần lưu ý rằng một số thư mục đã tạo ra các lỗi như vậy, lỗi hiện đang bị ẩn, cũng có thể là các thư mục có tên "someuser" DOES có quyền truy cập nhưng BẠN thì không. Vì vậy, bạn có thể muốn nghĩ hai lần về việc bỏ qua những lỗi này. Nhưng nếu bạn muốn, đó là cách bạn có thể làm điều đó.

Khả năng đó không có khả năng giới hạn giá trị của câu trả lời này, tôi nhận ra. Nếu bất cứ ai quen thuộc hơn với mọi thứ muốn mở rộng hoặc sửa câu trả lời của tôi, tôi hoan nghênh điều đó.


Có vẻ như nó là hiển nhiên, nhưng gấu chỉ ra: Tìm kiếm *. KHÔNG chỉ bằng các thư mục tìm kiếm hoặc tất cả các thư mục. Tên thư mục có thể có phần mở rộng và tệp không cần phải có phần mở rộng. Nếu bạn muốn kỹ lưỡng hãy để nó tìm kiếm mọi thứ.
Scott E

6

Bạn có thể sử dụng PowerShell mà không cần tải xuống bất cứ thứ gì khác. Điều này sẽ hoạt động với v2.0 trở lên:

$ReferenceAccountName = 'DOMAIN\Username'
[string[]]$SearchDirectories = @('X:\SomeDirectory', 'F:\AnotherDirectory')

foreach ($RootDir in $SearchDirectories) {
    $DirACL = Get-Acl -Path $RootDir
    foreach ($ACL in $DirACL.Access){
        if ($ACL.IdentityReference -like $ReferenceAccountName){
            Write-Output $RootDir
        }
    }
    foreach ($Directory in (Get-ChildItem -Path $RootDir -Recurse | `
                            Where-Object -FilterScript {$_.Attributes `
                            -contains 'Directory'})){
        $DirACL = Get-Acl -Path $Directory.FullName
        foreach ($ACL in $DirACL.Access){
            if ($ACL.IdentityReference -like $ReferenceAccountName){
                Write-Output $Directory.FullName
            }
        }
    }
}

Nó không sạch như những gì có sẵn với PowerShell v3 trở đi, nhưng nó sẽ hoạt động. Điều này sẽ xuất ra một danh sách các thư mục được tìm thấy ở định dạng chuỗi.

Bạn có thể dễ dàng xuất chúng dưới dạng đối tượng và tiếp tục thực hiện công việc với chúng (xuất chúng sang tệp CSV, xóa các mục nhập khi bạn tìm thấy chúng, cập nhật một vé với thông tin ... vv) bằng cách thao tác đối tượng đầu vào của Write- Các cuộc gọi đầu ra.


Cũng có thể "loại trừ" Quyền được thừa kế? (tức là tìm kiếm mọi Thư mục, trong đó "DOMAIN \ Tên người dùng" đã được thêm vào một cách rõ ràng?
dognose

1
Có, bạn có thể:if ($ACL.IdentityReference -like $ReferenceAccountName -and !$ACL.IsInherited){
dognose

3

Tôi tìm thấy một giải pháp cho câu hỏi của riêng tôi. Đó là, tôi tin rằng, rất đơn giản và sạch sẽ. Bạn chỉ phải cài đặt subinacl và chạy một dòng từ dấu nhắc lệnh.

Bạn có thể tải xuống subinacl tại đây . Mặc dù nó chỉ được hỗ trợ chính thức trên Windows 2000, Windows XP và Windows Server 2003, nhưng nó cũng hoạt động trên Windows Vista, Windows Server 2008 và Windows 7.

Tiếp theo, bạn chạy như sau từ dấu nhắc lệnh:

subinacl /testmode /noverbose /outputlog=c:\TEXTFILENAME.TXT /subdirectories=directoriesonly X:\*.* /findsid=DOMAIN\username

Trong đó X: là ổ đĩa bạn đang quét và tên người dùng là người dùng có quyền mà bạn muốn liệt kê. Quá trình quét có thể mất một chút thời gian và bạn nhận được kết quả trong TEXTFILENAME.TXT.

Nếu bạn sử dụng switch / noverbose, bạn sẽ có được một danh sách các quyền truy cập nhỏ gọn - về cơ bản bạn sẽ thấy thư mục nào người dùng có quyền truy cập (với mặt nạ truy cập và một số nội dung khác đôi khi có thể có ích).

Tôi đã sử dụng OpenOffice Calc để nhập danh sách và sau đó áp dụng Bộ lọc tùy chỉnh và chỉ được lọc cho những dòng bắt đầu bằng + FILE . Những dòng này chứa các thư mục người dùng có quyền truy cập. Đây là cách sử dụng các công cụ đơn giản mà bạn chỉ có thông tin liên quan.

Vì tính kế thừa thường được bật trên các thư mục mẹ, nên số lượng thư mục thực tế bạn có thể cần truy cập để điều chỉnh quyền thường thấp hơn đáng kể so với chính danh sách.

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.