跳转到内容跳转到页面导航:上一页 [访问键 p]/下一页 [访问键 n]
适用于 openSUSE Leap 15.6

18 Polkit 认证框架 编辑源文件

摘要

Polkit 是图形 Linux 桌面环境使用的身份验证框架,用于对系统上的访问权限进行细粒度管理。传统上,在 Linux 中,在完全授权的管理员帐户 root 用户和系统上的所有其他帐户和组之间存在很强的权限分离。这些非管理员帐户可能具有某些额外的权限,例如通过 audio 组访问声音硬件。但是,这种权限是固定的,无法在特定情况下或特定持续时间内授予。

与其完全切换到 root 用户(使用诸如 sudo 之类的程序)以获取更高的权限,不如 Polkit 根据需要向用户或组授予特定的权限。这由配置文件控制,这些配置文件描述了需要在动态上下文中授权的单个操作。

18.1 概念概述 编辑源文件

Polkit 由多个组件组成。 polkitd 是一个具有特权的中央后台服务,它基于现有的 Polkit 配置执行身份验证检查。启用 Polkit 的应用程序将特定的身份验证请求转发到 polkitd 守护进程。在非特权用户上下文中运行的 Polkit 身份验证代理负责代表 polkitd 守护进程显示身份验证请求,并提供用户交互式输入凭据。

Polkit 操作 代表一个受 Polkit 授权规则约束的单个活动。例如,重新启动计算机的意图可以建模为 Polkit 中的单个操作。每个操作都有一个唯一的标识符,对于重新启动示例,该操作称为 org.freedesktop.login1.reboot

18.1.1 身份验证代理 编辑源文件

当用户在功能齐全的桌面环境中启动图形会话时,通常会自动启动身份验证代理,在后台运行。当应用程序请求对某个操作的授权时,您会注意到出现身份验证提示。在文本模式或通过 SSH 使用 Polkit 并非易事,因此本文档重点介绍其在图形会话环境中的使用。

18.1.2 Polkit 配置 编辑源文件

Polkit 的配置由 操作授权规则 组成

