Nt/2000/xp平台下的存储控制模型(Access Control Model)
Nt/2000/xp平台下的存储控制模型(Access Control Model)
By leezy_2000 2003-7-16 15:59
(-)
鉴于在nt类操作系统下开发程序时有可能涉及操作注册表,读写文件和操控服务等内容,而为使这类程序在不同帐户下皆可正确运行就需要了解nt类操作系统的存储控制模型,所以才写这篇文章。这篇文章所涉及大部分内容可在msdn找到相关说明,小部分内容来自个人经验。错漏之处还望斧正。
基本概念及缩写:
SID(security identifier):用于唯一标识用户或组的变长结构
access token:存储令牌包含每个登录帐户的安全信息。每当用户登录系统时,系统为其建立一个access token,而此用户所执行的进程拥有此access token的一份拷贝。Access token 中包含的内容有
l User SID
l Group SIDs
l Privilege Information
l Other access Information
ACE( access control entry) : 包含一系列存储权限及谁拥有这种权限的说明。
ACL(access control list): 一个ACE的链表,用于说明某个安全对象可以被谁以什么样的权限进行操作。
DACL(discretionary access control list):由安全对象的拥有者(即创建者)控制的ACL。
Trustee: a trustee is the user account, group account, or logon session to which an access control entry (ACE) applies
利用这些概念,我们来看一下,对安全对象进行操作要经过那些步骤。(见图1)
这个过程是这样,系统把线程的Access Token的trustee同DACL中每一个ACL的trustee相比较直到满足下列某一个条件:
l 一个ACE清楚的表明某项操作对这个Access Token无效。比如Thread A的访问过程。
l 一个ACE清楚的表明能够接受这个Access Token所要求的操作。比如Thread B要求进行Write ,Read or Execute操作。
l 所有ACE已被检查过但仍然有一项或多项权限没有被清楚的允许。此时称做隐式禁止(implicitly denied)。
另外,如果ACE在DACL中有不同的排列顺序,对于某个Access Token,可能有完全不同的结果。比如ACE 2排在ACE 1 前面的话,Thread A将可以对此对象进行写操作。
(图1 from msdn)
附1:
关于C2-Level Security的一些重要指标
l 必须能通过操控个人用户或用户组的权限来控制对资源的访问。
l 内存需要受到保护,一个进程所释放的内存不能被另外的进程读到。同样文件系统也要保证被删除的文件不能被读到。
l 用户能够用唯一的方式标识自己,All auditable actions must identify the user performing the action
l 系统管理员要能够对安全事件进行检查。但安全事件的存取权限要由authorized administrators进行设定。
l 系统要能够保证自己不被干扰。比如:不允许对正在运行的系统及相关的系统文件进行调整。
- · 数据结构学习(C++)——递归【2】(4)
- · 关于异常的使用心得
- · 在VC中调用DirectShow全屏播放视频
- · 3D图形渲染通道负载优化的几种方法
- · 数据结构学习(C++)——递归【3】(1)
- · 旧爱如梦 (harrymeng旧书推荐)
- · ESMTP身份验证机制探索手记
- · 数据结构学习(C++)——递归【3】(2)
- · “扫雷”游戏的幕后
- · vc dll编程
- · Visual C++ 6.0的文档/视结构
- · VC增加自定义消息
- · 和GUI有关的各种对象
- · 文档 视图 框架窗口间的关系和消息传送规律
- · 线程
- · 特权提升
- · “瑜珈山夜话” ---- 闲谈“封装与抽象”
- · 用DEF文件从DLL中导出C++类
- · “瑜珈山夜话”--- 寻根究底谈“继承”(一)
- · 软件解密技术研究
- · “瑜珈山夜话”--- 参考资料
- · 写扫雷的一点感想(初学的朋友可以看看)
- · 运用VC或Java对Office进行编程操作
- · 可以动态读入系统所支持的数据库
- · 向你的程序中添加多语言支持
- · 计算24点
- · DSP应用实例(一)--轻松实现BT多点下载
- · DirectShow应用程序设计介绍(翻译)
- · 一个俄罗斯方块游戏源程序
- · 数据结构学习(C++)——二叉树【1】
- · 闲侃名家名作
- · 在编程中调用OLEDB的数据连接属性对话框
- · JIURL玩玩Win2k内存篇 Page Frame Number Database
- · JIURL玩玩Win2k内存篇 LookasideList
- · JIURL玩玩Win2k内存篇 内存共享(一) ProtoPTE
- · JIURL玩玩Win2k内存篇 内存共享(二) CopyOnWrite
- · JIURL玩玩Win2k 对象
- · JIURL玩玩Win2k进程线程篇 EPROCESS
