Windows访问控制 -- SID

这篇具有很好参考价值的文章主要介绍了Windows访问控制 -- SID。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Windows访问控制是一个比较大的题目,因此计划用一系列的文章简单谈一下这个。本篇是开篇,介绍SID。

Windows访问控制定义

Windows访问控制的含义可以参考MSDN的描述:Access control refers to security features that control who can access resources in the operating system. Applications call access control functions to set who can access specific resources or control access to resources provided by the application Access Control (Authorization) 。从上述的描述中,我们可以看出访问控制主要是Windows提供了一个机制用来控制谁可以访问特定的资源,因此本系列所描述的访问控制大部分是对于资源(或者说是安全对象)的访问控制。
考虑资源访问控制这句话,我们需要考察四个点:

  1. 资源的定义;
  2. 资源的属主;
  3. 资源的受访问权限如何定义;
  4. 用户或者说是进程(线程)如何获取获取对资源的访问权限。

另外我们之所以说本系列所描述的访问控制大部分是对于资源(或者说是安全对象)的访问控制,是因为在实际的编码过程中,执行系统管理任务也是访问控制模型的一部分,也就是特权(priviledge),而这块内容也会在后续的文章中讲到。
熟悉Linux的同学会发现关于资源属主、SID,特权在Linux中也有类似的概念,后续我写Linux访问控制时会再说明对比。

资源定义

资源或者更准确的名称可以叫安全对象(secure object),我个人的理解时创建时可以使用安全描述符(security description)控制访问权限的的对象。例如文件、进程、线程、信号量等内核对象。
但是我个人觉得除了这些内核对象,窗口等用户对象也可以算作资源的一种。基于以下两个原因:

  1. Windows本身提供了一些安全机制保证这些用户对象的安全性,例如无法跨session访问;
  2. Windwos提供了一些API(UIPI)来供开发者加强这些对象的安全性,如果控制窗口是否可以接受低完整性进程的窗口消息。

所以在本系列中我也会大致介绍用户对象的一些安全函数及机制。

SID的含义及格式

SID在MSDN中的定义如下:A security identifier is used to uniquely identify a security principal or security group. Security principals can represent any entity that can be authenticated by the operating system, such as a user account, a computer account, or a thread or process that runs in the security context of a user or computer account.What are security identifiers?
可以看出SID在系统中唯一地标识了某个安全实体或者安全组,也就是说我们的用户账户,用户组等都有一个SID关联,并且这个SID至少能保证在当前系统中是唯一的。
Windows中资源的属主概念是通过SID实现的,因为SID可以唯一地标识某个安全实体。
打开CMD,执行 whoami /all,可以看到当前你正在登录使用的账户的SID及组信息,以下是在我计算机中的输出:
Windows访问控制 -- SID

whoami /all的输出包含三部分:用户名及SID,用户所属的组及当前账户的特权。
根据MSDN的描述,SID的组成格式为 S-R-X-Y1-Y2-Yn-1-Yn,其中S代表当前串为SID,R代表SID版本(revision level),X代表权限级别,Y1,Y2…Yn子权限级别。以上图中几个SID为例:

S-1-5-21-304837936-1571026108-1873824453-1001

  1. 1代表版本,目前SID所有的版本应该都是1;
  2. 21代表权限级别,通用的权限级别如下图:Windows访问控制 -- SID
    SID中的5即NT Authority;
  3. 21-304837936-1571026108-1873824453-1001即子权限级别:
    a. 21-304837936-1571026108-1873824453是domain 标识符,唯一地标识当前系统的domain;
    b. 1001是RID(relative ID),表示当前domain中的相对ID,类似相对路径的概念;
    c. 21是Win预定义的值,查看 winnt.h 我们可以看到 #define SECURITY_NT_NON_UNIQUE (0x00000015L),这个值的含义是SID值通过最后添加的RID值而变得唯一。这个很好理解,你尝试在你机器中创建几个账户就会发现,所有账户的SID大部分字段都相同,只有RID在变化,这也就是NON_UNIQUE的含义;
    d. 查看winnt.h,可以看到如下定义:#define SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT (3L),也就是说在21(NON_UNIQUE)的情况下,子权限的数量为3(去除21这个权限级别),也就是SID串中的 304837936-1571026108-1873824453,这三个数值为随机数,在系统首次被安装后生成;
    e. 用户自己创建的账户据说RID是从1000开始,但是我测试的所有机器都是1001开始,有点疑惑。
    接下来我们看看当前账户所属某个组的SID的分析:
    BUILTIN\Administrators 别名 S-1-5-32-544 只用于拒绝的组
    组名是 BUILTIN\Administrators ,标识其为内建的管理员组;
    S-1-5的含义不变,32的定义为 SECURITY_BUILTIN_DOMAIN_RID,也就是内建组;544定义为
    DOMAIN_ALIAS_RID_ADMINS,就也是管理员组。所以当前SID代表内建的SID。
    当时当前组的最后一部分为 只用于拒绝的组,这是因为我在执行whoami时没有打开UAC,所以当前用户是不具备管理员权限的,当打开UAC再执行命令就会看到 启用的组。这个设计是基于安全的考虑,即某个用户是管理员组内的,但是却不具备管理员权限。
    以上对whoami输出的简单分析,我们可以察觉,某个用户所具备的权限是基于其属于哪些组及特权决定的,单一的账户SID只是一个标识符,不具备任何魔力。

