Windows Security子系统:Access Control- -

本文解析了Windows安全子系统中的Access Control模型。介绍了基本架构,包括AccessToken和SecurityDescriptor的作用,以及AccessControlList (ACL) 和 AccessControlEntry (ACE) 的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在终于慢慢地明白了Windows安全子系统中Access Control的的模型,确实很麻烦,但是,这是高安全性的cost。

Windows基本的的安全架构是基于Access Tokens和Security Descriptor的,任何一个Accesser(访问的发起者)都拥有一个Access Token,而每一个Accessee(访问的接受者)都拥有一个Security Descriptor,系统会在需要进行Access Control的时候进行Tokens和Descriptor的比较,来确定是否允许访问。

每个Access Token都包含有必要的信息,主要是用户的SID,所属Group的SID,logon Session SID,特权列表,Owner的SID,Primary Group的SID,DACL,等等。而Descriptor用来表示每个Securable Object的安全性,包括Object的Owner,Primary Group,DACL,SACL,以及一些和Object本身相关的信息。

然后就是ACL(Access Control List),其中包含有许多的ACE(Access Control Entry),系统在进行Access Control的时候,就是拿它们相互比较的。

基本架构差不多了,细节还有好多不懂。

转载于:https://www.cnblogs.com/highmayor/archive/2008/03/07/1095244.html

<think>好的,我现在需要帮助用户解决如何在PowerShell中使用New-Object和System.Security.AccessControl.NativeObjectSecurity的问题。首先,我要确认用户的具体需求。用户可能是在尝试创建自定义的安全对象,用于管理访问控制。但根据引用[1]中的示例,用户之前可能是在处理文件系统的访问规则,所以可能是在尝试扩展这方面的功能。 接下来,我需要回忆NativeObjectSecurity类的作用。这个类是一个抽象类,用于处理非标准资源的安全描述符。通常用于文件系统、注册表之外的对象,比如自定义的Windows对象。但是直接实例化它可能不可行,因为它需要具体的实现。 查看引用[3],用户提到AWS Lambda支持PowerShell,但这里可能不太相关。引用[2]中用户提到想通过PsGet获取Git和Hg集成,这可能和当前问题无关,但可能用户在使用PowerShell进行系统管理任务。 用户的问题是如何在PowerShell中使用New-Object创建NativeObjectSecurity的实例。由于NativeObjectSecurity是抽象类,不能直接实例化。可能需要使用派生类,比如FileSystemSecurity、RegistrySecurity等。但用户可能想处理非标准资源,所以需要自定义类。 我需要检查是否有可用的派生类或者如何继承NativeObjectSecurity。例如,可以创建一个子类,并实现必要的方法,如Persist和GetSecurityDescriptorSddlForm。但是在PowerShell中直接继承可能比较复杂,可能需要编写C#代码然后编译加载。 或者,用户可能误解了NativeObjectSecurity的用法,应该使用现有的派生类。例如,处理文件权限时,使用FileSystemAccessRule,如引用[1]中的例子。这时候需要引导用户使用正确的类,比如FileSystemSecurity,并通过AddAccessRule方法添加规则。 但用户明确提到NativeObjectSecurity,可能需要更详细的步骤。例如,在PowerShell中创建自定义的NativeObjectSecurity子类,这需要编写C#代码片段,使用Add-Type编译,然后在PowerShell中使用。 总结步骤:首先解释NativeObjectSecurity是抽象类,不能直接实例化。然后提供两种方法:使用现有的派生类,或者创建自定义子类。对于后者,给出示例代码,使用Add-Type嵌入C#代码,定义子类并实现必要的方法,再在PowerShell中实例化。 需要验证这些步骤是否正确。例如,在C#中继承NativeObjectSecurity需要实现Persist等方法,这些方法在PowerShell中可能难以直接处理,所以可能需要占位实现。同时,需要处理安全描述符的持久化,这可能涉及资源类型和名称。 最后,提醒用户注意资源类型和名称的正确性,以及可能需要管理员权限。确保代码示例正确,并符合PowerShell的语法,比如使用New-Object的正确参数。</think>在PowerShell中使用$System.Security.AccessControl.NativeObjectSecurity$时需要注意,这是一个抽象类,主要用于处理非标准Windows资源的安全描述符。以下是具体实现方法: ### 方法一:使用现有派生类(推荐) 对于常规资源(如文件/注册表),建议直接使用预定义的派生类: ```powershell # 文件系统访问控制示例(引用[1]的扩展) $filePath = "C:\Test\file.txt" $acl = Get-Acl -Path $filePath $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Users","Read", "Allow") $acl.AddAccessRule($rule) Set-Acl -Path $filePath -AclObject $acl ``` ### 方法二:创建自定义子类 对于自定义资源类型,需要通过C#代码创建派生类: ```powershell Add-Type @" using System.Security.AccessControl; using System.Security.Principal; public class CustomNativeSecurity : NativeObjectSecurity { public CustomNativeSecurity(bool isContainer, ResourceType resType) : base(isContainer, resType, null, null) {} public override Type AccessRightType => typeof(FileSystemRights); public override Type AccessRuleType => typeof(FileSystemAccessRule); public override Type AuditRuleType => typeof(FileSystemAuditRule); public new void Persist(string name, AccessControlSections includeSections) { // 实现持久化逻辑 } public override AuditRule AuditRuleFactory( IdentityReference identity, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AuditFlags flags) { return new FileSystemAuditRule(identity, (FileSystemRights)accessMask, flags); } public override AccessRule AccessRuleFactory( IdentityReference identity, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AccessControlType type) { return new FileSystemAccessRule(identity, (FileSystemRights)accessMask, type); } } "@ # 实例化自定义安全对象 $customSecurity = New-Object CustomNativeSecurity($false, [ResourceType]::FileObject) ``` ### 参数说明 - `ResourceType`:需指定有效的资源类型枚举值,包括: - `FileObject` - `Service` - `Printer` - `RegistryKey` - `LMShare` - `KernelObject` - `isContainer`:指示该对象是否包含子对象 ### 注意事项 1. 需要管理员权限操作受保护资源 2. 自定义资源类型需在Windows安全子系统注册 3. 持久化方法`Persist()`需要实现具体的存储逻辑 4. 推荐优先使用.NET内置的派生类(如`FileSystemSecurity`)[^1][^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值