OU 高级安全权限报告
Report for OU advanced security permissions
下面的代码将 return 通用 OU 权限
Import-Module ActiveDirectory
set-location AD:
$OUAcl = (Get-Acl 'OU=ParentOU,OU=ChildOU,DC=test,DC=test,DC=com').Access
$OUAcl
不过我要审核的是高级安全权限。我可以在 GUI 中查看它,我只是不知道如何编写脚本来为我组织中的每个 OU(或特定 OU,具体取决于我们的需要)生成报告。
要在 GUI 中查看,请执行以下操作:
- 打开 MMC 并加载 ADUC 管理单元
- 启用查看 → 高级功能
- 右键单击任何 OU,选择 属性
- 选择属性上的安全选项卡window
- 单击高级按钮。
- 查看对该 OU 具有权限的所有 users/groups。
我想要的是一个报告,它可以转出有权访问 OU 的每个用户和组,以及他们的所有高级权限(例如:第 6 步中任何有复选框的内容都会检查它是允许还是拒绝) .
我找到了 this site,但没有达到我需要的细节。
这可以通过 PowerShell 实现吗?
这当然是可能的,但我不知道 ready-made 解决方案可以满足您的需求。您需要自己为每个 ACE 解决个人 access rights。这样的事情应该有效:
$dn = 'OU=ParentOU,OU=ChildOU,DC=test,DC=test,DC=com'
$ADS_RIGHTS_ENUM = @{
'ADS_RIGHT_DELETE' = 0x10000
'ADS_RIGHT_READ_CONTROL' = 0x20000
'ADS_RIGHT_WRITE_DAC' = 0x40000
'ADS_RIGHT_WRITE_OWNER' = 0x80000
'ADS_RIGHT_SYNCHRONIZE' = 0x100000
'ADS_RIGHT_ACCESS_SYSTEM_SECURITY' = 0x1000000
'ADS_RIGHT_GENERIC_READ' = 0x80000000
'ADS_RIGHT_GENERIC_WRITE' = 0x40000000
'ADS_RIGHT_GENERIC_EXECUTE' = 0x20000000
'ADS_RIGHT_GENERIC_ALL' = 0x10000000
'ADS_RIGHT_DS_CREATE_CHILD' = 0x1
'ADS_RIGHT_DS_DELETE_CHILD' = 0x2
'ADS_RIGHT_ACTRL_DS_LIST' = 0x4
'ADS_RIGHT_DS_SELF' = 0x8
'ADS_RIGHT_DS_READ_PROP' = 0x10
'ADS_RIGHT_DS_WRITE_PROP' = 0x20
'ADS_RIGHT_DS_DELETE_TREE' = 0x40
'ADS_RIGHT_DS_LIST_OBJECT' = 0x80
'ADS_RIGHT_DS_CONTROL_ACCESS' = 0x100
}
Import-Module ActiveDirectory
$acl = Get-Acl "AD:$dn"
foreach ($ace in $acl.Access) {
$ADS_RIGHTS_ENUM.Keys | Where-Object {
$ace.ActiveDirectoryRights.value__ -band $ADS_RIGHTS_ENUM[$_]
} | ForEach-Object {
"{0}`t{1}`t{2}" -f $ace.IdentityReference, $_, $ace.AccessControlType
}
}
我前一段时间制作了一个模块,我认为它可以满足您的需求,可以找到 here(先尝试下载版本 4)。然后你可以这样做:
Get-ADOrganizationalUnit -Filter * |
Get-PacAccessControlEntry |
Export-Csv c:\ou_permissions.csv -NoTypeInformation
如果您使用版本 3,命令将是 'Get-AccessControlEntry'。版本 3 是一个脚本模块,因此您可以打开文件以准确查看发生了什么,以及如何将 ACE(比普通的 filesystem/registry/service/etc ACE 更复杂)转换为更易读的格式。版本4编译好了,不过可以找到源码here.
dsacls.exe 也可以获得此信息,但您可能需要进行一些文本解析才能以更友好的格式获取它...
下面的代码将 return 通用 OU 权限
Import-Module ActiveDirectory
set-location AD:
$OUAcl = (Get-Acl 'OU=ParentOU,OU=ChildOU,DC=test,DC=test,DC=com').Access
$OUAcl
不过我要审核的是高级安全权限。我可以在 GUI 中查看它,我只是不知道如何编写脚本来为我组织中的每个 OU(或特定 OU,具体取决于我们的需要)生成报告。
要在 GUI 中查看,请执行以下操作:
- 打开 MMC 并加载 ADUC 管理单元
- 启用查看 → 高级功能
- 右键单击任何 OU,选择 属性
- 选择属性上的安全选项卡window
- 单击高级按钮。
- 查看对该 OU 具有权限的所有 users/groups。
我想要的是一个报告,它可以转出有权访问 OU 的每个用户和组,以及他们的所有高级权限(例如:第 6 步中任何有复选框的内容都会检查它是允许还是拒绝) .
我找到了 this site,但没有达到我需要的细节。
这可以通过 PowerShell 实现吗?
这当然是可能的,但我不知道 ready-made 解决方案可以满足您的需求。您需要自己为每个 ACE 解决个人 access rights。这样的事情应该有效:
$dn = 'OU=ParentOU,OU=ChildOU,DC=test,DC=test,DC=com'
$ADS_RIGHTS_ENUM = @{
'ADS_RIGHT_DELETE' = 0x10000
'ADS_RIGHT_READ_CONTROL' = 0x20000
'ADS_RIGHT_WRITE_DAC' = 0x40000
'ADS_RIGHT_WRITE_OWNER' = 0x80000
'ADS_RIGHT_SYNCHRONIZE' = 0x100000
'ADS_RIGHT_ACCESS_SYSTEM_SECURITY' = 0x1000000
'ADS_RIGHT_GENERIC_READ' = 0x80000000
'ADS_RIGHT_GENERIC_WRITE' = 0x40000000
'ADS_RIGHT_GENERIC_EXECUTE' = 0x20000000
'ADS_RIGHT_GENERIC_ALL' = 0x10000000
'ADS_RIGHT_DS_CREATE_CHILD' = 0x1
'ADS_RIGHT_DS_DELETE_CHILD' = 0x2
'ADS_RIGHT_ACTRL_DS_LIST' = 0x4
'ADS_RIGHT_DS_SELF' = 0x8
'ADS_RIGHT_DS_READ_PROP' = 0x10
'ADS_RIGHT_DS_WRITE_PROP' = 0x20
'ADS_RIGHT_DS_DELETE_TREE' = 0x40
'ADS_RIGHT_DS_LIST_OBJECT' = 0x80
'ADS_RIGHT_DS_CONTROL_ACCESS' = 0x100
}
Import-Module ActiveDirectory
$acl = Get-Acl "AD:$dn"
foreach ($ace in $acl.Access) {
$ADS_RIGHTS_ENUM.Keys | Where-Object {
$ace.ActiveDirectoryRights.value__ -band $ADS_RIGHTS_ENUM[$_]
} | ForEach-Object {
"{0}`t{1}`t{2}" -f $ace.IdentityReference, $_, $ace.AccessControlType
}
}
我前一段时间制作了一个模块,我认为它可以满足您的需求,可以找到 here(先尝试下载版本 4)。然后你可以这样做:
Get-ADOrganizationalUnit -Filter * |
Get-PacAccessControlEntry |
Export-Csv c:\ou_permissions.csv -NoTypeInformation
如果您使用版本 3,命令将是 'Get-AccessControlEntry'。版本 3 是一个脚本模块,因此您可以打开文件以准确查看发生了什么,以及如何将 ACE(比普通的 filesystem/registry/service/etc ACE 更复杂)转换为更易读的格式。版本4编译好了,不过可以找到源码here.
dsacls.exe 也可以获得此信息,但您可能需要进行一些文本解析才能以更友好的格式获取它...