Linux | polkit

Linux polkit

2022年2月1日 Qualys警告主要 Linux 发行版存在”Polkit“漏洞

Polkit简介.

polkit是一个应用程序级别的工具集,通过定义和审核权限规则,实现不同优先级进程间的通讯:控制决策集中在统一的框架之中,决定低优先级进程是否有权访问高优先级进程.
Polkit在系统层级进行权限控制,提供了一个低优先级进程和高优先级进程进行通讯的系统.和sudo等程序不同,Polkit 并没有赋予进程完全的 root 权限,而是通过一个集中的策略系统进行更精细的授权.Polkit定义出一系列操作,例如运行GParted,并将用户按照群组或用户名进行划分,例如wheel群组用户.然后定义每个操作是否可以由某些用户执行,执行操作前是否需要一些额外的确认,例如通过输入密码确认用户是不是属于某个群组.

https://gitlab.freedesktop.org/polkit/polkit

配置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认证规则.

认证规则可以覆盖默认的设置,个人使用的单个系统设置,应该放到/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;
    }
});

Polkit配置范例.

禁用挂起和休眠.
  • 下面规则禁止所有用户通过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;
    }
});

跳过口令提示.

  • 要模拟sudoNOPASSWD选项,完全根据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;
    }
});

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

/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;
            }
        }
    }
});

   转载规则


《Linux | polkit》Bad-BoY 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
雲計算 | Ansible部署OpenStack平台 雲計算 | Ansible部署OpenStack平台
Ansible部署OpenStack平台部署教程!好久不見,最近還好嗎?...👀關於雲計算哪些事嘻嘻👀.💪 各种服务器集群技术.💪 并且这是免费的.🔧准备.🔧 3台计算机,或3台虚拟机.🔧 操作系统Debian10.🔧 安装
2023-04-19
下一篇 
Linux | 日志管理 Linux | 日志管理
Linux日志管理!常用命令lastb #查看用户登录失败信息.last #查看用户登录成功信息 (也有系统启动多长时间).lastlog #查看每一个用户最近一次的登录信息.dmesg #查看系统引导过程中的日志信息.日志管理命令.Sys
2022-06-22
  目录