1

如何检查 IIS_IUSR 组是否对某个文件夹具有特殊权限?[说 c:\windows\temp ]

我正在尝试检查它是否具有允许权限。如果它具有允许权限,我认为它具有特殊权限。这个假设正确吗?

internal static Boolean HasAccess(string strPath, string account)
{
    var security = Directory.GetAccessControl(strPath);
    var rules = security.GetAccessRules(true, true, typeof(NTAccount));

    foreach (FileSystemAccessRule rule in rules)
    {
        if (rule.IdentityReference.Value == account)
        {
            if (rule.AccessControlType == AccessControlType.Allow)
            {
                return true;
            }
        }
    }

    return false;
}

static void Main(string[] args)
{
    if ( HasAccess(@"C:\Windows\Temp", "BUILTIN\\IIS_IUSRS") ) {
        Console.WriteLine(" It has permission");
    }             
}
4

2 回答 2

0

您的代码没有按照您的想法执行。它获取所有 AccessRules 及其权限 ( FileSystemRights ) 的集合,并且只检查第一个,无论规则是什么。您最好先找到要检查的规则,然后再检查。

于 2013-11-06T14:00:55.057 回答
0

正如 Danexxtone 提到的,您当前检查了文件夹上的所有访问规则。这种方法的问题在于,可能存在一个允许读取的访问规则,而另一个拒绝读取的访问规则。一个拒绝某事的访问规则总是支配一个允许同一件事的规则。因此,仅查看集合中是否存在允许您访问文件夹的规则是不够的。

您要做的是检查文件夹的有效权限。看看这里,这可能对你有帮助,它已经是 C# 代码:Effective file permissions tool's api in windows

于 2013-11-06T14:12:01.883 回答