操作(文件扩展名 *.policy

操作在位于 /usr/share/polkit-1/actions 的 XML 文件中定义。每个文件定义了某个应用程序域的一个或多个操作,每个操作包含人类可读的描述及其默认授权设置。虽然系统管理员可以编写自己的规则,但这些默认策略文件不得直接编辑。

授权规则(文件扩展名 *.rules

规则是用 JavaScript 编程语言编写的,位于两个位置:/usr/share/polkit-1/rules.d 由系统软件包使用,而 /etc/polkit-1/rules.d 用于本地管理的配置。规则文件包含在默认操作授权设置之上的更复杂的逻辑。例如,规则文件可以推翻限制性操作,并允许某些用户在无需授权的情况下使用它。

18.1.3 Polkit 工具 编辑源文件

Polkit 提供了用于特定任务的工具(有关更多详细信息,请参阅各自的手册页)

pkaction

获取有关已定义操作的详细信息。有关更多信息,请参阅 第 18.3 节,“查询权限”

pkcheck

检查进程是否被授权执行特定的 Polkit 操作。

pkexec

允许程序根据 Polkit 授权设置以不同的用户身份执行。这类似于 susudo

pkttyagent

启动文本身份验证代理。如果桌面环境没有自己的身份验证代理,则使用此代理。

18.2 授权类型 编辑源文件

每次启用 Polkit 的应用程序执行特权操作时,Polkit 都会被询问用户是否有权这样做。答案可以是 yesnoauthentication needed。在后一种情况下,将显示身份验证对话框,供用户输入必要的凭据。

18.2.1 隐式授权 编辑源文件

如果不存在针对给定操作的专用 Polkit JavaScript 规则,则结果取决于 Polkit 策略文件中为每个操作定义的隐式授权设置。有三个授权类别:allow_activeallow_inactiveallow_anyallow_active 适用于处于活动会话中的用户。活动会话是在文本模式控制台或图形用户环境中进行的本地登录。当您切换到另一个控制台时,会话变为非活动状态,此时类别 allow_inactive 变为相关。 allow_any 用于所有其他上下文,例如通过 SSH 或 VNC 登录的远程用户。每个类别都分配了以下授权设置之一

用户永远不会被授予所需操作的授权。

用户始终被授予授权,无需输入任何凭据。

auth_self

用户需要输入自己的密码才能授权该操作。

auth_self_keep

类似于 auth_self,但授权会缓存一段时间,例如,如果同一应用程序再次执行相同的操作,则无需重新输入密码。

auth_admin

用户需要输入管理员 (root) 密码才能授权该操作。

auth_admin_keep

类似于 auth_self_keep,需要管理员 (root) 密码。

18.2.2 SUSE 默认权限 编辑源文件

到目前为止在 Polkit 策略文件中找到的隐式授权设置来自各个应用程序的开发人员。我们称这些设置为 上游默认值。这些上游默认值不一定与 SUSE 系统上使用的默认值相同。 openSUSE Leap 附带了一组预定义的权限,这些权限会覆盖上游默认值。这些设置有三种不同的风格(配置文件),其中一次只能激活一种

/etc/polkit-default-privs.easy

授权设置专为单用户桌面系统而设计,其中管理员也是活动的交互式用户。它以牺牲安全性为代价来提高用户体验。

/etc/polkit-default-privs.standard

适用于大多数系统的平衡设置。

/etc/polkit-default-privs.restrictive

更保守的授权设置,可以减少潜在的攻击面,但会牺牲某些领域的用户体验。

要切换活动的 polkit 配置文件,请编辑 /etc/sysconfig/security 并调整 POLKIT_DEFAULT_PRIVS 的值,设置为 easystandardrestrictive 中的一个。然后以 root 身份运行命令 set_polkit_default_privs

不要修改上述文件中配置文件设置。要定义自己的自定义 Polkit 设置,请使用 /etc/polkit-default-privs.local。有关详细信息,请参阅 第 18.4.3 节,“修改 SUSE 默认权限”

18.3 查询权限 编辑源文件

要查询权限,请使用 Polkit 中包含的命令 pkaction

Polkit 带有用于更改权限和以另一个用户身份执行命令的命令行工具(有关简要概述,请参阅 第 18.1.3 节,“Polkit 工具”)。每个现有的策略都有一个唯一的名称,可以使用该名称来识别它。使用命令 pkaction 列出所有可用的策略。有关更多信息,请参阅 man pkaction

要显示给定策略所需的授权(例如,org.freedesktop.login1.reboot),请按如下所示使用 pkaction

> pkaction -v --action-id=org.freedesktop.login1.reboot
org.freedesktop.login1.reboot:
  description:       Reboot the system
  message:           Authentication is required to allow rebooting the system
  vendor:            The systemd Project
  vendor_url:        http://www.freedesktop.org/wiki/Software/systemd
  icon:
  implicit any:      auth_admin_keep
  implicit inactive: auth_admin_keep
  implicit active:   yes
Note
注意:openSUSE Leappkaction 的限制

pkaction 仅考虑上游默认值。它不知道覆盖上游默认值的 SUSE 默认权限。因此,请小心解释此输出。

18.4 修改 Polkit 配置 编辑源文件

调整 Polkit 设置在您希望将相同的策略集部署到不同的机器时很有用,例如,部署到特定团队的计算机。自定义 Polkit 授权设置也可用于加强特定操作的安全性,或通过减少频繁使用的操作的密码提示来改善用户体验。但是,授予某些 Polkit 操作而无需身份验证可能会带来安全隐患,从而授予普通用户完全的 root 权限。在确定这不会违反您特定环境中的系统安全的情况下,降低 Polkit 身份验证要求。

18.4.1 覆盖 Polkit 策略文件 编辑源文件

可用 Polkit 操作的列表取决于您在系统上安装的软件包。要快速概述,请使用 pkaction 列出 Polkit 知道的所有操作。

为了便于说明,我们展示了命令 gparted(“GNOME 分区编辑器”)如何集成到 Polkit 中。

文件 /usr/share/polkit-1/actions/org.opensuse.policykit.gparted.policy 具有以下内容

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC
 "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/PolicyKit/1.0/policyconfig.dtd">
<policyconfig> 1

  <action id="org-opensuse-polkit-gparted"> 2
    <message>Authentication is required to run the GParted Partition Editor</message>
    <icon_name>gparted</icon_name>
    <defaults> 3
      <allow_any>auth_admin</allow_any>
      <allow_inactive>auth_admin</allow_inactive>
     < allow_active>auth_admin</allow_active>
    </defaults>
    <annotate 4
      key="org.freedesktop.policykit.exec.path">/usr/sbin/gparted</annotate>
    <annotate 4
      key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
  </action>

</policyconfig>

1

策略文件的根 XML 元素。

2

开始定义此策略中的唯一操作。

3

此处找到了上面描述的隐式授权设置。

4

annotate 元素包含有关 Polkit 如何执行操作的附加信息。在这种情况下,它包含指向 gparted 可执行文件的路径以及该程序允许访问图形显示的设置。这些注释对于将操作与 Polkit 工具 pkexec 结合使用是必需的。

要添加自己的策略,请创建一个具有上述结构的 .policy 文件,将适当的操作名称添加到 id 属性中,并定义所需的覆盖隐式授权设置。

Note
注意:已弃用的名称 PolicyKit

Polkit 授权框架以前名为 PolicyKit。在某些地方,例如上面的 XML 文档序言中,此旧名称仍然出现。

18.4.2 添加 JavaScript 授权规则 编辑源文件

授权规则优先于隐式授权设置。要添加自己的规则,请将文件存储在 /etc/polkit-1/rules.d/ 下。

此目录中的文件以一个两位数字开头,后跟一个破折号、一个描述性名称,并以 .rules 结尾。这些文件中的函数将按照目录中文件名的词法顺序执行。例如,00-foo.rules 的执行顺序(因此执行时间)在 60-bar.rules 甚至 90-default-privs.rules 之前。

在规则文件中,脚本通常会检查要授权的动作 ID。例如,要允许任何 admin 组的成员执行 gparted 命令,请检查动作 ID org.opensuse.policykit.gparted

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

在 Polkit API 文档中查找所有类和函数的描述,请访问 https://www.freedesktop.org/software/polkit/docs/latest/ref-api.html

18.4.3 修改 SUSE 默认权限 编辑源文件

第 18.2.2 节,“SUSE 默认权限” 中所述,SUSE 为 Polkit 隐式授权设置提供了不同的覆盖配置文件,这些配置文件由上游开发者定义。可以在 /etc/polkit-default-privs.local 中定义自定义权限。此处定义的权限始终优先于预定义的配置文件设置。要添加自定义权限设置,请执行以下操作

过程 18.1: 修改默认权限
  1. 编辑 /etc/polkit-default-privs.local。要定义权限,请为每个动作添加如下格式的行

    <action-id>     <auth_any>:<auth_inactive>:<auth_active>

    或者,如果所有三个类别接收到相同的值,也可以指定单个值

    <action-id>     <auth_all>

    例如

    org.freedesktop.color-manager.modify-profile     auth_admin_keep
  2. root 用户身份运行此工具,以使更改生效

    # /sbin/set_polkit_default_privs

有关 SUSE Polkit 默认权限的完整文档,请参阅 man polkit-default-privs

18.5 恢复 SUSE 默认权限 编辑源文件

要恢复 SUSE 默认授权设置,请按照以下步骤操作

过程 18.2: 恢复 openSUSE Leap 默认值
  1. 第 18.2.2 节,“SUSE 默认权限” 中所述,选择所需的配置文件

  2. 删除 /etc/polkit-default-privs.local 中的任何覆盖。

  3. 运行 set_polkit_default_privs 以重新生成默认规则。

打印此页面