Win32 Security 入门 序言

最近看了一下Marshall Brain和Ron Reeves合著的《 Win32 System Services: The Heart of Windows98 and Windows2000》,讲Win32系统编程的。觉得此书虽然老点,不过写得即易懂又深入,给的代码不仅很多而且总体上也简单。这本书也有中文版,可惜已经绝版了。
       
  我现在要写的这些东西,可以说是对此书的笔记和备忘录。
  
  现在来对Win32的Security做一个大概的了解。
  
       一:Win32下的Security能做什么?
       对Win32下的所有对象(比如线程,互斥,管道,文件,注册键),利用Security,你可以让它们在日志里创建记录,可以定义它们的访问类型,规定哪些用户可以访问和使用它们。
 所以有了Security,Win32可以让你给某个对象以精确的防护,也可以让你监视和记录某个对象是如何使用的。
  
 二:Win32下的Security的面貌是什么?
     
    如果把Win32系统比做一个拥有很多房间的大楼,你只有想办法得到合法的口令,你才能进入这个大楼,并得到保安给你的一串钥匙。一旦进去了,你就可以试着用钥匙来进入你感兴趣的房间。
  一些房间是从来不锁的,你不用钥匙都能进去;而别的房间都是锁的,你只有用相应钥匙来打开房间。如果有的房间你所有的钥匙都不匹配,那么你只能干瞪眼了。如果进入了房间,你是只能浏览不可乱动还是为所欲为无法无天,都取决于你的职位高低和分配到的权限。在Win32里,这些房间就是各种各样的对象: 文件、注册键、线程,互斥、等等。
  你甚至可以为这些“房间”都配上“岗哨”,来监视谁进入了“房间”,他们在“房间”里做了些什么。这些“岗哨”,其实就是Win32下自带的“审计(auditing)”功能。

三:Win32系统下Security的运作——令牌简介
  当你登入Win32系统,系统会给你分配一个Access Token(令牌)。这个令牌就相当于钥匙串,你可以用它来访问所有的受保护的对象,至于访问能否成功,要看你得到的令牌的威力如何。值得注意的是:只要是你所创建的进程或是你运行的程序,都会得到该令牌的一份拷贝。
        令牌只做两件事。第一,它会确认你的身份。如果你用“Smith”这个用户名来登录系统,那么你的令牌就会包含“Smith”的身份信息。除此之外,你的令牌还会确定你所属的是哪些组。
    
     第二:你的令牌还会包含你的“用户权限”及“特权”。比方说,系统管理员可以有设置系统时间的特权,但一般的用户就不可以;某些用户有关闭系统的特权但别的用户都没有。根据在你所属的组里所找到的各种各样的权限设置,以及系统管理员赋于你的特权,Win32系统在你的令牌里开列了一张权限清单。


四:系统资源的“锁”——Security Descriptor(安全描述符)
      如果说令牌相当于钥匙串,那么对各种各样的系统资源和对象来说,就必然要配把“锁”来做相当的防护。(配不配“锁”,配个什么样“锁”,那是程序员的自由意志。)这些“锁”,Win32里被称作“Security descriptor(安全描述符)”。当你调用那些Create函数来创建系统对象时使用了“security descriptor”,你就等于为这些对象上了锁。下列的对象都可以“上锁”:
  文件,目录,注册键,进程,纯种,互斥,事件,命名管道,Mailslots,文件映射,私有对象……等等。
  
  为了给对象“上锁”,当你创建对象时,你必须创建一个“security descriptor”,并“交给”该对象。很多CreateFile或CreateThread这样的Win32 API调用,都为security-attributes参数传递了一个空值,意味着这些API调用将创建“默认的security descriptor”来允许你访问所创建的对象。

五:安全描述符的构造
  一个安全描述符包含了四个部分:
    1:用户标识(Owner identifier)。
    2:主组标识(primary group identifier)。
    3:SACL(system access control list),跟“审计”信息有关。
    4:DACL(discretionary access control list),用户权限列表。

  DACL,是系统对象的“锁”的重点。它决定了哪些用户可以访问该对象而哪些不能。它其实是一张列表(Access control list),开列了一些条目(Access control entries),单个这样的条目,简称为ACE。每个ACE,都包含着单个用户ID或组ID,以及早就分配给这个用户或组的权限。比如说,如果某个对象是文件,并且用户“Smith”已经被允许读取这个文件,这个文件就会有一个Security descriptor,该security Descriptor里有DACL,DACL有一个ACE,这个ACE指示用户“Smith”拥有读取该文件的权限。
  SACL,也包含了一些ACE。但是和DACL的ACE不一样,它们只决定谁将被监视,为什么被监视。它们被称作(audit-access ACE)。
  ACE,由三部分组成:SID,访问掩码(Access Mask),ACE头(ACE head)。SID,是专门用来独一无二地标识系统里的那些用户和组的标识符,一般存放在注册表里。ACE头,决定了ACE的类型是ALLOWED类型还是DENIED类型。访问掩码,是一个32位的掩码,决定了用户的访问权限。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值