访问控制列表(ACL)定义了用户和组在 OU、容器及其他 Active Directory (AD) 对象上的权限。检查 ACL 有助于管理员审核当前权限、排查访问问题以及规划委派或安全更改。本页涵盖了使用 PowerShell、Active Directory Users and Computers (ADUC) 控制台和 ManageEngine ADManager Plus 获取 AD 文件夹及子文件夹 ACL 的步骤,详细说明了前提条件、步骤、示例和支持的参数。
PowerShell 中的 Get-Acl cmdlet 用于检索资源(如文件、文件夹或注册表项)的安全描述符。该安全描述符包含 ACL,明确列出了授予用户或组对该资源的权限。Get-Acl 允许管理员检查谁拥有何种访问权限,如读取、写入或完全控制。输出是一个 PowerShell 对象,可用于分析、筛选或传递给其他 cmdlet,通常是使用 Set-Acl cmdlet 修改权限前的第一步。
使用 AD 模块的 Get-Acl cmdlet,管理员可以提取 OU 及其子对象上的权限及详细访问条目。
Import-Module ActiveDirectory
使用 Get-Acl cmdlet 和类似 C:\ExampleFolder 的文件夹路径来检索应用于该文件夹的 NTFS 权限(ACL)。
$folderPath = "C:\ExampleFolder"
Get-Acl -Path $folderPath | Format-List
此命令检索并显示设置在用户账户“John Smith”上的所有 ACE。
$userDN = "CN=John Smith,OU=Users,DC=domain,DC=com"
Get-Acl -Path "AD:$userDN" | Format-List
此命令检索并显示定义在域 "domain.com" 中名为 "Sales" 的 OU 上的 ACL。
$ADFolderPath = "AD:\OU=Sales,DC=domain,DC=com"
Get-Acl -Path $ADFolderPath | Format-List
此脚本检索指定父 OU 及其所有直接子 OU 的 ACL,帮助您审核该 AD 分支中的委派和访问结构。
$ParentOU = "OU=Sales,DC=domain,DC=com"
$ChildOUs = Get-ADOrganizationalUnit -SearchBase $ParentOU -Filter *
foreach ($ou in $ChildOUs) {
Write-Output "ACL for OU: $($ou.DistinguishedName)"
Get-Acl -Path ("AD:\" + $ou.DistinguishedName) | Format-List
}
此脚本递归收集目标 OU 及其所有子 OU 的 ACL,并将权限详细信息导出到 CSV 文件。
$OUPath = "OU=Sales,DC=domain,DC=com"
$AllOUs = Get-ADOrganizationalUnit -SearchBase $OUPath -Filter * -SearchScope Subtree
$results = foreach ($ou in $AllOUs) {
$acl = Get-Acl -Path ("AD:\" + $ou.DistinguishedName)
foreach ($ace in $acl.Access) {
[PSCustomObject]@{
ObjectDN = $ou.DistinguishedName
Identity = $ace.IdentityReference
AccessControlType = $ace.AccessControlType
ActiveDirectoryRights = $ace.ActiveDirectoryRights
InheritanceType = $ace.InheritanceType
}
}
}
$results | Export-Csv -Path "AD_OUs_ACL_Report.csv" -NoTypeInformation
以下是可与 Get-Acl cmdlet 一起使用的重要参数:
| 参数 | 描述 |
|---|---|
| -Path | 指定对象的 AD 路径(例如 "AD:\OU=Sales,DC=domain,DC=com")。 |
| -SearchBase | 定义 Get-ADOrganizationalUnit 查询的根容器。 |
| -Filter | 过滤要检索的对象(例如 * 表示所有对象)。 |
| -SearchScope | 指定搜索范围:base、onelevel 或 subtree。 |
| -IdentityReference | ACE 条目的安全主体(用户或组)。 |
| -AccessControlType | 允许过滤或检查允许或拒绝的访问类型。 |
| -ActiveDirectoryRights | ACE 分配的具体权限(例如 WriteProperty)。 |
ADUC 提供了基于 GUI 的方式查看 OU 及子对象的权限:
以 CSV、XLS、PDF 和 HTML 等不同格式导出报告。
自定义文件夹级别和权限以优化结果。
虽然 PowerShell 和 ADUC 功能强大,但仅依赖这些本地工具可能会带来挑战:
ADManager Plus 是一款集成的 AD、Exchange 和 Microsoft 365 管理解决方案,可让您在无脚本的统一控制台中检索 ACL 及更多内容。
访问控制列表(ACL)是 AD 对象安全描述符的核心组成部分,本质上是管理该对象(如用户帐户、组或 OU)权限的规则集。它由访问控制项(ACE)组成,分为两个主要列表:自主访问控制列表(DACL),明确授予或拒绝特定用户和组的权限;系统访问控制列表(SACL),专用于审计,定义哪些成功或失败的访问尝试必须记录到安全事件查看器。此细粒度结构确保了严格的安全性,使管理员能够精确控制和跟踪目录结构中每个项目的操作权限。
Active Directory 有两种类型的 ACL(DACL 和 SACL),其中权限以访问控制项(ACE)表示,ACE 有两种形式:显式和继承。
自主访问控制列表(DACL): 这是 AD 中最常见的类型。它定义了不同安全主体(用户、组、计算机)对 AD 对象(如用户帐户、组或组织单位)的具体权限(读取、写入、创建/删除子项等)。管理员根据需要修改 DACL 来管理访问。
系统访问控制列表(SACL): 此列表用于审计。它定义了哪些特定用户或组的访问尝试(成功和失败)应记录到 Windows 安全事件日志。它不用于授予或拒绝访问,而是用于跟踪访问。
继承的访问控制项(ACE): 这些是对象自动从其父容器(如 AD 层级中更高的 OU)继承的权限规则,对于大规模管理权限至关重要。
显式访问控制项(ACE): 这些是手动直接分配给特定 AD 对象的权限规则,用于覆盖或补充任何继承的权限。
Set-Acl cmdlet 用于将修改后的安全描述符(ACL)应用于文件、文件夹或其他可保护对象。工作流程通常包括三个步骤:
下面是一个授予用户对文件夹修改权限的示例脚本:
$path = "C:\Data\Reports"
$user = "DOMAIN\John.Doe"
$acl = Get-Acl -Path $path
$permission = $user, "Modify", "ContainerInherit,ObjectInherit", "None", "Allow"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission
$acl.AddAccessRule($accessRule)
Set-Acl -Path $path -AclObject $acl
Write-Host "Permission applied successfully."
对于无脚本方法,ADManager Plus 可帮助您 批量管理文件和文件夹的 ACL。