dbus 和 policykit 原理篇

policykit 机制原理

使用 policykit 一般都有一个dbus daemon程序去管理对应一系列的操作,当有程序来请求这些操作(方法)时,这个daemon程序会根据预先设定好的配置来确定是否要求额外的权限,需要额外的权限会去向libpolkit验证当前操作是否获得了权限,如果当前调用已经取得权限了,则调用顺利通过,否则返回无权限的提示或异常。下面以mount()为例。

 

 

 

当文件管理器向org.freedesktop.Hal请求一个Mount()的方法调用时,

org.freedesktop.Hal 知道这是一个需要root privilege 操作(如果不需要,则直接调用通过),

通过libpolicykit 会向认证数据库(Authorization Database) 检测当前操作是否有足够的权限。


如果没有权限,org.freedesktop.Hal 拒绝执行请求操作并会通知程序没有权限。

这时程序应当通过 org.freedesktop.PolicyKit.AuthenticationAgent (一个dbus daemon)获取相应的权限,

 

当程序向org.freedesktop.PolicyKit.AuthenticationAgent請求时,这时就会弹出口令验证对话框,当程序通过验证时,org.freedesktop.PolicyKit.AuthenticationAgent会向 Authorization Database 写入cookie,而cookie的有效长短会根据.policy文件配置而变化。

当程序完成验证后,再去請求mount的操作时,org.freedesktop.Hal libpolkit 会再次向Authorization Database检测相应权限,

这时由于org.freedesktop.PolicyKit.AuthenticationAgent授于了当前操作的权限,

所以这次验证通过,这时org.freedesktop.Hal也会执行请求的操作,并返回成功。

 

原理也就这些了,下面通过来写一个使用policykit服务的实例来掌握一下。

 

posted @ 2009-05-24 05:49  joe.zhou  阅读(3611)  评论(1编辑  收藏  举报