SID 是什么
SID(安全标识符)是账户与组的唯一身份编号,权限系统里存的是 SID 而不是名字:把 ACL 里的名字改掉,权限不会变;把账户删掉,ACL 里的 SID 就变成无法解析的残影。正因为如此,改名账户不会影响历史授权,而「删掉再建一个同名账户」则会丢掉原有权限——这也是复用账号名的做法被列为安全禁忌的原因。
基本信息
| 适用平台 | Windows 全版本(本地与域环境通用) |
|---|---|
| 结构 | S-1-5-21-域或机器标识-相对标识(RID) |
| 查看当前 | whoami /user 显示当前账户 SID |
| 查看账户 | Get-LocalUser | Select-Object Name, SID;域账户用 Get-ADUser -Identity 名称 | Select-Object SID |
| 查看 ACL | icacls 路径 或 Get-Acl 路径,未解析的 SID 常意味账户已删除 |
| 权限要求 | 查看无需提权;修改 SID 相关配置需要管理员 |
典型使用场景
- 权限排障:ACL 里出现陌生 SID,判断是已删除账户还是跨域对象
- 账号改名:确认改名不影响既有授权,避免重复配置权限
- 域迁移:了解 SID 历史机制对原有权限保留的作用
- 克隆排查:虚拟机克隆未做 sysprep 导致机器标识重复引发域内异常
- 审计取证:核对特定 SID 出现在哪些目录或服务的权限中
常用示例
常用示例
whoami /user # 当前账户的 SID
whoami /groups # 令牌中各组的 SID
wmic useraccount get name,sid # 本地账户 SID 一览(WMIC 已弃用)
REM PowerShell 等价
REM Get-LocalUser | Select-Object Name, SID, Enabled
REM Get-LocalGroup | Select-Object Name, SID
icacls D:\Data | findstr /i "S-1-5-21" # 在 ACL 中查找已解析或未解析的 SID
REM 用 SID 作为标识排查服务与计划任务
REM Get-ScheduledTask | ForEach-Object { $_.Principal.UserId } | Sort-Object -Unique常见 SID 速查
| SID | 身份 | 说明 |
|---|---|---|
| S-1-5-18 | SYSTEM(本机) | 系统账户,权限最高 |
| S-1-5-19 | LOCAL SERVICE | 本地服务账户,权限受限 |
| S-1-5-20 | NETWORK SERVICE | 网络服务账户,网络身份为机器账户 |
| S-1-5-32-544 | Administrators | 内置管理员组 |
| S-1-5-21-…-500 | 内置 Administrator 账户 | RID 500 为内置管理员 |
| S-1-5-21-…-501 | 内置 Guest 账户 | RID 501 为来宾账户 |
| S-1-5-21-… | 本地或域账户与组 | 由机器或域标识加 RID 组成 |
权限条目里保存的就是 SID,账户删除后 ACL 里显示为 S-1-5-21-… 这样的残影,命名不存在的账户时无法解析。清理这类残影是权限治理的常规动作,但清理前要确认该目录没有依赖旧授权。
RID(最后一段数字)在域内同类对象间连续分配,因此 500、501、502 这类固定 RID 有特定含义(内置管理员、来宾、krbtgt),审计时看到这些编号可以直接定位到内置高权限对象。
检索与核对
检索与核对
$sid = (whoami /user | Select-String 'S-1-5').ToString().Split()[-1] # 取当前 SID
(New-Object System.Security.Principal.SecurityIdentifier($sid)).Translate([System.Security.Principal.NTAccount]) # SID 转名称
Get-Acl D:\Data | Select-Object -ExpandProperty Access | Select-Object IdentityReference, FileSystemRights, AccessControlType
Get-ChildItem D:\Data -Recurse -ErrorAction SilentlyContinue | ForEach-Object { Get-Acl $_.FullName } |
Select-Object -ExpandProperty Access | Where-Object { $_.IdentityReference -like 'S-1-5-*' } | Sort-Object IdentityReference -Unique # 找出未解析 SID克隆虚拟机或整盘复制后必须走 sysprep 让机器标识重新生成:机器 SID 重复会给域环境带来难以定位的认证与权限问题,补齐成本远高于初始规范装机。