翻译状态:本文是 Polkit 的翻译。上次翻译日期:2018-10-21。如果英文版本有所更改,则您可以帮助同步翻译。

来自 polkit 主页:

polkit 是一个应用程序级别的工具集,通过定义和审核权限规则,实现不同优先级进程间的通讯:控制决策集中在统一的框架之中,决定低优先级进程是否有权访问高优先级进程。

Polkit 在系统层级进行权限控制,提供了一个低优先级进程和高优先级进程进行通讯的系统。和 sudo 等程序不同,Polkit 并没有赋予进程完全的 root 权限,而是通过一个集中的策略系统进行更精细的授权。

Polkit 定义出一系列操作,例如运行 GParted, 并将用户按照群组或用户名进行划分,例如 wheel 群组用户。然后定义每个操作是否可以由某些用户执行,执行操作前是否需要一些额外的确认,例如通过输入密码确认用户是不是属于某个群组。

Contents

  • 1安装

    • 1.1身份认证组件
  • 2配置
    • 2.1操作
    • 2.2认证规则
    • 2.3管理员身份认证
  • 3范例
    • 3.1调试/输出
    • 3.2禁用挂起和休眠
    • 3.3跳过口令提示
      • 3.3.1全局规则
      • 3.3.2针对特定的动作设置
      • 3.3.3Udisks
    • 3.4允许一般用户管理某个 systemd 单元
  • 4参阅

安装

安装 polkit 包。

身份认证组件

Polkit 的权限管理是基于用户或群组进行配置,而身份认证组件的作用就是让会话用户证明自己是某个用户或属于某个群组。

图形化环境Cinnamon、Deepin、GNOME、GNOME Flashback、KDE、LXDE、LXQt、MATE、theShell 和 Xfce 各自都已有认证组件。请按照下列清单确认安装了对应的身份认证组件,并且在登录时 自动启动 它。

其他桌面环境需要从下列实现中选用一种,polkit 软件包提供了一个名为“pkttyagent”的基于文本方式的认证代理,作为后备方案。

  • lxqt-policykit,提供了 /usr/bin/lxqt-policykit-agent
  • lxsession,提供了 /usr/bin/lxpolkit
  • mate-polkit,提供了 /usr/lib/mate-polkit/polkit-mate-authentication-agent-1
  • polkit-efl-gitAUR,提供了 /usr/bin/polkit-efl-authentication-agent-1
  • polkit-gnome,提供了 /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
  • polkit-kde-agent,提供了 /usr/lib/polkit-kde-authentication-agent-1
  • ts-polkitagentAUR, 提供了 /usr/lib/ts-polkitagent
  • xfce-polkit-gitAUR,提供了 /usr/lib/xfce-polkit/xfce-polkit

配置

警告: 不要更改包文件的默认权限,因其可能在软件包更新时被覆盖。

Polkit 定义了两种不同的内容:

  • 操作(Actions):在 /usr/share/polkit-1/actions 中定义,文件是 XML 格式,以 .policy 结尾。每个操作都有一个默认的权限集合(例如,你需要标识为管理员以使用 GParted 操作)。默认值是可以修改的,但是不应该通过修改操作文件实现。
  • 认证规则(Authorization rules):用 JavaScript 语法定义,文件以 .rules 结尾。有两个目录可放置规则文件:第三方的包将文件放置在 /usr/share/polkit-1/rules.d(尽管很少见),本地配置应该放置在 /etc/polkit-1/rules.d

Polkit 没有取代系统已有的权限系统,而是在已有的群组和管理员上进行管控。.rules 文件指定了一个用户的子集合,涉及到一个或多个操作文件中指定的操作,并规定这些用户可以执行哪些操作,需要满足哪些限制。举例来说,GParted 默认规则要求所有用户认证为管理员之后才能使用,可以用规则文件修改默认规则,规定某个用户不需要管理员身份认证就可以执行操作,也可以完全禁止某个用户使用 GParted。

注意: 如果用户不是通过 polkit 申请权限,比如通过命令行直接以 root 权限执行,这里的禁止设定就无法起作用。所以应该用 polkit 给低权限用户更高的权限,而不应该用 polkit 限制高权限用户可以执行的操作。出于安全考虑,sudoers仍然是一种方法。

操作

