安全标识符(SID)是用于标识用户或组的可变长度的唯一值。在用户登录时分配给用户的SID成为与该用户开始的任何进程伴随的访问令牌的一部分。除了登录SID之外,SID始终是唯一的。当用于识别用户或组时,不能再在任何时候再次使用来识别其他用户或组。
SID识别几个单独的元素。这些包括安全描述符中的所有者和组,访问控制条目(ACE)以及用户授予的访问的接收者以及用户在访问令牌中成员的组。
SID还包含以下信息。
* 48位标识符权限值
*修订级别
*可变数量的次授权值(相对??标识符)
标识符权限值实际上包含两个值,并且是SID中最重要的一条信息。它包含一个值,标识发出SID的代理机构,通常代表Microsoft服务器域,以及32位相对标识符(RID)值,以唯一标识该代理机构中的用户或组。加入这些值可确保没有两个SID相同,即使两个不同的SID发行机构发出相同的RID。每个SID颁发机构只发出一次给定的RID。
SID的标准化简写符号使得它们的组件可视化变得更简单:
S-【R】-【I】-【S】-【S】...
在上面所示的符号中,S将一系列数字标识为SID,【R】是修订级别,【I】是标识符权限值,【S】是次授权值。SID可以用以下符号写成:
S-1-4138-86
在此示例中,SID的修订级别为1,标识符权限值为4138,一个次授权值为86。
直接应用程序不需要操纵SID。以下Win32函数提供了使用SID所需的所有功能。
功能 | 描述 |
AllocateAndInitializeSid | 分配并初始化具有指定次数的子权限的SID。 |
CopySid | 将源SID复制到缓冲区。 |
EqualPrefixSid | 测试两个SID前缀值以获得相等性。SID前缀是除最后一个子权限值之外的整个SID。 |
EqualSid | 测试两个平等的SID。他们必须完全匹配被认为是平等的。 |
FreeSid | 释放先前使用AllocateAndInitializeSid功能分配的SID。 |
GetLengthSid | 检索SID的长度。 |
GetSidIdentifierAuthority | 检索指向SID的标识符权限的指针。 |
GetSidLengthRequired | 检索存储具有指定次数的子权限的SID所需的缓冲区大小。 |
GetSidSubAuthority | 检索指向SID中指定的次授权的指针。 |
GetSidSubAuthorityCount | 检索SID中子权限的数量。 |
InitializeSid | 初始化SID结构。 |
IsValidSid | 通过验证修订号是否在已知范围内,并且子权限的数量小于最大值,来测试SID的有效性。 |
LookupAccountName | 检索对应于指定帐户名称的SID。使用GetUserName函数检索当前线程的用户名。 |
LookupAccountSid | 检索与指定SID对应的帐户名称。 |
某些标识符权限是预定义的,如下表所示。
标识授权en | SID值 |
SECURITY_NULL_SID_AUTHORITY | 0 |
SECURITY_WORLD_SID_AUTHORITY | 1 |
SECURITY_LOCAL_SID_AUTHORITY | 2 |
SECURITY_CREATOR_SID_AUTHORITY | 3 |
SECURITY_NT_AUTHORITY | 5 |
还定义了以下RID值。
相对标识符权限 | 值 | 优越的权威 |
SECURITY_NULL_RID | 0 | S-1-0 |
SECURITY_WORLD_RID | 0 | S-1-1 |
SECURITY_LOCAL_RID | 0 | S-1-2 |
SECURITY_CREATOR_OWNER_RID | 0 | S-1-3 |
SECURITY_CREATOR_GROUP_RID | 1 | S-1-3 |
应用程序可以组合标识符权限和其中一个RID值来创建对所有安装都有意义的SID。例如,S-1-1-0(SECURITY_WORLD_SID_AUTHORITY和SECURITY_WORLD_RID)始终标识表示所有用户的特殊组。这些安全标识符是【通用的知名SID】.通用的众所周知的SID对使用此安全模型的所有安全系统(包括不运行Windows NT的系统)都是有意义的。AllocateAndInitializeSid功能提供了组合标识符权限和RID的简单方法。
以下是一些普遍知名的SID。
通用知名SID | 值 | 标识 |
空SID | (S-1-0-0) | 没有成员的团体当SID值不知道时经常使用。 |
世界 | (S-1-1-0) | 一个包含所有用户的组。 |
本地 | (S-1-2-0) | 登录到本地(物理)连接到系统的终端的用户。 |
创建者所有者ID | (S-1-3-0) | 要由创建新对象的用户的安全标识符替换的安全标识符。此SID用于可继承的ACL。 |
创作者组ID | (S-1-3-1) | 标识要由创建新对象的用户的主组SID替换的安全标识符。在可继承的ACL中使用此SID。 |
另一个预定义的标识符权限是SECURITY_NT_AUTHORITY(S-1-5)。此标识符权限生成不通用但仅在Windows NT安装上有意义的SID。应用程序可以使用以下RID值与SECURITY_NT_AUTHORITY来创建公知的SID。
不变 | 标识 | ||
SECURITY_DIALUP_RID (S-1-5-1) | |||
使用拨号调制解调器登录终端的用户。这是一个组标识符。 | |||
SECURITY_NETWORK_RID (S-1-5-2) | |||
通过网络登录的用户。这是一个组标识符。 | |||
SECURITY_BATCH_RID (S-1-5-3) | |||
使用批处理队列设备登录的用户。这是一个组标识符。 | |||
SECURITY_INTERACTIVE_RID (S-1-5-4) | |||
登录交互式操作的用户。这是一个组标识符。 | |||
SECURITY_LOGON_IDS_RID (S-1-5-5-X-Y) | |||
登录会话这用于确保给定登录会话中的进程只能访问该会话的窗口站对象。这些SID的【X】和【Y】值对每个登录会话不同。值SECURITY_LOGON_IDS_RID_COUNT是此标识符中的RID数(5-X-Y)。 | |||
SECURITY_SERVICE_RID (S-1-5-6) | |||
授权执行安全服务的帐户。 | |||
SECURITY_LOCAL_SYSTEM_RID(S-1-5-0x12) | |||
操作系统使用的用户帐号。 | |||
SECURITY_BUILTIN_DOMAIN_RID(S-1-5-0x20) | |||
内置系统域。 |
以下RID是相对于每个域。
RID | 标识 |
DOMAIN_USER_RID_ADMIN | 域中的管理用户帐户。 |
DOMAIN_USER_RID_GUEST | 域中的访客用户帐户。该帐户可以由没有帐户的用户自动登录。 |
DOMAIN_GROUP_RID_ADMINS | 域管理员组。此帐户仅存在于运行Microsoft LAN Manager for Windows NT而不是Windows NT系统的系统上。 |
DOMAIN_GROUP_RID_USERS | 一个包含域中所有用户帐户的组。所有用户将自动添加到此组。 |
别名是本地组,与全局组相似,但可以包含其他域的成员。其成员可以是用户或其他组。一些域相对的RID(如下列)可用于形成用作本地组的众所周知的SID。
RID | 标识 |
DOMAIN_ALIAS_RID_ADMINS | 用于管理域的本地组。 |
DOMAIN_ALIAS_RID_USERS | 代表域中所有用户的本地组。 |
DOMAIN_ALIAS_RID_GUESTS | 代表域名客户的本地小组。 |
DOMAIN_ALIAS_RID_POWER_USERS | 本地组用于表示期望将系统视为个人计算机而不是多用户工作站的用户或一组用户。 |
DOMAIN_ALIAS_RID_ACCOUNT_OPS | 本地组仅存在运行Microsoft Windows Manager for Windows NT的系统上。这个本地组允许控制非管理员帐户。 |
DOMAIN_ALIAS_RID_SYSTEM_OPS | 本地组仅存在运行Microsoft Windows Manager for Windows NT的系统上。本地组执行系统管理功能,不包括安全功能。它建立网络共享,控制打印机,解锁工作站,并执行其他操作。 |
DOMAIN_ALIAS_RID_PRINT_OPS | 本地组仅存在运行Microsoft Windows Manager for Windows NT的系统上。此本地组控制打印机和打印队列。 |
DOMAIN_ALIAS_RID_BACKUP_OPS | 用于控制文件备份和还原权限分配的本地组。 |
DOMAIN_ALIAS_RID_REPLICATOR | 负责将安全数据库从主域控制器复制到备份域控制器的本地组。 |