允许非 root 用户使用 polkit 规则无需密码即可运行某些 systemd 服务(不是 *)

允许非 root 用户使用 polkit 规则无需密码即可运行某些 systemd 服务(不是 *)

我有一个非 root 用户,我需要能够启动/停止/重新启动系统上的服务子集,而无需提示输入授权密码。理想情况下,我希望通过 polkit 完成此操作,但如果需要,我会选择 sudo。无论如何,我在这里看到了解决方案,包括向 localauthority 添加文件并添加 .rules 文件以/etc/polkit-1/rules.d指定要运行的服务。我应该提到这是在 CentOS7 系统上。

然而,地方当局的解决方案是全部服务和 .rules 文件解决方案(取自此处:systemd:授予非特权用户更改一项特定服务的权限) 仍将提示输入密码,因为中的“manage-units”操作设置为“auth_admin” /usr/share/polkit-1/actions/org.freedesktop.systemd1.policy

有没有办法让 polkit 允许特定用户无需密码即可运行特定服务?无需为该用户提供管理单元操作的完全开放权限?我基本上想要有条件的管理单元权限。

我还注意到一些有趣的事情:如果我运行这个函数

polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.systemd1.manage-units" && subject.user == "alice")
    {
        return polkit.Result.YES;
    }
});

它对所有服务都有效。但如果我尝试通过将其更改为以下内容来深入了解服务:

polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.systemd1.manage-units" &&
        action.lookup("unit") == "example.service" &&
        subject.user == "alice") {
        return polkit.Result.YES;
    }
});

突然它提示输入密码。不知道为什么它不会在第一个函数中提示输入密码,因为它仍然按照管理单元操作进行操作。

相关内容