【问题标题】:Powershell to get an OU's ACL-Security Auditing policy and its enabled entriesPowershell 获取 OU 的 ACL 安全审核策略及其启用的条目
【发布时间】:2020-09-23 17:46:53
【问题描述】:

我正在尝试从 Powershell 和 AD 中获取一份报告,该报告将向我显示 Active Directory 中此属性页上的项目列表 -

在 ADUC 中,右键单击您的根域 OU -> 属性-> 安全选项卡-> 高级-> 审核-> 选择/打开其中一个审核条目。它看起来像这样:

在该页面上,您将在顶部和底部看到“主体”、“类型”和“适用于”字段,以及正在审核、选中或未选中的权限和属性。

我想通过 Powershell 列出这些项目及其值。

我通过这样做进入那个审计页面:


 AD:\> $acl = get-acl 'DC=domain,DC=company,DC=com' -Audit

 AD:\> $acl.Audit

然后挑出其中一项:

AD:\> $acl.Audit[0]

ActiveDirectoryRights : GenericAll
InheritanceType       : All
ObjectType            : 00000000-0000-0000-0000-000000000000
InheritedObjectType   : 00000000-0000-0000-0000-000000000000
ObjectFlags           : None
AuditFlags            : Success, Failure
IdentityReference     : Everyone
IsInherited           : False
InheritanceFlags      : ContainerInherit
PropagationFlags      : None

但那是我所能得到的 n00b。我能够从该列表中提取的唯一内容是值本身,我什至不确定如果这些可能中的任何一个包含我想要的项目/值,哪个项目。我在正确的地方吗?

提前致谢,

理查德

【问题讨论】:

    标签: powershell active-directory


    【解决方案1】:

    事情就是这样,PowerShell ACL 只会向您展示该列表中的一些内容。以下是您可以做的事情来弄清楚这一点:

    从您所拥有的情况来看,ActiveDirectoryRights 属性将告诉您给定规则正在影响哪些权利。让我们看看该属性的类型是什么,看看我们是否可以获得它认为是有效值的列表。我们可以在属性上运行.GetType() 方法来查看它是[ActiveDirectoryRights] 类型,但这还不足以得到我们想要的。我们需要全名,我们可以这样得到:

    $acl.Audit[0].ActiveDirectoryRights.GetType()|Format-List
    

    所以这里重要的是BaseTypeFullName 属性。 BaseTypeSystem.EnumFullNameSystem.DirectoryServices.ActiveDirectoryRights。从中我们可以使用[Enum] 基类型来获取与我们的类型关联的名称。

    [enum]::GetNames([System.DirectoryServices.ActiveDirectoryRights])
    

    我们得到了这个值列表:

    CreateChild
    DeleteChild
    ListChildren
    Self
    ReadProperty
    WriteProperty
    DeleteTree
    ListObject
    ExtendedRight
    Delete
    ReadControl
    GenericExecute
    GenericWrite
    GenericRead
    WriteDacl
    WriteOwner
    GenericAll
    Synchronize
    AccessSystemSecurity
    

    这些也可以通过here 找到。该网站还告诉您每一项的含义,以及诸如 GenericAll 之类的其他权利组合在一起的其他权利。

    这是您将从 PowerShell 获得的信息,因此,如果这些信息足够了,那就太棒了,您已经得到了您正在寻找的信息。如果您希望获得列出的每种对象类型的所有细粒度权限,我认为您不会想要为此使用 PowerShell。是的,它们已列出,但您必须翻译对象类型 GUID。我所知道的唯一方法是查询所有具有 schemaIDGUID 的类的 AD,并且基本上从它们中构建一个哈希表,您可以稍后在查找所有这些访问时引用该哈希表。这一点你只需要做一次,然后在需要查找 GUID 时引用 $GUIDHT

    例如:

    #Connect to ADDS and get a list of all objects with a schemaIDGUID
    $root = Get-ADRootDSE
    $schemaContext = $root.schemaNamingContext
    $schemaObjects = Get-ADObject -SearchBase $schemaContext -Filter 'schemaIDGUID -like "*"' -Properties 'Name', 'schemaIDGUID', 'objectClass'
    #Create hashtable with generic 'All' entry for all zero guids
    $GUIDHT = @{[System.Guid]'00000000-0000-0000-0000-000000000000'=@{Name='All'}}
    #Populate the hashtable with all of the GUIDs we found in AD
    $schemaObjects|ForEach-Object{ $GUIDHT[$_.ObjectGUID]=$_ }
    
    #Find the friendly name for a specific audit rule listing
    $GUIDHT[$acl.Audit[0].ObjectType].Name
    

    然后,对于 PropagationFlags 与 InheritanceFlags,事情开始变得混乱。 InheritanceFlags 决定什么样的对象可以继承规则。 PropagationFlags 确定规则是仅适用于对象、仅适用于对象的子项,还是两者都适用。

    【讨论】:

    • 感谢您的详尽步骤。
    • 不知道为什么在我完成之前保存和发布 - 无论哪种方式 - 步骤都是完美的。但是,我不能仅仅获得关于存在哪些项目和正在被审计的勾选或不勾选报告。可惜了,但生活还在继续:)
    猜你喜欢
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2012-10-14
    • 2021-03-28
    • 1970-01-01
    相关资源
    最近更新 更多