首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >系统从组中的非特权用户开始

系统从组中的非特权用户开始
EN

Server Fault用户
提问于 2019-03-08 08:23:57
回答 2查看 1.4K关注 0票数 4

我希望foogroup组的用户能够:

  • systemctl start foo.service
  • systemctl stop foo.service
  • systemctl status foo.service,和
  • journalctl -u foo.service

而不使用提升的特权。这有可能吗?

我有一个系统服务,它看起来像:

代码语言:javascript
复制
[Unit]
Description=foo service

[Service]
Type=simple
ExecStart=/bin/sleep infinity
User=foobot
Group=foogroup

其中foobot是系统用户。

我知道我们可以将单元文件安装到~/.config/systemd/user/以允许非特权用户使用systemd,但这并不能真正帮助一个组。

注意:我计划使用座舱,所以将systemctl添加到/etc/sudoers不会有帮助。

EN

回答 2

Server Fault用户

回答已采纳

发布于 2019-04-06 16:45:12

如果我没有使用Debian发行版,我会接受Tollef的答案,但是由于debian使用polkit (<0.106),所以*.rules不可用。Debian中的等效文件是:

代码语言:javascript
复制
/etc/polkit-1/localauthority/50-local.d/manage-units.pkla
----
[Allow users to manage services]
Identity=unix-group:somegroup
Action=org.freedesktop.systemd1.manage-units
ResultActive=yes

不过,请注意,这并不完全等同。它允许组管理服务,但不指定允许组管理哪些服务。此外,它也没有限制哪个动词是允许的。但是,我注意到,虽然systemd start是允许的,但是像systemd enable这样的东西仍然不可用,这是受文件权限保护的。

关于*.rules的功能与这个答案这里*.pkla文件之间的差异,我还有另一个悬而未决的问题。

票数 2
EN

Server Fault用户

发布于 2019-03-21 13:01:41

在/etc/polkit中-1/规则.d/10-myservice.rules.规则

代码语言:javascript
复制
polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.systemd1.manage-units" && subject.isInGroup("somegroup")) {
        if (action.lookup("unit") == "foo.service") {
            var verb = action.lookup("verb");
            if (verb == "start" || verb == "stop" || verb == "restart") {
                return polkit.Result.YES;
            }
        }
    }
});
票数 3
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/957323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档