第 4 章 PolicyKit

PolicyKit”实用工具是一个框架,它提供了一个为无特权程序 subjects 提供服务的特权程序(mechanisms)使用的授权 API。“PolicyKit”的相关变化或者它的系统名称“polkit”所历经的细节改变如下。

4.1. 策略配置

就这些新的特点而言,它们的授权规则现在是在 JavaScript .rules 文件中定义的。这就意味着同样的文件被用来同时定义规则以及管理员状态。这些信息之前被储存在两个不同的文件类型—*.pkla*.conf 中,它们通过使用键值对,来定义额外的本地授权。
这些新的 .rules 文件储存在两个位置;但是本地配置的“polkit”规则是储存在 /etc/polkit-1/rules.d/ 目录下的,第三方软件包则储存在 /usr/share/polkit-1/rules.d/ 中的。
目前的 .conf.pkla 配置文件与 .rules 文件保存在一起,并同时存在。考虑到兼容性的问题,红帽企业版 Linux 7 中的“polkit”进行了升级。
规则的逻辑优先级也发生了变化。“polkitd”现在按照字母顺序从 /etc/polkit-1/rules.d/usr/share/polkit-1/rules.d 目录中读取 .rules 文件。如果有两个名字相同的文件,相较于 /usr 中的文件,/etc 中的文件则将优先进行处理。除此之外,/etc/polkit-1/rules.d/49-polkit-pkla-compat.rules 文件应用现有规则。因此,只要文件名在字母顺序中排在 49-polkit-pkla-compat 之前,它们就可以由 .rules 在/usr 或者 /etc 中重写。确定您的旧规则没被改写的最简单的方法就是命名所有其它 .rules 时,起始数字都大于49。
以下是一个 .rules 文件的例子。它为 storage 群组创建了一个允许在系统设备中安装文件系统的规则。这个规则存储在 /etc/polkit-1/rules.d/10-enable-mount.rules 文件中:

例 4.1. 允许在系统设备中安装文件系统

polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.udisks2.filesystem-mount-system" &&
        subject.isInGroup("storage")) {
        return polkit.Result.YES;
    }
});

更多信息请参见:

  • polkit(8) – 描述 JavaScript 规则和优先规则的手册页。
  • pkla-admin-identities(8) 和 pkla-check-authorization(8) – 分别是 .conf.pkla 文件格式的资料说明手册页。