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 中查看,请执行以下操作:

  1. 打开 MMC 并加载 ADUC 管理单元
  2. 启用查看 → 高级功能
  3. 右键单击任何 OU,选择 属性
  4. 选择属性上的安全选项卡window
  5. 单击高级按钮。
  6. 查看对该 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 也可以获得此信息,但您可能需要进行一些文本解析才能以更友好的格式获取它...