使用C#获取服务器和映射驱动器的ACL列表

我们IT团队的生产变更实施人员的任务是审查我们集团中所有各种对象的安全性,主要是为了确保离开我们的员工或已转移到其他组的人员不再能够访问我们的服务器共享我们最近完成了SQL部分,我们有一个可重复使用的脚本,可以每年运行一次(或者我们提出的任何频率)。 它工作得很好,我们在10分钟左右的服务器上审核了20个数据库,只需几分钟。

现在,对于服务器的东西。 我有一个使用.NET 2.0在C#中编写的应用程序,它将递归扫描目录列表并将ACL转储到文本文件中。 这很好用。 在本地机器上。 UNC和映射路径不起作用,我得到以下exception消息:该进程不具有此操作所需的“SeSecurityPrivilege”权限。

在这一行:

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

其中di是从DirectoryInfo []数组枚举的DirectoryInfo对象。

我们不太可能被授予SeSecurityPrivilege特权。 但是我不认为这是必要的。 我可以打开文件夹并右键单击属性,然后单击安全选项卡并在GUI中查看它。 我也应该能够以编程方式访问它。

有关如何更改此部分代码以获取目标文件夹权限的任何想法?

 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(); } 

编辑:当获取根文件夹的“GetAccessControl()”方法失败时,如何在ACL中检查远程文件夹中的读取attrib? (如果我传入\ server \ path,则在获取\ server \ path的信息时出错)。

用户帐户是域帐户,我有权读取文件结构。 我可以从文件夹/文件的属性中查看安全性。

我将检查进程监视器,但我不确定我是否能够在服务器上运行它(我不是服务器上的管理员)。

由于“审核”选项卡,您收到错误,但我很确定您真正要在屏幕上访问的是“权限”选项卡上的数据。 SeSecurityPrivilege控制对SACL的访问。

尝试改变

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

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

那么你应该停止得到错误

检查远程文件夹是否授予用户在ACL中运行代码读取属性的权限。

还要记住,在远程(服务器)计算机上解析权限,因此本地组(用户和管理员)成员身份可能不包括客户端上运行的用户帐户。

让Process Monitor在服务器上运行(过滤到相关的文件夹/文件)可能有助于解决失败原因的详细信息。