1

因此,我正在尝试将 BUILTIN\Users 组的权限修改为至少具有修改文件系统访问权限。不幸的是,我尝试使用以下代码会产生未更改的 ACL。

            SecurityIdentifier usersSecurityIdentifier = ntAccount.Translate(typeof(SecurityIdentifier)) as SecurityIdentifier;
            DirectorySecurity directorySecurity = Directory.GetAccessControl(source.FullName);
            FileSystemAccessRule accessRule 
                = new FileSystemAccessRule(@"BUILTIN\Users", FileSystemRights.FullControl, AccessControlType.Allow);

            directorySecurity.ModifyAccessRule(AccessControlModification.Add,
                accessRule,
                out modified);

            Console.WriteLine(modified);

修改后的报告在每种情况下都是正确的,但是当您在文件夹属性中查看权限时,权限不会更新。

我还尝试为使用类似代码但只是 AddAccessRule 而不是修改的目录还没有 ACL 的 SecurityIdentifier 添加访问规则。即使新的 SecurityIdentifier 出现在目录的权限列表中,他们也没有我指定的访问权限。

我正在尝试修改管理员帐户拥有的 Environment.SpecialFolders.CommonApplicationData 中专有目录的访问权限。我也尝试以管理员身份修改 ACL。

有谁知道上面的代码有什么问题,或者有任何资源可以引导我使用本机 .NET 类设置 ACL 的正确方法?

4

1 回答 1

3

在一位在微软工作的朋友的帮助下,我发现了这一点。实际上我用来设置 ACL 的过程是准确的。我错误地解释了结果。基本上,只要您在尝试进行更改时以管理员身份操作,以这种方式在目录上设置 ACL 就没有问题。

可以通过以下方式查看文件夹的准确权限(在 Vista 中):

  1. 右键单击有问题的文件夹并选择属性
  2. 选择安全选项卡
  3. 单击高级
  4. 单击编辑
  5. 选择您要查看权限的实体,然后单击编辑。

这是我缺少的部分。CommonApplicationData 路径已经为 BUILTIN\Users 实体设置了权限。所以在我运行我的代码之后,我实际上最终得到了两个实体。一个说读取和执行,另一个说特殊权限。当我编辑具有特殊权限的实体时,我实际上看到 BUILTIN\Users 确实有权访问该目录。

我真的在寻找 BUILTIN\Users 来访问该目录及其所有子文件夹和对象。这是我最终使用的代码片段。我能够通过测试工具和手动检查文件和目录 ACL 列表来确认我的代码工作正常。

DirectorySecurity directorySecurity = Directory.GetAccessControl(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData));
FileSystemAccessRule accessRule
    = new FileSystemAccessRule(@"BUILTIN\Users", FileSystemRights.FullControl, 
        InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, 
        PropagationFlags.None, 
        AccessControlType.Allow);

bool modified=false;
directorySecurity.ModifyAccessRule(AccessControlModification.Add,
    accessRule,
    out modified);

if (modified)
{
    source.Create(directorySecurity);
}
else
{
    source.Create();
}
于 2009-09-18T20:25:54.120 回答