如何使用 PowerShell 获取文件夹的 ACL

最后更新于:

访问控制列表(ACL)定义了用户和组在 OU、容器及其他 Active Directory (AD) 对象上的权限。检查 ACL 有助于管理员审核当前权限、排查访问问题以及规划委派或安全更改。本页涵盖了使用 PowerShell、Active Directory Users and Computers (ADUC) 控制台和 ManageEngine ADManager Plus 获取 AD 文件夹及子文件夹 ACL 的步骤,详细说明了前提条件、步骤、示例和支持的参数。

什么是 Get-Acl?

PowerShell 中的 Get-Acl cmdlet 用于检索资源(如文件、文件夹或注册表项)的安全描述符。该安全描述符包含 ACL,明确列出了授予用户或组对该资源的权限。Get-Acl 允许管理员检查谁拥有何种访问权限,如读取、写入或完全控制。输出是一个 PowerShell 对象,可用于分析、筛选或传递给其他 cmdlet,通常是使用 Set-Acl cmdlet 修改权限前的第一步。

  • PowerShell
  • ADUC
  • ADManager Plus
  • 原生工具的限制
  • 为什么选择 ADManager Plus
  • 常见问题解答
 

如何使用 PowerShell 获取 ACL

使用 AD 模块的 Get-Acl cmdlet,管理员可以提取 OU 及其子对象上的权限及详细访问条目。

前提条件

  1. 确保已安装 Active Directory PowerShell 模块(RSAT 工具的一部分)。
  2. 以适当权限运行 PowerShell(域管理员或委派的 ACL 读取权限)。
  3. Import the AD module if not already loaded:
    Import-Module ActiveDirectory

使用 Get-Acl cmdlet

使用 Get-Acl cmdlet 和类似 C:\ExampleFolder 的文件夹路径来检索应用于该文件夹的 NTFS 权限(ACL)。

$folderPath = "C:\ExampleFolder"
Get-Acl -Path $folderPath | Format-List

示例与用例

示例 1:获取单个 AD 用户账户的 ACL

此命令检索并显示设置在用户账户“John Smith”上的所有 ACE。

$userDN = "CN=John Smith,OU=Users,DC=domain,DC=com"
Get-Acl -Path "AD:$userDN" | Format-List

示例 2:获取 OU 或容器中 AD 文件夹的 ACL

此命令检索并显示定义在域 "domain.com" 中名为 "Sales" 的 OU 上的 ACL。

$ADFolderPath = "AD:\OU=Sales,DC=domain,DC=com"
Get-Acl -Path $ADFolderPath | Format-List

示例 3:获取 OU 及其直接子 OU 的 ACL

此脚本检索指定父 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
}

示例 4:将 OU 及所有子 OU 的 ACL 导出为 CSV

此脚本递归收集目标 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 获取 ACL

ADUC 提供了基于 GUI 的方式查看 OU 及子对象的权限:

  1. 打开 Active Directory Users and Computers
  2. View 菜单启用 Advanced Features
  3. 定位并右键点击所需的 OU 或容器。
  4. 选择 Properties > Security 选项卡。
  5. 查看用户、组及继承权限的 ACL 条目。
  6. 根据需要对子 OU 或容器重复操作。
使用 ADUC 获取 AD 中 OU 的 ACL。

如何使用 ADManager Plus 获取 ACL

  1. 导航至 Reports > NTFS & Security Reports > Folders Accessible by Accounts
  2. 选择域、用户和组,以及文件夹路径。
  3. 如有必要,使用下拉菜单配置子文件夹级别和访问类型。
  4. 点击 Generate
使用 ADManager Plus 生成 AD 中文件夹 ACL 的报告。
 
 

以 CSV、XLS、PDF 和 HTML 等不同格式导出报告。

 
 

自定义文件夹级别和权限以优化结果。

使用本地工具获取 ACL 的限制。

虽然 PowerShell 和 ADUC 功能强大,但仅依赖这些本地工具可能会带来挑战:

  • 使用本地 PowerShell cmdlet 获取 ACL 时,处理大量对象或深层目录树可能会很慢。
  • ADUC 的 GUI 界面仅允许一次查看一个对象的权限,批量权限审计耗时较长。
  • 本地工具提供的自动化和报告功能有限,可能无法满足大型或复杂 AD 环境的需求。
  • 本地解决方案需要提升权限。

使用 ADManager Plus 获取 ACL 的优势。

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)应用于文件、文件夹或其他可保护对象。工作流程通常包括三个步骤:

  1. 检索对象的当前 ACL。
  2. 通过添加、删除或更新 ACE 来修改 ACL。
  3. 使用 Set-Acl 将更新后的 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

使用 ADManager Plus 简化文件夹及子文件夹的 ACL 报告。

Active Directory管理与报告的一站式解决方案
电子邮件下载链接 Email the ADManager Plus download link