在 Active Directory (AD) 中委派权限 是一项关键的管理功能,使组织能够向用户或组分配特定权限,而无需授予完全的管理访问权限。委派简化了用户管理,执行最小权限原则,并允许帮助台或初级 IT 员工执行必要任务。本页介绍如何使用 PowerShell、Active Directory Users and Computers (ADUC) 以及 ADManager Plus 委派 AD 权限。
PowerShell 允许您使用 dsacls.exe 工具在 OU、容器或对象级别向用户和组委派权限。
Import-Module ActiveDirectory
这是一个基本的 PowerShell 脚本,使用 dsacls.exe 向 AD 用户委派权限(例如,重置密码)。该脚本在指定的 OU 上向指定的用户或组分配权限。
$OUPath = "OU=Target,DC=domain,DC=com"
$DelegateUser = "domain\GroupName"
dsacls $OUPath /I:T /G "$DelegateUser`:RPWP;Reset Password;user"
此脚本将重置用户密码和强制下次登录时更改密码的权限委派给指定 OU 内所有用户对象的指定 AD 用户。
$OU_Path = "OU=Users,DC=contoso,DC=local"
$Delegate_User = "HelpDesk"
Write-Host "Delegating Password Reset permissions for $OU_Path to user $Delegate_User..."
dsacls "$OU_Path" /G "$Delegate_User`:RPWP;Reset Password;user" /I:S /P:Y
dsacls "$OU_Path" /G "$Delegate_User`:RP;pwdLastSet;user" /I:S /P:Y
dsacls "$OU_Path" /G "$Delegate_User`:WP;pwdLastSet;user" /I:S /P:Y
Write-Host "Delegation complete. Replication may take some time."
此脚本将读取和写入 lockoutTime 属性的权限委派给指定 OU 内所有用户对象的指定安全组。
$OU_Path = "OU=Office Employees,DC=contoso,DC=local"
$Delegate_Group = "HelpdeskGroup"
Write-Host "Delegating Unlock Account permissions for $OU_Path to group $Delegate_Group..."
dsacls "$OU_Path" /G "$Delegate_Group`:WP;lockoutTime;user" /I:S /P:Y
dsacls "$OU_Path" /G "$Delegate_Group`:RP;lockoutTime;user" /I:S /P:Y
Write-Host "Delegation complete. Replication may take some time."
此脚本授予 Helpdesk Admins 组对 Sales Users OU 的完全控制权限,有效地委派了完整的管理权限。
$OU_Path = "OU=Sales Users,DC=yourdomain,DC=com"
$Delegate_Group = "Helpdesk Admins"
Write-Host "Granting Full Control on OU $OU_Path to group $Delegate_Group..."
dsacls "$OU_Path" /G "$Delegate_Group`:GA" /I:T
Write-Host "Full Control delegation complete. The group $Delegate_Group now has full administrative rights over all objects in $OU_Path."
此脚本允许向安全组授予在目标 OU 内创建和删除用户账户的权限。
$OU_Path = "OU=Office Employees,OU=Users,DC=contoso,DC=local"
$Delegate_Group = "SG-User-Provisioning"
Write-Host "Delegating Create/Delete User Accounts permissions for $OU_Path to group $Delegate_Group..."
Write-Host "------------------------------------------------------------------------------------"
dsacls "$OU_Path" /G "$Delegate_Group`:CC;user" /I:S
dsacls "$OU_Path" /G "$Delegate_Group`:DC;user" /I:S
Write-Host "Delegation complete. The group $Delegate_Group can now create and delete user accounts within $OU_Path."
以下是 PowerShell 委派任务中可用的重要参数:
| 参数 | 描述 |
|---|---|
| /G <account>:<permissions> | 向指定的用户或组授予指定权限(例如,RPWP 表示重置/写入密码,CC 表示创建子对象)。 |
| /I:<flag> | 控制作用范围:S 表示仅此对象,C 表示仅子对象,T 表示此对象及子对象。 |
| <ObjectDN> | 目标对象或 OU 的可分辨名称,权限应用于此(例如,OU=Sales,DC=domain,DC=com)。 |
| :RPWP;user | 表示对用户对象的重置密码和写入权限。 |
| :WP;lockoutTime;user | 对 lockoutTime 属性 的写权限(用于解锁账户)。 |
| :RP;lockoutTime;user | 对 lockoutTime 属性 的读权限(通常与写权限配合用于解锁委派)。 |
| :GA | 通用全部(完全控制)权限授予。 |
| /P:Y | 将权限传播到子对象(用于继承)。 |
| -Identity | 指定用于委派的用户、组或计算机(用于某些 PowerShell cmdlet,如 Add-ADPermission)。 |
| -Add, -Remove, -Clear | 用于以编程方式添加、删除或清除委派设置。 |
ADUC 提供基于 GUI 的权限委派方法:
ADManager Plus 通过提供基于 Web 的界面和基于角色的访问控制简化了委派:
选择技术员的委派范围
从预设和自定义角色列表中选择
注意:要创建自定义角色,请导航至 Delegation > Help Desk Delegation > Help Desk Roles 并点击 + 创建新角色。
虽然功能强大,但仅依赖 PowerShell 和 ADUC 进行委派可能会带来挑战:
ADManager Plus 是一款集成的 AD、Exchange 和 Microsoft 365 管理解决方案,允许您委派对不同 AD 对象的管理和报告控制。
运行以下脚本检查委派权限。它使用 Get-ACL cmdlet 检索访问控制条目(ACE),帮助识别哪些用户或组被委派了权限。
Import-Module ActiveDirectory
$acl = Get-Acl "AD:$OU"
Write-Host "`nDelegated permissions on: $OU`n" -ForegroundColor Cyan
$acl.Access | Where-Object { -not $_.IsInherited } | Select-Object `
IdentityReference,
ActiveDirectoryRights,
AccessControlType,
ObjectType,
InheritanceType |
Format-Table -AutoSize
对于无脚本方法,ADManager Plus 通过详细报告帮助管理员 查看委派权限。
AD 中的非约束委派允许计算机或服务帐户在用户认证后模拟任何用户并代表其访问任何资源。启用后,用户的 Kerberos 票据授予票(TGT)存储在该系统上,使其能够自由请求访问其他服务。虽然这简化了多层应用的身份验证,但如果委派系统被攻破,则构成重大安全风险。攻击者可以利用存储的 TGT 横向移动或提升权限。
使用 PowerShell 委派 AD 中的 GPO 权限涉及使用 Set-GPPermission cmdlet(来自 GroupPolicy 模块)。以下脚本将委派 GpoEditDeleteModifySecurity 权限级别,赋予对特定 GPO 的完全控制,包括编辑、删除和修改其安全设置的能力。
Import-Module GroupPolicy
$gpoName = "My Test GPO"
$targetGroupName = "GPOAdmins"
$permissionLevel = "GpoEditDeleteModifySecurity"
if (Get-GPO -Name $gpoName -ErrorAction SilentlyContinue) {
Set-GPPermission -Name $gpoName -PermissionLevel $permissionLevel -TargetName $targetGroupName -TargetType Group
Write-Host "Permissions successfully delegated to '$targetGroupName' for GPO '$gpoName'."
} else {
Write-Host "GPO '$gpoName' not found." -ForegroundColor Red
}
对于无脚本方法,ADManager Plus 通过其直观的 GUI 控制台使您能够委派 GPO 管理和报告 任务。