【windows 访问控制】六、安全标识符(SID Security Identifiers)
安全标识符(SID Security Identifiers)
SID是用来标识安全主体。就是给安全主体一个唯一的ID。用户层面通过用户账户名识别,程序和资源之间通过SID识别。
什么是安全标识符?
SID (安全) 用于唯一标识安全主体或安全组。 安全主体可以表示任何可通过操作系统进行身份验证的实体,例如用户帐户、计算机帐户或在用户或计算机帐户的安全上下文中运行的线程或进程。
每个帐户或组,或在帐户的安全上下文中运行的进程都有一个由颁发机构颁发的唯一 SID,Windows域控制器。 它存储在安全数据库中。 系统生成 SID,该 SID 标识创建帐户或组时的特定帐户或组。 当 SID 用作用户或组的唯一标识符时,它永远不能再次用于标识其他用户或组。
用户每次登录时,系统会为该用户创建访问令牌。 访问令牌包含用户所属的任何组的 SID、用户权限和 SID。 此令牌为用户在此计算机上执行的任何操作提供安全上下文。
除了分配给特定用户和组且唯一创建的特定于域的 SID 之外,还有可标识通用组和通用用户的已知 SID。 例如,Everyone 和 World SID 标识包含所有用户的组。 众所周知的 SID 的值在所有操作系统中保持不变。
SID 是安全模型的基本Windows构建基块。 它们在 Windows Server 操作系统的安全基础结构中处理授权和访问控制技术的特定组件。 这有助于保护对网络资源的访问,并提供更安全的计算环境。
本主题中的内容适用于运行受支持版本的 Windows 操作系统的计算机,如本主题开头的"适用范围"列表中所指定。 ****
安全标识符如何工作
用户通过使用帐户名称来引用帐户,但操作系统内部指使用其安全标识符或 SID 在帐户安全上下文中运行的帐户 (进程) 。 对于域帐户,安全主体的 SID 创建方法为:将域的 SID 与帐户的相对标识符相连接 (,) 的 SID。 SID 在其作用域内是唯一 (或本地) ,并且永远不会重复使用。
创建帐户或组时,操作系统将生成标识特定帐户或组的 SID。 本地帐户或组的 SID 由计算机上本地安全机构 (LSA) 生成,并与其他帐户信息一起存储在注册表的安全区域中。 域帐户或组的 SID 由域安全机构生成,并作为 User 或 Group 对象的属性存储在 Active Directory 域服务中。
对于每个本地帐户和组,SID 对于创建它的计算机是唯一的。 计算机上没有两个帐户或组共享同一 SID。 同样,对于每个域帐户和组,SID 在企业中都是唯一的。 这意味着,在一个域中创建的帐户或组的 SID 将永远不会与在企业内任何其他域中创建的帐户或组的 SID 匹配。
SID 始终保持唯一。 安全机构从不发出两次相同的 SID,并且从不对已删除的帐户重复使用 SID。 例如,如果某个用户在域中拥有用户帐户Windows她的工作,则管理员会删除其 Active Directory 帐户,包括标识该帐户的 SID。 如果稍后她回到同一公司的不同工作,管理员将创建一个新帐户,并且 Windows Server 操作系统将生成一个新的 SID。 新 SID 与旧 SID 不匹配;因此,用户不会从旧帐户访问任何帐户转移到新帐户。 她的两个帐户代表两个完全不同的安全主体。
SID的结构
1、本地SID结构
由于本地不存在域服务器,所以就把一系列子身份验证值全部省略了,留下内置域标识符(32)和RID( 544)。
2、域中SID结构
标识符颁发机构有:
Authority
1 – World Authority
2 – Local Authority
3 – Creator Authority
4 – Non-unique Authority
5 – NT Authority
9 – Resource Manager Authority
如何获取SID
1、获取windows 10操作系统的 SID,已经测试过,是有些的
1.简单点的:
System.Security.Principal.WindowsIdentity currentUser = System.Security.Principal.WindowsIdentity.GetCurrent();
string sid = currentUser.User.ToString();
2、cmd 命令行获取SID
查看计算机名字:whoami
查看登入账户名字的SID:whoami /user
查看本地组的SID:whoami /groups
查看你本地计算机用户SID: WMIC useraccount get name,sid
枚举本地出组SID:wmic group get Caption, InstallDate, LocalAccount, Domain, SID, Status
安全主体(security principal)?
安全主体是任何可通过操作系统进行身份验证的实体,例如用户帐户、计算机帐户、在用户或计算机帐户的安全上下文中运行的线程或进程,或者这些帐户的安全组。 安全主体一直是控制对计算机中安全资源Windows的基础。 每个安全主体在操作系统中由 SID (唯一) 。
个人理解:不管是从本地还是远程 登入操作系统的的账户或程序都是安全主体
身份验证
身份验证是验证对象或人员身份的过程。 当你对某个对象进行身份验证时,目的就在于验证该对象是否为正版。 当你对某个用户进行身份验证时,其目标是验证该用户是否不是冒名顶替者。 因此,身份验证不能保证对资源的访问权限,也不能授权使用资源。
在网络环境中,身份验证是向网络应用程序或资源证明身份的行为。
个人理解:登入操纵系统、服务器、应用软件的过程就是身份验证的过程,登入成功就是验证成功。
计算机帐户:加入域服务器的计算机,在域服务器中会生成一个账户就叫计算机帐户
用户帐户:每个安全主体都分配有一个唯一标识符,它将在其整个生命周期内保留。 本地用户帐户和安全组是在本地计算机上创建的,它们可用于管理对该计算机上资源的访问权限。 本地用户帐户和安全组由本地计算机上安全帐户管理器 (SAM) 管理。
window内置的安全主体:
虽然内置安全主体有很多,但正常能在权限设置中使用到的并不多,所以下面仅说明其中几个较重要的:①Anonymous Logon:任何没有经过Windows XP验证程序(Authentication),而以匿名方式登录域的用户均属于此组;②Authenticated Users:与前项相反,所有经过Windows XP验证程序登录的用户均属于此组。设置权限和用户权力时,可考虑用此项代替Everyone组;④DIALUP:任何通过拨号网络登录的用户;⑤Everyone:指所有经验证登录的用户及来宾(Guest);⑥Network:任何通过网络登录的用户;⑦Interactive:指任何直接登录本机的用户;⑧Terminal server user:指任何通过终端服务登录的用户。
来源:百度百科