要报告授予Active Directory组织单位(OU)的权限,您需要OU的访问控制列表,这是AD记录哪些帐户拥有哪些权限的记录。下面,您将了解该访问控制列表的结构、一个免费获取它的PowerShell脚本、如何读取返回内容,以及如何使用 Netwrix Auditor 无需脚本生成相同的报告。
使用 Netwrix Auditor 查看谁在何时何地访问了什么以及原因。
Active Directory中的OU权限如何工作?
Active Directory 中的每个对象,包括每个 OU,都有一个访问控制列表 (ACL):一组访问控制条目 (ACE),说明哪些帐户或组可以对该对象执行哪些操作。OU 的权限来自三个地方:
- 显式,直接授予OU本身。
- 通过组成员身份,账户因属于被授予访问权限的组而获得权限。
- Inherited,从父容器传递下来,因为AD权限会从域根通过每个父OU级联,除非显式阻止继承。
这就是为什么有用的权限报告需要显示的不仅仅是谁有访问权限。它还需要显示他们是如何获得访问权限的,因为直接授予的权限风险与从父容器继承或通过组获得的相同访问权限不同。
使用 PowerShell (Get-Acl) 生成报告
- 打开 Powershell ISE → 使用以下代码创建新脚本,设置用户名和导出路径,然后运行它:
$schemaIDGUID = @{}
#ignore duplicate errors if any#
$ErrorActionPreference = 'SilentlyContinue'
Get-ADObject -SearchBase (Get-ADRootDSE).schemaNamingContext -LDAPFilter '(schemaIDGUID=*)' -Properties
name, schemaIDGUID |
ForEach-Object {$schemaIDGUID.add([System.GUID]$_.schemaIDGUID,$_.name)}
Get-ADObject -SearchBase "CN=Extended-Rights,$((Get-ADRootDSE).configurationNamingContext)" -LDAPFilter
'(objectClass=controlAccessRight)' -Properties name, rightsGUID |
ForEach-Object {$schemaIDGUID.add([System.GUID]$_.rightsGUID,$_.name)}
$ErrorActionPreference = 'Continue'
# Get OU.
$OUs = Get-ADOrganizationalUnit -Filter 'Name -like "Production"'| Select-Object -ExpandProperty
DistinguishedName
# retrieve OU permissions.
# Add report columns to contain the OU path and string names of the ObjectTypes.
ForEach ($OU in $OUs) {
$report += Get-Acl -Path "AD:\$OU" |
Select-Object -ExpandProperty Access |
Select-Object @{name='organizationalUnit';expression={$OU}}, `
@{name='objectTypeName';expression={if ($_.objectType.ToString() -eq '00000000-0000- 0000-0000-
000000000000') {'All'} Else {$schemaIDGUID.Item($_.objectType)}}}, `
@{name='inheritedObjectTypeName';expression={$schemaIDGUID.Item($_.inheritedObjectType)}}, `
*
}
# Export report out to a CSV file for analysis in Excel.
$report | Export-Csv -Path "C:\data\OU_Permissions.csv" -NoTypeInformation
- 在Excel中打开导出的文件。
示例报告:
阅读并解读报告
一旦获得CSV,有几列最为重要:
- IdentityReference:谁或哪个组拥有访问权限。
- ActiveDirectoryRights:该账户实际可以执行的操作。例如,GenericAll表示对对象的完全控制,而不仅仅是读取权限。
- IsInherited: 权限是直接授予还是从父容器继承。风险通常隐藏在这里。直接授予(IsInherited = False)给单个账户,或者像 Authenticated Users 这样持有超过所需权限的广泛组,都值得仔细检查。
- AccessControlType: 条目是允许还是拒绝该权限。拒绝条目很少见,值得单独调查。
如果您看到像 GenericAll 或 WriteProperty 这样的权限级别直接授予给个人账户,而不是通过预期的组,或者一个广泛的内置组拥有超过读取权限的访问权限,那么这就是符合最小权限原则的清理候选项。
使用工具进行大规模报告
一旦您需要跨多个OU、定期执行或无需维护脚本时,Netwrix Auditor 会为您内置相同的报告。
- 在 Netwrix Auditor 中,转到“Reports”→展开“Active Directory”部分→转到“Active Directory - State-in-Time”→选择“Object Permissions in Active Directory”→点击“View”。
- 指定下面筛选器的值,然后点击“查看报告”:
- 对象UNC路径
- 授予的手段
- 权限
- 要保存报告,请点击“Export”按钮 → 从下拉菜单中选择格式 → 点击“Save”。
除了这份一次性的报告,Netwrix Auditor 还会跟踪是谁在何时以何种方式更改了什么,这样您就可以在异常活动成为事件之前捕捉到它,而不仅仅是一个快照。并且无需解码:账户名称、账户类型和授予方式已经标注,无需翻译GenericAll或IsInherited。
使用 Netwrix Auditor 查看谁在何时何地访问了什么。下载免费试用版。
获取特定OU的Active Directory权限列表,以撤销过度访问权限并防止特权滥用
严格执行最小权限原则,即每个账户仅拥有其实际需要的访问权限,对于强大的Active Directory 安全至关重要。全面的AD权限报告显示了谁在域中拥有何种访问权限,每项权限是如何授予的(直接授予或通过组成员身份),以及账户的访问权限是否仍符合其职责,或是遗留自其不再担任的角色。
单个OU报告是一个良好的起点,但访问权限远远超出任何一个OU,跨越嵌套组、文件共享、SharePoint以及您的AD账户可以访问的云存储库。Netwrix Access Analyzer 扩展了同样的问题,谁可以访问什么,覆盖您的整个环境,自动标记过多或过时的权限,并允许数据所有者审查并撤销他们不再需要的访问权限。
常见问题
分享到