C# · 12月 26, 2021

c# – 重复GetAccessRules,FileSystemAccessRule条目

我从以下代码获取了一个重复的FileSystemAccessRule: C:\inetpub\wwwroot\AspInfo\AccountBUILTIN\IIS_IUSRS : Allow : ReadAndExecute,SynchronizeBUILTIN\IIS_IUSRS : Allow : -1610612736NT SERVICE\TrustedInstaller : Allow : FullControlNT SERVICE\TrustedInstaller : Allow : 268435456

我无法解决什么或为什么.

并且显示的权限与我可以看到文件FileManager属性不匹配.
例如,如何从此或类似的迭代中找到“列表文件夹内容”权限.如果有人知道.NET文档中的一个例子,这将是有帮助的.

protected void directoryInfo(){ var di = new DirectoryInfo(Server.MapPath(“/”)); foreach (DirectoryInfo dir in di.GetDirectories()) { Response.Write(dir.FullName + “<br/>”); DirectorySecurity ds = dir.GetAccessControl(); foreach (FileSystemAccessRule fsar in ds.GetAccessRules(true,true,typeof(System.Security.Principal.NTAccount))) { string userName = fsar.IdentityReference.Value; string userRights = fsar.FileSystemRights.ToString(); string userAccessType = fsar.AccessControlType.ToString(); Response.Write(userName + ” : ” + userAccessType + ” : ” + userRights + “<br/>”); } }}解决方法 您将获得继承的规则和明确设置在该文件夹上的规则的单独的规则条目.根据每个规则的传播设置,也有差异.例如,您可以拥有一组设置为传播到子文件夹的权限,以及与文件夹中的文件不同的一组权限.您的代码还会在您希望访问权限(DACL)的文件夹上获得审核规则(SACL).

尝试这个:

protected void directoryInfo(){ var di = new DirectoryInfo(Server.MapPath(“/”)); foreach (DirectoryInfo dir in di.GetDirectories()) { Response.Write(dir.FullName + “<br/>”); DirectorySecurity ds = dir.GetAccessControl(AccessControlSections.Access); foreach (FileSystemAccessRule fsar in ds.GetAccessRules(true,typeof(System.Security.Principal.NTAccount))) { string userName = fsar.IdentityReference.Value; string userRights = fsar.FileSystemRights.ToString(); string userAccessType = fsar.AccessControlType.ToString(); string ruleSource = fsar.IsInherited ? “Inherited” : “Explicit”; string rulePropagation = fsar.PropagationFlags.ToString(); string ruleInheritance = fsar.InheritanceFlags.ToString(); Response.Write(userName + ” : ” + userAccessType + ” : ” + userRights + ” : ” + ruleSource + ” : ” + rulePropagation + ” : ” + ruleInheritance + “<br/>”); } }}

您看到的ReadAndExecute权限包括“列表文件夹内容”权限.您可以使用FileSystemRights枚举中的相应标志来检查个人权限.例如:

if (fsar.FileSystemRights && FileSystemRights.ListDirectory) Console.WriteLine(“Has List Directory permission”);