【windows 访问控制】十一、C# 实操 对象 System.Security.AccessControl 命名空间
AccessControl 命名空间 结构图
解说:
DirectorySecurity=目录ACL
FileSecurity=文件ACL
FileSystemAuditRule=目录和文件中SACL中的ACE
FileSystemAccessRule=目录和文件中DACL中的ACE
AccessControl=ACL(AccessControlList)
DirectorySecurity类和FileSecurity类是对基础Microsoft Windows文件安全系统的抽象。----注:本文部分内容改编自《.NET安全揭秘》
FileSystemAccessRule和FileSystemAuditRule 类是对组成DACL和SACL的访问控制项(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);