查找并移除AD用户的S-1-5-32-554身份引用技术求助
AD权限排查与修复脚本
问题背景
为提升安全性,已将「Authenticated Users」从Pre-Windows 2000 Compatible Access组中移除。但发现普通用户执行PowerShell查询所有用户createTimeStamp属性时,仍能查看部分用户的时间戳;域管理员执行查询则能看到全部数据。排查确认:这些可被普通用户查看的用户对象上绑定了IdentityReference为S-1-5-32-554(即Builtin\Pre-Windows 2000 Compatible Access组)的权限,且这些用户并非该组成员;同时受影响用户均曾或当前设置AdminCount=1,导致AD信息过度暴露。
脚本1:检索带有S-1-5-32-554身份引用的AD用户
需以域管理员身份运行,确保能读取所有用户的权限信息:
Get-ADUser -Filter {AdminCount -eq 1} -Properties ntSecurityDescriptor, Name, SamAccountName | ForEach-Object { $targetUser = $_ $targetUser.ntSecurityDescriptor.Access | Where-Object { $_.IdentityReference.Value -eq "S-1-5-32-554" } | ForEach-Object { [PSCustomObject]@{ SamAccountName = $targetUser.SamAccountName DisplayName = $targetUser.Name IdentityReference = $_.IdentityReference.Value AccessType = $_.AccessControlType GrantedRights = $_.ActiveDirectoryRights } } } | Export-Csv -Path "Win2kCompatExposedUsers.csv" -NoTypeInformation -Encoding UTF8
说明
- 针对
AdminCount=1的用户(受影响用户的共同特征)筛选,避免无意义遍历 - 提取包含
S-1-5-32-554权限项的用户信息,导出为CSV文件方便后续处理
脚本2:从指定用户中移除S-1-5-32-554身份引用
需以域管理员身份运行,确保CSV文件NoMoreWin2kCompat.csv包含SamAccountName列(存储要处理的用户账号):
$userList = Import-Csv -Path "NoMoreWin2kCompat.csv" -Encoding UTF8 foreach ($user in $userList) { try { $adUser = Get-ADUser -Identity $user.SamAccountName -Properties ntSecurityDescriptor $securityDesc = $adUser.ntSecurityDescriptor # 筛选需要移除的权限规则 $rulesToRemove = $securityDesc.Access | Where-Object { $_.IdentityReference.Value -eq "S-1-5-32-554" } # 批量移除权限规则 foreach ($rule in $rulesToRemove) { $securityDesc.RemoveAccessRule($rule) | Out-Null } # 更新AD用户的安全描述符 Set-ADUser -Identity $adUser -Replace @{ntSecurityDescriptor = $securityDesc} Write-Host "✅ 已处理用户:$($user.SamAccountName)" } catch { Write-Error "❌ 处理用户 $($user.SamAccountName) 失败:$_" } }
说明
- 遍历CSV中的用户,逐个移除其安全描述符中指向
S-1-5-32-554的所有权限规则 - 处理过程中输出结果,便于排查异常
内容的提问来源于stack exchange,提问作者BiGBaG
相关产品推荐
相关产品推荐

