3

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

由于我没有使用 Docker 的经验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;
    }
})

但是,每当我执行时systemctl start|stop|restart docker.service,我都会不断收到输入密码的提示。我错过了什么?

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

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

4

2 回答 2

1

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

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

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

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

使用subject.isInGroup("group").

看:

于 2020-06-18T12:56:31.770 回答
0

/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")  &&
    subject.isInGroup("mygroup"))
    {
      return polkit.Result.YES;
    }
})

您还需要运行visudo并添加这些行

%mygroup ALL= NOPASSWD: /usr/bin/systemctl restart docker.service
%mygroup ALL= NOPASSWD: /usr/bin/systemctl stop docker.service
%mygroup ALL= NOPASSWD: /usr/bin/systemctl start docker.service
%mygroup ALL= NOPASSWD: /usr/bin/systemctl status docker.servicee

教程:https ://keshavarzreza.ir/create-linux-systemd-service-runable-for-non-root-users/

于 2020-09-03T18:27:28.913 回答