提示: 要在图形程序中显示 Polikit 操作,可以安装软件包 polkit-explorerAUR 。

polkit 中的可用操作是安装的软件包决定的。有些在多种桌面环境下都可以使用,文件命名为 (org.freedesktop.*),有些只能在特定桌面下使用,文件命名类似 (org.gnome.*),有些操作是单个程序特有的,命名类类似 (org.archlinux.pkexec.gparted.policy)pkaction 命令会显示所有定义在 /usr/share/polkit-1/actions 操作。

通过下面几个常用的操作类型,可以了解 polkit 到底能做什么:

  • systemd-logind (org.freedesktop.login1.policy) 定义用户是否有权限进行关机、重启、挂起、休眠等操作,即使有其它用户登录时, polkit 也能管控某个用户的上述权限。
  • udisks (org.freedesktop.udisks2.policy) 定义文件系统挂载、加密磁盘打开等操作。
  • NetworkManager (org.freedesktop.NetworkManager.policy) 定义网络打开和关闭, wifi 和移动网络间的切换。

每个操作都定义在 .policy 文件的 <action> 标签中。例如 org.archlinux.pkexec.gparted.policy 包含一个操作:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC"-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN""http://www.freedesktop.org/software/polkit/policyconfig-1.dtd">
<policyconfig><action id="org.archlinux.pkexec.gparted"><message>Authentication is required to run the GParted Partition Editor</message><icon_name>gparted</icon_name><defaults><allow_any>auth_admin</allow_any><allow_inactive>auth_admin</allow_inactive><allow_active>auth_admin</allow_active></defaults><annotate key="org.freedesktop.policykit.exec.path">/usr/bin/gparted</annotate><annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate></action></policyconfig>

id 属性是发送给 D-Bus 的命令,message 属性用来在身份认证时向用户解释当前动作,icon_name 是图标。

defaults 标签下定义权限。包含三种设置:allow_anyallow_inactive 和 allow_active。 Inactive 会话是远程会话(例如 SSH、VNC 等。)active 会话是本地终端或图形界面直接登录机器的会话。allow_any 同时包含两种会话。

对每个设置,都有如下选项:

  • no:不允许用户执行操作,不需要身份认证。
  • yes:用户可以不进行认证就执行操作。
  • auth_self:需要认证,但是用户可以只输入自己的密码,不需要属于管理员。
  • auth_admin:需要用户认证为管理员。
  • auth_self_keep:和 auth_self 类似,认证状态会保持一段时间。
  • auth_admin_keep:和 auth_admin 类似,认证状态会保持一段时间。

这些设置是默认设置,只要没有被配置规则覆盖,适用于所有用户。

从上面的 Gparted 操作示例可以看出,不管用户是本地还是远程,都需要先认证为管理员之后才能使用 GParted。

认证规则

认证规则可以覆盖默认的设置,个人使用的单个系统设置,应该放到 /etc/polkit-1/rules.d 目录。

addRule() 方法可以增加一个函数,输入操作和用户,只要进行权限检查,这个函数就会被调用。所有函数会按添加顺序依次调用,只要遇到第一个 return 返回。所以,要将规则放到其它规则前,需要将规则文件放到 /etc/polkit-1/rules.d 的其它规则之前,最早的检查是 00-early-checks.rules

.rules 文件的层级是完全自解释的:

/* Allow users in admin group to run GParted without authentication */
polkit.addRule(function(action, subject) {if (action.id == "org.archlinux.pkexec.gparted" &&subject.isInGroup("admin")) {return polkit.Result.YES;}
});

上面函数检查操作 ID (是否 org.archlinux.pkexec.gparted),再确认用户群组(是否属于 admin ),如果是,返回 "yes"。

管理员身份认证

addAdminRule() 方法会添加一个在每个管理员认证时被执行的函数。此函数用来规定什么用户可被视作系统管理员。函数的输入是操作和用户,函数按顺序依次执行,直到第一个 return。

系统默认的配置位于 50-default.rules,如果要修改这个值,需要把自定义的身份确认函数加到 50 之前,比如 40-default.rules

/etc/polkit-1/rules.d/50-default.rules
polkit.addAdminRule(function(action, subject) {return ["unix-group:wheel"];
});

