映射 Posix 标识符

Posix 子系统必须能够将遇到的任何 安全标识符 (SID) 转换为称为 Posix ID 的 32 位值。 此外,它必须能够将 ID 分类为用户 ID 或组 ID。 为了了解如何完成此映射,让我们首先看看必须映射的 SID。

SID 有两个组件:域的 SID 和域中帐户的相对 ID。 例如,在 SID S-1-518364-21-43-8 中,最后一个数字 8 是帐户的相对 ID (RID) ,S-1-518364-21-43 是域的 SID。

域信息存储在 TrustedDomain 对象中。 存储在 TrustedDomain 对象中的部分信息是用于该域中 SID 的 Posix ID 偏移量。 例如,假设 TrustedDomain 的定义如下:

    Name:    NtPgm
    Sid:    S-1-518364-21-43
    Posix Offset:    0x130000

此域中帐户的 Posix ID 是通过将 0x130000 添加到帐户的相对 ID 来生成的。 因此,对应于 SID S-1-518364-21-43-8 的 Posix ID 将0x130008。

并非所有 Posix ID 转换都使用 TrustedDomain 对象。 下表显示了使用已知偏移值映射的 SID。

Posix ID 偏移量
内置域中的 SID 0x20000
帐户域中的 SID 0x30000
主域中的 SID 仅在工作站上 () 0x40000

 

最后,另一组 SID(登录 SID)需要特殊处理。 这些值由 Windows 登录进程为每个登录会话分配,其格式为 S-1-5-5-X-Y,其中 X 和 Y 被视为单个LARGE_INTEGER,每个登录会话都会递增。 这些 SID 映射到常量 Posix ID 0xFFF。 若要映射 Posix ID 0xFFF,可以转换最适合此情况的任何 登录标识符 ,或者默认使用 S-1-5-5-0-0。 (例如,如果 posix 用户对对象应用保护并指定 FFFx,则替换该用户的登录标识符比仅分配 S-1-5-5-0-0.)