【问题标题】:C# - Windows ACL - Applying Inherited PermissionsC# - Windows ACL - 应用继承的权限
【发布时间】:2010-11-27 13:24:57
【问题描述】:

我在以编程方式为文件夹/注册表项分配权限时遇到问题。我已设法使用以下代码分配继承权限:

FileSystemAccessRule rule = new FileSystemAccessRule(LOGON_USER_NAME,
    FileSystemRights.FullControl, InheritanceFlags.ContainerInherit |
    InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly,
    AccessControlType.Allow);

DirectorySecurity security = new DirectorySecurity(); 
security.SetAccessRule(rule);

Directory.CreateDirectory(dir);
Directory.SetAccessControl(dir, security);

这会正确设置我以管理员身份创建的所有子文件夹的文件权限。但是,它不会设置dir 文件夹本身的权限。我已经玩弄了一些继承和传播的排列,但没有任何乐趣。

例如,我有:

dir = %programfiles%\Test

如果我在测试 (%programfiles%\Test\SubFolder) 中创建了一个文件夹,我为我的用户分配了完全权限,但我没有 %programfiles%\Test 的完全权限。这真的很烦人,因为我想给我的用户完全权限,让他们也可以对 Test 目录做任何事情。

我在注册表权限方面遇到了类似的问题,但我相信如果我能解决一个问题,我就能解决两个突出的问题。

有人知道如何解决吗?

问候
特里斯

【问题讨论】:

  • SubFolder 是 Test 的子对象,因此它继承了 Test 的规则,而不是相反。您是否尝试过在测试中创建 ACL?

标签: c# windows permissions acl


【解决方案1】:

对于文件夹:

FileSystemAccessRule rule = new FileSystemAccessRule(LOGON_USER_NAME, 
    FileSystemRights.FullControl, AccessControlType.Allow);

对于子文件夹和文件:

FileSystemAccessRule rule = new FileSystemAccessRule(LOGON_USER_NAME,
    FileSystemRights.FullControl, InheritanceFlags.ContainerInherit |  
    InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, 
    AccessControlType.Allow);

这两行都需要在您的项目中。然后你会得到适用于这个文件夹、子文件夹和文件的 acls

【讨论】:

    【解决方案2】:

    我在这方面几乎不是专家,但在出于我自己的目的而必须弄清楚这一点之后,我相信戴夫的答案虽然实用,但过于复杂。您应该能够通过一条规则来实现这一目标:

    FileSystemAccessRule rule = new FileSystemAccessRule(LOGON_USER_NAME,
        FileSystemRights.FullControl,
        InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
        PropagationFlags.None, 
        AccessControlType.Allow);
    

    OP 在其原始代码中使用的PropagationFlags.InheritOnly 参数是阻止访问规则应用于对象本身的原因。

    此外,您还可以在创建目录时设置目录的安全性,因为 .NET 为该目的提供了重载:

    Directory.CreateDirectory(dir, security);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-17
      • 1970-01-01
      • 1970-01-01
      • 2022-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多