Authorization Services Programming Guide 学习

来源:互联网 发布:淘宝二手买到假货 编辑:程序博客网 时间:2024/05/19 02:04
Authorization Services Programming Guide




1. Concept
Mac OS X kernel从BSD发展而来,继承了*nix下经典的user-adn-owner-security模型。相比CLI,苹果的界面需要更为复杂的授权机制。于是他引入了Security Server这个核心服务。
Mac OS X是多用户环境,Authorization的过程其实就是用户身份切换。首先你需要创建一个authorization reerence,它相当于本地应用程序的一个令牌。然后先Security Server申请一个authorization session,申请时可以指定需要什么样的权限等,当验证成功后,在Security Server会有一个session,它也是有一定的超时。最后,你拿着这个令牌就能够调用一些Authorization Services function.


2. 应用场景
通常,有三种应用场景会涉及到authorization
1. Self-Restricted Applications
这类程序常常在界面中有一个锁的图标,主要是用来验证用户操作可信度。打个比方,在QQ登陆后,如果你要改密码,那么它会要求你先输入一遍密码,目的就是防止他人趁你上厕所时偷改你的密码(开玩笑了)。使用系统的验证方法当然要比自己写的可靠得多。
2. Factored Applications
无一例外,这类程序都要执行某个操作,且必须是管理员的身份。它将创建一个新的进程,称之为helper tools。验证的过程通常是在主程序里做,再把令牌由特殊的方式传递给helper tools。尽管在helper tools里验证逻辑也正常,但缺陷是验证显示的路径和图标是help tools的,并且键盘焦点也会有问题。
helper tools常常是需要root权限的,关于提权也有不同的方法
方法一:主程序让helper tools以root为ruser方式运行起来。缺点是,如果有恶意程序把这个helper tools替换了,后果很严重。
方法二:helper tools设置了setuid bit以便自己能够改变到root这是*nuix常用的方法,安全性也比较好。当然,前期工作会稍微麻烦点,因为需要把owner设为root,而且复制是setuid bit不会重新设置。因此,可能需要用户重新安装。
方法三:利用主进程传入的external令牌来提升(用方法一来运行自己)。这种方式安全性高,操作性强。推荐使用。

3. Installers
安装程序只运行一次,故危险性会少很多。这时多采用场景2的第一种方式,一般用脚本就可以做到。


3. Rights

创建令牌时,一个很重要的参数即为申请运行的right。它是一个类java包格式的字符串(带命名空间语义),在申请时,会在Policy Database中寻找对应的提升需求。比如,如果要运行helper tools,则是system.privilege.admin。下面是一些预定义的权限

#define kAuthorizationEnvironmentUsername "username"   //指定某一用户登陆

#define kAuthorizationEnvironmentPassword "password"

#define kAuthorizationEnvironmentShared "shared"

#define kAuthorizationRightExecute "system.privilege.admin"

#define kAuthorizationEnvironmentPrompt  "prompt"

#define kAuthorizationEnvironmentIcon  "icon"

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Courier; color: #3366cc}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Courier; color: #666666}span.s1 {color: #666666}span.s2 {color: #3366cc}

原创粉丝点击