从Active Directory检索安全组的安全权限

时间:2012-09-17 11:14:01

标签: c# permissions active-directory

我正在尝试创建一个函数,我输入安全组名称并返回安全权限列表。

如何为安全组read获取writefull controlDomain Controllers等安全权限列表,使用C#从Active Directory,Domain Guests等,

1 个答案:

答案 0 :(得分:2)

您需要检查正在与Active Directory服务器通信的LDAP连接的路径。

例如:

 DirectoryEntry rootDSE = null;
  rootDSE = new DirectoryEntry("LDAP://OU=" + department + ",OU=Users,OU=" + ou + ",dc=corp,dc=local", username, password);

现在,在这种情况下,我只需要部门→用户→OU→DC

中存在的组

与您的情况相同。您可以定义安全组所在的OU。

之后,我可以获取这样一个组:

DirectorySearcher ouSearch = new DirectorySearcher(rootDSE);
ouSearch.PageSize = 1001;
ouSearch.Filter = "(objectClass=group)";
ouSearch.SearchScope = SearchScope.Subtree;
ouSearch.PropertiesToLoad.Add("name");
SearchResultCollection allOUS = ouSearch.FindAll();
foreach (SearchResult oneResult in allOUS)
{
     dt.Rows.Add(oneResult.Properties["name"][0].ToString());
}
rootDSE.Dispose();

现在有权限

权限存储在各个文件系统项上,例如文件和/或目录 - 或其他对象(如注册表项等)。当您拥有AD组或用户帐户时,您可以读取其SID(安全标识符)属性 - 该SID将显示在整个Windows的ACL(访问控制列表)中 - 但是从用户或组中,没有机制可以获取所有它可能在机器/服务器的任何位置拥有权限。

文件和目录的权限可以是例如使用FileInfo和DirectoryInfo类上的.GetAccessControl()方法检索:

FileInfo info = new FileInfo(@"D:\test.txt");
FileSecurity fs = info.GetAccessControl();

DirectoryInfo dir = new DirectoryInfo(@"D:\test\");
DirectorySecurity ds = dir.GetAccessControl();

我希望这就是你要找的东西!