使用C#获取服务器和映射驱动器的ACL列表
-
05-09-2019 - |
题
我们的IT组的生产变更实施者已被任务审查我们组中所有各种对象的安全性,主要是为了确保已离开我们的雇员或已将其转移到其他组的人不再可以访问我们的服务器共享,Web目录,SQL数据库等。我们最近完成了SQL部分,我们有一个可重复使用的脚本,可以每年运行(或以我们提出的任何频率)运行。它运行良好,我们在10个左右的服务器上审核了20个数据库,并使用了几分钟。
现在,对于服务器的东西。我有一个我在C#使用.NET 2.0中编写的应用程序,该应用程序将递归扫描目录列表,并将ACL转移到文本文件中。这很好。在本地机器上。 UNC和映射的路径不起作用,我会收到以下例外消息:该过程不具有此操作所需的“ sesecurityprivilege”特权。
在这一行:
DirectorySecurity DirSec = di.GetAccessControl(AccessControlSections.All);
其中di是从目录[]数组中枚举的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();
}
编辑:当read文件夹在ACL中未能获取根文件夹的“ getAccessControl()”方法时,如何检查远程文件夹中的读取属性? (如果我传递 server path,则在获取 server path的信息时会出错。
用户帐户是一个域帐户,我有权阅读文件结构。我可以从文件夹/文件的属性中查看安全性。
我将检查流程监视器,但我不确定我是否能够在服务器上运行它(我不是有关服务器上的管理员)。
解决方案
由于“审核”选项卡,您会获得错误,尽管我很确定您真正想要在屏幕上访问的只是“权限”选项卡上的数据。 SesecurityPrivilege控制对SACL的访问。
尝试更改
DirectorySecurity DirSec = di.GetAccessControl(AccessControlSections.All);
至
DirectorySecurity DirSec = di.GetAccessControl(AccessControlSections.Access);
那你应该停止出错
其他提示
检查远程文件夹是否授予运行代码读取属性的用户在ACL中。
还请记住,在遥控器(服务器)机器上解决了权限,因此本地组(用户和管理员)成员资格可能不包括在客户端上运行的用户帐户。
有 过程监视器 在服务器上运行(已过滤到有问题的文件夹/文件)可能有助于解决为什么失败的详细信息。