尽管有足够的规则,Policy Kit 不允许重新启动服务

问题描述

作为 nagios 用户,我无法执行 systemctl。将其跟踪到 pkexec,我得到:

-sh-4.2$ pkexec systemctl reload nagios
==== AUTHENTICATING FOR org.freedesktop.policykit.exec ===
Authentication is needed to run `/bin/systemctl' as the super user

然而,我有一个非常非常宽松的 polkit 规则(它不是一个生产系统)

polkit.addRule(function(action,subject) {
    if (action.id == "org.freedesktop.systemd1.manage-units") {
        var verb = action.lookup("verb");
        if (verb == "start" || verb == "stop" || verb == "restart" || verb == "reload") {
            return polkit.Result.YES;
        }
    }
});

我在重新启动 polkit.service 时仔细检查它是否已编译 有什么问题?

OS : RHEL7
Sytemd version 219
PolKit version : 0.112

谢谢,

泽维尔

解决方法

似乎组合 Sytemd 219 + PolKit 0.112 不支持“动词”语句。向规则添加了一些日志记录,向我展示了这一点:

/etc/polkit-1/rules.d/01-nagios.rules:7: verb=undefined

看起来像是 Polkit 0.112 中的一个错误。

泽维尔