需要配置的是 return 返回值:输入谁的密码之后就被认为是系统管理员。如果用户自己属于管理员群组,只需要输入自己的密码。如果只有 root 是管理员,需要输入 root 密码。

Arch 的默认设置中会将所有 wheel 群组用户视作管理员,如果用下面的规则文件,那么用户需要输入 root 用户密码才会被认为是管理员。

/etc/polkit-1/rules.d/49-rootpw_global.rules
/* Always authenticate Admins by prompting for the root* password, similar to the rootpw option in sudo*/
polkit.addAdminRule(function(action, subject) {return ["unix-user:root"];
});

范例

调试/输出

下面的规则会输出关于所请求的访问的详细信息。

/etc/polkit-1/rules.d/00-log-access.rules
polkit.addRule(function(action, subject) {polkit.log("action=" + action);polkit.log("subject=" + subject);
});

禁用挂起和休眠

下面规则禁止所有用户通过 Polkit 进行挂起和休眠。

/etc/polkit-1/rules.d/10-disable-suspend.rules
polkit.addRule(function(action, subject) {if (action.id == "org.freedesktop.login1.suspend" ||action.id == "org.freedesktop.login1.suspend-multiple-sessions" ||action.id == "org.freedesktop.login1.hibernate" ||action.id == "org.freedesktop.login1.hibernate-multiple-sessions"){return polkit.Result.NO;}
});

跳过口令提示

要模拟 sudo 的 NOPASSWD 选项,完全根据 user/group 身份进行认证,可以在 /etc/polkit-1/rules.d/ 中创建规则进行设置。参考:示例.

全局规则

创建下列文件:

/etc/polkit-1/rules.d/49-nopasswd_global.rules
/* Allow members of the wheel group to execute any actions* without password authentication, similar to "sudo NOPASSWD:"*/
polkit.addRule(function(action, subject) {if (subject.isInGroup("wheel")) {return polkit.Result.YES;}
});

请将 wheel 替换为需要的群组。 设置完成后,所有操作通过 Polkit 授权时,都不需要密码。因此,请仔细选择授权的群组。

针对特定的动作设置

创建文件:

/etc/polkit-1/rules.d/49-nopasswd_limited.rules
/* Allow members of the wheel group to execute the defined actions * without password authentication, similar to "sudo NOPASSWD:"*/
polkit.addRule(function(action, subject) {if ((action.id == "org.archlinux.pkexec.gparted" ||action.id == "org.libvirt.unix.manage") &&subject.isInGroup("wheel")){return polkit.Result.YES;}
});

示例中 action.id 选择了 GParted 和 Libvirt,可以根据需要进行选择。|| 操作符是“或”操作,&& 是“与”操作。

Udisks

文件管理器在挂载磁盘时可能要求输入密码,或报告 Not authorized 或类似错误,详情请查看:Udisks#Configuration.

允许一般用户管理某个 systemd 单元

通过检查 polkit 策略中的某些值,可以指定某些用户和群组管理 systemd 的权限。例如下面配置允许一般用户启动和停止 wpa_supplicant:

/etc/polkit-1/rules.d/10-wifimanagement.rules
polkit.addRule(function(action, subject) {if (action.id == "org.freedesktop.systemd1.manage-units") {if (action.lookup("unit") == "wpa_supplicant.service") {var verb = action.lookup("verb");if (verb == "start" || verb == "stop" || verb == "restart") {return polkit.Result.YES;}}}
});

参阅

  • Polkit 手册页面
  • 使用PolKit授权 (openSUSE Leap 15.2 安全指南)

