2009-02-20 4 views
12

Những người triển khai thay đổi sản xuất cho nhóm CNTT của chúng tôi đã được giao nhiệm vụ xem xét bảo mật cho tất cả các đối tượng khác nhau trong nhóm của chúng tôi. việc sử dụng của chúng tôi hoặc đã chuyển sang các nhóm khác không còn quyền truy cập vào các cổ phiếu máy chủ, thư mục web, cơ sở dữ liệu sql, v.v. của chúng tôi gần đây đã hoàn thành phần SQL và chúng tôi có thể sử dụng lại tập lệnh có thể chạy hàng năm (hoặc bất kỳ tần suất nào chúng tôi đến với). Nó hoạt động rất tốt và chúng tôi đã kiểm tra 20 cơ sở dữ liệu trên 10 máy chủ hoặc hơn một vài phút.Sử dụng C# để nhận danh sách ACL cho Máy chủ và ổ đĩa được ánh xạ

Hiện tại, đối với nội dung của máy chủ. Tôi có một ứng dụng mà tôi đã viết trong C# bằng cách sử dụng .NET 2.0 sẽ đệ quy quét một danh sách các thư mục và kết xuất các ACL vào một tệp văn bản. Điều này làm việc tuyệt vời. Trên máy cục bộ. Đường dẫn UNC và ánh xạ không hoạt động, tôi nhận được thông báo ngoại lệ sau: Quy trình không có đặc quyền 'SeSecurityPrivilege' được yêu cầu cho hoạt động này.

On line này:

DirectorySecurity DirSec = di.GetAccessControl(AccessControlSections.All); 

đâu di là một đối tượng DirectoryInfo liệt kê từ a [] array DirectoryInfo.

Chúng tôi không có khả năng sẽ được cấp đặc quyền SeSecurityPrivilege. Tuy nhiên tôi không nghĩ rằng điều này là cần thiết. Tôi có thể mở thư mục và kích chuột phải vào các thuộc tính và kích tab bảo mật và xem nó trong GUI. Tôi cũng cần cũng có thể truy cập nó theo lập trình.

Bất kỳ suy nghĩ nào về cách tôi có thể thay đổi phần mã này để nhận các quyền cho thư mục được nhắm mục tiêu?

private void CheckSecurity(DirectoryInfo[] DIArray) 
{ 
    foreach (DirectoryInfo di in DIArray) 
    { 
     DirectorySecurity DirSec = di.GetAccessControl(AccessControlSections.All); 
     string sAccessInfo = string.Empty; 

     foreach (FileSystemAccessRule FSAR in DirSec.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount))) 
     { 
      sAccessInfo += GetAceInformation(FSAR); 
     } 

     if (sAccessInfo != string.Empty) 
     { 
      // Write info to text file 
     } 
    } 
} 

private string GetAceInformation(FileSystemAccessRule ace) 
{ 
    StringBuilder info = new StringBuilder(); 
    string line = string.Format("Account: {0}", ace.IdentityReference.Value); 
    info.AppendLine(line); 
    line = string.Format("Type: {0}", ace.AccessControlType); 
    info.AppendLine(line); 
    line = string.Format("Rights: {0}", ace.FileSystemRights); 
    info.AppendLine(line); 
    line = string.Format("Inherited ACE: {0}", ace.IsInherited); 
    info.AppendLine(line); 
    return info.ToString(); 
} 

Edit: Làm thế nào tôi sẽ kiểm tra thư mục từ xa cho attrib đọc trong ACL khi nó không thành công trên nhận được "GetAccessControl()" phương pháp cho thư mục gốc? (Nếu tôi vượt qua trong \ server \ path, nó sẽ gặp lỗi khi nhận thông tin cho \ server \ path).

Tài khoản người dùng là tài khoản miền và tôi có quyền đọc cấu trúc tệp. Tôi có thể xem bảo mật từ các thuộc tính của thư mục/tập tin.

Tôi sẽ kiểm tra giám sát quy trình nhưng tôi không chắc chắn rằng tôi sẽ có thể chạy trên máy chủ (Tôi không phải là quản trị viên trên (các) máy chủ được đề cập).

+1

mẫu câu hỏi/Mã này thật sự rất hữu ích. Tôi sử dụng mã này xây dựng một màn hình cho phép tập tin cho một trong các hệ thống nội bộ của chúng tôi. –

Trả lời

17

Bạn gặp lỗi vì tab 'Kiểm tra', mặc dù tôi khá chắc chắn rằng tất cả những gì bạn thực sự muốn truy cập trên màn hình là dữ liệu trên tab 'Quyền'. SeSecurityPrivilege kiểm soát quyền truy cập vào SACL.

Hãy thử thay đổi

DirectorySecurity DirSec = di.GetAccessControl(AccessControlSections.All); 

để

DirectorySecurity DirSec = di.GetAccessControl(AccessControlSections.Access); 

thì bạn nên ngừng nhận lỗi

+0

Duh! Tôi không biết tại sao tôi không nhìn qua những điều tra khác nữa. Tôi sẽ cố gắng vào ngày mai và xem những gì tôi nhận được. Cảm ơn! – bdwakefield

+0

Điều đó đã làm được điều đó, cảm ơn! – bdwakefield

+0

Tốt, tôi hơi lo lắng vì tôi không thể tự mình gặp lỗi ... – uzbones

1

Kiểm tra xem thư mục từ xa có cấp cho người dùng đang chạy mã Đọc thuộc tính trong ACL hay không.

Cũng nên nhớ rằng các quyền được giải quyết trên máy chủ từ xa (máy chủ), vì vậy thành viên nhóm (người dùng và quản trị) thành viên có thể không bao gồm tài khoản người dùng đang chạy trên máy khách.

Process Monitor chạy trên máy chủ (được lọc vào thư mục/tệp được đề cập) có thể giúp giải quyết chi tiết lý do tại sao nó không thành công.

+0

Xem ghi chú ở trên trong phần chỉnh sửa. – bdwakefield

+0

Hmmm ... mà không có quyền quản trị, bạn sẽ có được lòng thương xót của các quyền lẻ và/hoặc tìm gỡ lỗi rất khó. – Richard