【windows 访问控制】十一、C# 实操 对象 System.Security.AccessControl 命名空间


 AccessControl 命名空间 结构图

 解说:

DirectorySecurity=目录ACL
FileSecurity=文件ACL
FileSystemAuditRule=目录和文件中SACL中的ACE
FileSystemAccessRule=目录和文件中DACL中的ACE
AccessControl=ACL(AccessControlList)

  DirectorySecurity类和FileSecurity类是对基础Microsoft Windows文件安全系统的抽象。----注:本文部分内容改编自《.NET安全揭秘》

FileSystemAccessRuleFileSystemAuditRule 类是对组成DACLSACL的访问控制项(ACE)的抽象----注:本文部分内容改编自《.NET安全揭秘》 

      

 案例1、window平台的ACL ACE操作实例

 給文件夹添加访问控制项(ACE)

  新建一个ACL,然后给ACL添加2个ACE。将这个ACL赋值文件夹。这种方式会覆盖原来ACL的列表。

using System.Security.AccessControl;
using System.Security.Principal;
//把桌面设置未当前目录
 Directory.SetCurrentDirectory(Environment.GetFolderPath(Environment.SpecialFolder.Desktop  ));

//新建ACE ,ACE的拥有者设置成当前 操作系统用
FileSystemAuditRule SACE=new FileSystemAuditRule(WindowsIdentity.GetCurrent().Name,FileSystemRights.FullControl,AuditFlags.Success);
FileSystemAccessRule DACE = new FileSystemAccessRule(WindowsIdentity.GetCurrent().Name,FileSystemRights.FullControl,AccessControlType.Deny);
FileSystemAccessRule DACE2 = new FileSystemAccessRule(WindowsIdentity.GetCurrent().Name, FileSystemRights.Read|FileSystemRights.Write,InheritanceFlags.None,PropagationFlags.None, AccessControlType.Allow);

//新建一个目录ACL 
DirectorySecurity ACL = new DirectorySecurity();

//添加ACE
//ACL.AddAuditRule(SACE);
ACL.AddAccessRule(DACE);
ACL.AddAccessRule(DACE2);

//新建文件,并且ACL把文件添加到目录上。会覆盖原有ACL列表
DirectoryInfo dir = new DirectoryInfo("CSD");
dir.SetAccessControl(ACL);

 现有的ACL上添加ACE

using System.Security.AccessControl;
using System.Security.Principal;
//把桌面设置未当前目录
 Directory.SetCurrentDirectory(Environment.GetFolderPath(Environment.SpecialFolder.Desktop  ));

//新建ACE ,ACE的拥有者设置成当前 操作系统用
FileSystemAuditRule SACE=new FileSystemAuditRule(WindowsIdentity.GetCurrent().Name,FileSystemRights.FullControl,AuditFlags.Success);
FileSystemAccessRule DACE = new FileSystemAccessRule(WindowsIdentity.GetCurrent().Name,FileSystemRights.FullControl,AccessControlType.Deny);
FileSystemAccessRule DACE2 = new FileSystemAccessRule(WindowsIdentity.GetCurrent().Name, FileSystemRights.Read|FileSystemRights.Write,InheritanceFlags.None,PropagationFlags.None, AccessControlType.Allow);

 

//新建文件,并且ACL把文件添加到目录上。会和原来的ACL列表合并
DirectoryInfo dir = new DirectoryInfo("CSD");
DirectorySecurity sd=dir.GetAccessControl();
sd.AddAccessRule(DACE);
sd.AddAccessRule(DACE2);

dir.SetAccessControl(sd);

 案例2、通用平台的ACL ACE操作实例

C