Polkit (简体中文)相关推荐

  1. DXperience_v9.15简体中文

    最新更新的简体中文 http://smartsoft.5d6d.com/thread-2095-1-1.html 转载于:https://www.cnblogs.com/manwu2008/archi ...

  2. Crystal For Rubyists 简体中文

    Crystal :一门年轻的编程语言,语法酷似 Ruby,静态类型,编译型,高性能. "给 Ruby 同学准备的 Crystal 入门教程",这是一本非常值得 Crystal 新人 ...

  3. 树莓派 之 系统登陆及设置本地化(简体中文)

    系统登陆及设置本地化(简体中文) (如果启动停留在彩虹画面,说明 kernel.img 启动失败,建议替换或重新写入系统,信息来源 ) 用户名: pi 密码: raspberry 写入系统在Windo ...

  4. winxp ie8.0 html5,(IE8)Internet Explorer 8.0 For WinXP 简体中文正式版

    最新版本: 简体中文正式版官方网站: 微软软件大小: 16506 K软件授权: 免费软件平台: WinXP下载windows 超速版(通用)下载windows 购物版(通用)微软全新推出的最新版本网页 ...

  5. Wordpress会员插件 wp_members 最新简体中文语言包

    wp_members是wordpress插件平台中最受欢迎的会员管理插件,使用它可以将wordpress迅速变成一个会员驱动的网站,可以实现大多数CMS级别的会员管理功能. 我们发现wp_member ...

  6. 全网唯一的Microsoft?NETFramework3?5SP1简体中文完整版离线安装包安装netframewo

    简体中文完整版~~[很多软件都需要它支持]~<<全网络唯一可离线安装的>>!~我自己组合成功的!大家需要吗!加精! 安装netframework4.0装这个版本,目前.net程 ...

  7. 【开发环境】为 Visual Studio Community 2013 版本安装中文语言包 ( 安装 Test Agents 2013 | 安装 Visual Studio 2013 简体中文 )

    文章目录 一.下载相关文件 二.安装 Test Agents 2013 三.安装 Visual Studio 2013 简体中文语言包 一.下载相关文件 在 https://visualstudio. ...

  8. (2014年2月7日升级)Ubuntu-14.04-Alpha2-32位简体中文优化封装版

    2019独角兽企业重金招聘Python工程师标准>>> (2014年2月7日升级)Ubuntu-14.04-Alpha2-32位简体中文优化封装版 感谢大家对LINUX封装技术的支持 ...

  9. WINCE6.0添加微软简体中文输入法3.0

    ********************************LoongEmbedded*****************作者:LoongEmbedded(kandi)时间:2011.06.2类别: ...

最新文章

  1. 杨强入选加拿大皇家科学院院士!此外还有3名华人学者入选
  2. 内向者优势 原版_未来内向的人具有越来越高的竞争力——心理学:学会运用性格优势...
  3. 如何避免重复请求/并发请求?这样处理才足够优雅
  4. mysql 5.74安装教程_MySQL安装、基本账户安全(5.0以后版本)
  5. [vue] 在移动端使用vue,你觉得最佳实践有哪些?
  6. 关于字体图标在firefox上本地访问无法显示的问题分析
  7. 静态路由--------默认路由和路由汇总
  8. 《初级会计电算化实用教程(金蝶KIS专业版)》一1.5 课后习题
  9. 测试面试题+测试面试宝典(分类版)
  10. 数学建模论文题目优选专业题目128个
  11. winserve2016 万能驱动网卡_万能网卡驱动win10
  12. 如何使用Visual Studio调试Windows Vista侧栏小工具
  13. 《师兄教你找工作——100场面试 20个offer背后的求职秘密》一2.5 那些老生常谈的问题...
  14. C语言中-条件编译#ifdef的妙用详解_透彻
  15. Java Pair类的使用
  16. c++课设 _ 保卫萝卜
  17. 不是单身选择了我 ,而是我选择了单身
  18. 计算机专业研究生如何看待计算机期刊论文
  19. 网页发起qq聊天\微信聊天
  20. 四位行波进位加法器_【HDL系列】硬件加法器原理与设计小结

热门文章

  1. 在Win10上使用BC3.1
  2. 浅谈防火墙五个域,三种模式
  3. 由于找不到vcruntime140_1.dll,无法继续执行代码重新安装程序可能会解决此问题
  4. 二)Python非正式介绍
  5. 启动马达接线实物图_电机星角启动电路如何接线(原理图及实物接线图)
  6. 三生三世十里桃花用计算机怎么弄,三生三世十里桃花ios如何用电脑玩 三生三世十里桃花ios电脑教程...
  7. 机器学习算法----聚类 (K-Means、LVQ、GMM、DBSCAN、AGNES) (学习笔记)
  8. 移动通信技术发展历程及未来趋势
  9. 荣耀v10升级android10,大快人心?荣耀V10、荣耀8X、荣耀10,可以升级EMUI10了
  10. golang入门项目—日志收集