ACL 的研究和实践

    技术2024-11-09  61

    ACL 的研究和实践

    1         Acl 的基本构成

     

    l  一个ACL 条目就是一个rule, 包含以下要素

    类型

    作用对象

    权限

    继承还是显式

    传递对象

    传递方式

    允许 、拒绝

    Guestsadministrators

    FWR

    是继承的权限还是显式设置的权限

    叶子、容器(文件夹)

    是否传递给子对象

    AccessControlType(allow,dency)

    NTAccount(@"Gusts")

    FileSystemRights

     

    InheritanceFlags(Node, ContainerInherit, ObjectInherit)

    PropagationFlags(None, NoPropagateInherit, nheritOnly)

     

    2         ALC 语义测试文件夹

    2.1       InheritanceFlags 的作用

    作用于文件夹的ACL 实际是对文件夹内的 容器(文件夹)和叶子(文件) 的权限限制当前文件夹的删除是它上一级文件夹的权限控制,针对文件夹的FileSystemRights 的权限一部分是针对内部容器的权限一部分是针对内部叶子的权限。如果InheritanceFlags. ContainerInherit 则叶子的权限就算选择也不会被设置,如果ObjectInherit 则 文件夹属于的权限不被设置。

    关于 InheritanceFlags 通常应该设置成:InheritanceFlags. ContainerInherit| InheritanceFlags. object

    string filename = "d://xw";

                FileSystemAccessRule rule = new FileSystemAccessRule("Guests", FileSystemRights.FullControl, InheritanceFlags.None, PropagationFlags.None, AccessControlType.Allow);         

                DirectorySecurity sec= System.IO.Directory .GetAccessControl(filename);

                 sec.AddAccessRule(rule);

                System.IO.Directory.SetAccessControl(filename, sec);

    2.1.1InheritanceFlags.None && PropagationFlags.None

     

    right.fullcongrol 失效)

     

    2.1.2InheritanceFlags.ContainerInherit && FileSystemRights.FullControl&& PropagationFlags.None

    文件夹对应的权限生效

     

     

    2.1.3InheritanceFlags.Object && FileSystemRights.FullControl&& PropagationFlags.None

    当前目录没有设置任何权限

     

     

    但是文件夹内的文件被设置成了全部权限。

     

    2.1.4(InheritanceFlags.ContainerInherit|InheritanceFlags.object)&& FileSystemRights.FullControl&& PropagationFlags.None

     

     

     

     

     

    2.2       关于 PropagationFlags

    2.2.1    PropagationFlags.None

    (InheritanceFlags.ContainerInherit|InheritanceFlags.object)&& FileSystemRights.FullControl

     

    继承得到完全的传递

     

     

     

     

    2.2.2    PropagationFlags. InheritOnly

    (InheritanceFlags.ContainerInherit|InheritanceFlags.object)&& FileSystemRights.FullControl

    (不常用)

    当前文件夹不被设置成权限,目录下的子和孙子。。都被设成成权限

     

     

     

     

    2.2.3    PropagationFlags. NoPropagateInherit

    (InheritanceFlags.ContainerInherit|InheritanceFlags.object)&& FileSystemRights.FullControl (比较常用)

    权限设置仅仅控制到当前树目录(当前文件夹和文件夹里面的叶子)

    子文件夹不被设置

     

     

    2.3       常用的继承和传递组合

    2.3.1              作用于所有文件和文件夹包含子和孙子

    (InheritanceFlags.ContainerInherit|InheritanceFlags.object) && PropagationFlags.None

    2.3.2              作用于当前文件夹和文件夹里面的叶子(文件)

    (InheritanceFlags.ContainerInherit|InheritanceFlags.object)&& NoPropagateInherit

     

    最新回复(0)