其他

我们可以打开任务管理器,查看当前系统中运行的进程及对应的账户,以下是我机器中部分进程及账户:
Windows访问控制 -- SID
Windows访问控制 -- SID
Windows访问控制 -- SID
Windows访问控制 -- SID
除了我的用户账户(81337)以后,还有Local Service,Network Service, System三个账户也在运行。这三个账户属于内建账户,查看MSDN我们可以看到:
Windows访问控制 -- SID
同样我们打开注册表,定位到 HKEY_USER目录,可以看到
Windows访问控制 -- SID
也就是说所有正在运行的账户都加载了对应账户注册表。这些账户注册表所在的位置可以查看:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist,以下是我机器中的部分数据:
Windows访问控制 -- SID
另外之所以要创建这么多内建SID的原因也是基于安全的考虑,可以最小化地定制其权限,也就是定制其所属的组及特权,防止权限的滥用。文章来源地址https://www.toymoban.com/news/detail-439995.html

到了这里,关于Windows访问控制 -- SID的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决Github访问比较慢的办法

    目录 前言 一、Github出错的原因 二、解决办法 1.修改hosts文件        1.1  打开文件:        1.2  添加ip地址        1.3  dns刷新 2.Github镜像 总结          无论是在学习中还是在以后的工作中,我们都需要通过做一些经典的项目来巩固自己的计算 机基础知识,github是一个

    2024年02月11日
    浏览(14)
  • 【PID控制与模糊PID控制的比较】(带仿真和代码链接)

    目  录 一、序言 二、PID控制器的设计         1.PID控制原理图         2.PID控制器传递函数的一般表达式 三、模糊控制器的设计         1.模糊控制原理图         2.模糊控制器传递函数一般表达形式 四、系统仿真 五、总结 ——————————————

    2024年02月03日
    浏览(17)
  • Linux和Windows比较

    Linux和Windows是两种十分常见的电脑操作系统,它们都有着广泛的应用和用户群体。它们都有着广泛的应用和不同的优缺点。在这篇文章中,我们将对Linux和Windows进行比较,以便更好地了解它们之间的差异和特点。在使用过程中,有些事情可能会因操作系统不同而产生差异,以

    2024年02月12日
    浏览(9)
  • 【已成功解决】.msi文件无法打开:“无法打开此安装程序包。请确认该程序包存在,并且你有权访问它,或者与应用程序供应商联系,以确认这是一个有效的Windows Installer程序包”

    博主简介: 努力学习的22级计科生一枚~ 博主主页: @是瑶瑶子啦 所属专栏: 问题记录 之前遇到过好几次安装程序的时候,打不开.msi文件的情况,当时找了解决办法,解决了,但是忘记了。今天安装Go的开发环境的时候又遇上了。有了前几次解决问题的印象和踩的坑,这次我

    2024年02月09日
    浏览(24)
  • 【教程】一个比较良心的C++代码混淆器

    这是一个比较良心的C++代码混淆器,用于信息竞赛训练和保护代码免受抄袭。本文将介绍这个混淆器的使用方法、混淆效果和已知的一些bug。同时,我们也会给出一些示例来演示混淆器的具体操作。 在信息竞赛训练和实际开发中,保护代码的安全性和保密性非常重要。C++代码

    2024年04月17日
    浏览(5)
  • CISP——访问控制(自主访问控制和强制访问控制)

    访问控制基本概念 什么是访问控制 为用户对系统资源提供最大限度共享的基础上,对用户的访问权进行管理,防止对信息的非授权篡改和滥用 访问控制作用 保证用户在系统安全策略下正常工作 拒绝非法用户的非授权访问请求 拒绝合法用户越权的服务请求 访问控制模型 :

    2024年02月11日
    浏览(13)
  • 【工作笔记】Springboot一个比较通用的数据脱敏处理办法

            个人信息中的手机号、邮箱等属于敏感数据,其中手机号需要加密存储,邮箱可以直接存储但是在获取和展示时要做脱敏处理;         针对此类敏感数据, 介绍一种比较通用的脱敏方法。         1. 定义DataMask注解                  2. 定义DataMaskOperation接

    2024年02月03日
    浏览(9)
  • Linux与Windows:操作系统的比较与技巧分享

    🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬

    2024年02月15日
    浏览(11)
  • 微信小程序写一个比较好看的授权登录弹框

    好的,这里提供一个比较常见的小程序授权登录样式,代码如下: html ```CSS   这个样式将给小程序的授权登录添加了一层视觉效果,用户在授权登录时体验更加舒适和友好。 图下:效果图 小程序:MJ魔法AI绘图美图壁纸

    2024年02月02日
    浏览(16)
  • 访问控制模型--自主访问控制模型(基础篇)

    对于访问控制模型,大家都知道有三种,分别是“自主访问控制”、“强制访问控制”、“基于角色访问控制”,下面介绍一下自主访问控制模型。 一、访问控制三要素:主体、客体、访问控制策略 主体(Subject) 指主动对其它实体施加动作的实体 客体 (Object) 是被动接受其他

    2023年04月13日
    浏览(8)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包