使用PolicyKit允许非root用户启动和停止服务

PCL*_*PCL 5 rhel systemd rhel7 polkit

我需要允许非 root 用户启动和停止服务。建议我使用PolicyKit而不是sudoers.d我熟悉的 。

由于我没有使用经验PolicyKit,我想我应该尝试并创建一个规则来允许非 root 用户启动和停止 Docker 服务。我创建了一个文件,/etc/polkit-1/rules.d/10-docker.rules其中包含:

polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.systemd1.manage-units" &&
        action.lookup("unit") == "docker.service")
    {
        return polkit.Result.YES;
    }
})
Run Code Online (Sandbox Code Playgroud)

但是,每当我执行 时systemctl start|stop|restart docker.service,都会不断提示我输入密码。我缺少什么?

另外,我想限制非 root 用户控制特定组中的此服务,例如blah。我如何将其纳入我的规则中?

我的目标操作系统是 RHEL 7.7。

小智 1

在CentOS7上,action无法访问该unit信息。这是在更高版本的 systemd v226 中引入的。

https://github.com/systemd/systemd/commit/88ced61bf9673407f4b15bf51b1b408fd78c149d

我也被这个打击了。您需要允许用户管理所有单元,或者回到在 sudoers 上使用 shell 脚本的石器时代。

另外,我想限制非 root 用户控制特定组中的此服务,例如等等。我如何将其纳入我的规则中?

使用subject.isInGroup("group")

看: