AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 841099
Accepted
Shadur
Shadur
Asked: 2017-03-29 09:24:11 +0800 CST2017-03-29 09:24:11 +0800 CST 2017-03-29 09:24:11 +0800 CST

systemd:授予非特权用户更改一项特定服务的权限

  • 772

我在无头 linux 机器上运行私人游戏服务器。因为我不是白痴,所以说服务器作为自己的非特权用户运行,具有下载更新和修改世界数据库所需的最低访问权限。

我还创建了一个 systemd 单元文件,以便在需要时正确启动、停止和重新启动服务器(例如,对于上述更新)。

但是,为了真正打电话systemctl,service <game> start/stop/restart我仍然需要以 root 或有sudo能力的用户身份登录。

有没有办法告诉 systemd 对于该服务,允许<game>非特权用户运行启动/停止/重启命令?gamesrv

linux
  • 3 3 个回答
  • 67567 Views

3 个回答

  • Voted
  1. Best Answer
    Michael Hampton
    2017-03-29T14:07:18+08:002017-03-29T14:07:18+08:00

    我可以想到两种方法来做到这一点:


    一种是使服务成为用户服务而不是系统服务。

    systemd 单元将放置在服务用户的主目录下,而不是创建系统单元$HOME/.config/systemd/user/daemon-name.service。然后,同一用户可以使用管理服务systemctl --user <action> daemon-name.service。

    要允许用户单元在启动时启动,root 必须为该帐户启用 linger,即sudo loginctl enable-linger username. 单位也必须是WantedBy=default.target。


    另一种方式是允许用户通过 PolicyKit 访问管理系统单元。这需要 systemd 226 或更高版本(对于 JavaScript rules.d 文件,PolicyKit >= 0.106 - 检查pkaction --version)。请注意,Debian 故意将 PolicyKit 保留到近十年前的 0.105 版本,该版本不支持此功能,显然是因为一个人的个人意见,而且它和派生自它的发行版(如 Ubuntu)都不能使用此方法。

    您将创建一个新的 PolicyKit 配置文件,例如/etc/polkit-1/rules.d/57-manage-daemon-name.rules检查您想要允许的属性。例如:_

    // Allow alice to manage example.service;
    // fall back to implicit authorization otherwise.
    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;
        }
    });
    

    然后,命名用户可以使用systemctl和不使用sudo.

    • 71
  2. Henrik Pingel
    2017-03-29T09:36:59+08:002017-03-29T09:36:59+08:00

    sudo是为此而生的。编辑您的/etc/sudoers文件,为您希望非特权用户能够使用的命令visudo添加一个:Cmd_alias

    # game server commands
    Cmnd_Alias GAME_CMDS = /usr/bin/systemctl start <game service>, /usr/bin/systemctl stop <game service>
    

    并添加一行以允许非特权用户使用使用别名定义的命令,如下所示:

    unprivileged_user ALL=(ALL) NOPASSWD: GAME_CMDS
    

    阅读有关该主题的更多文档,了解 sudo 命令的各种参数。

    您可能需要安装sudo软件包才能sudo在您的系统上使用。

    • 28
  3. Mark Stosberg
    2017-03-30T05:09:49+08:002017-03-30T05:09:49+08:00

    您可以sudo与提供等效于 的访问权限相关联root,但它也可用于允许特定用户 root 访问特定的有限命令集。

    如何在服务器故障上已经回答了这个问题,在 [在没有 sudo的情况下向非 root 用户授予一组命令的访问权限,在没有 sudo 的情况下向非 root 用户授予一组命令的访问权限)。

    使用 PolicyKit 仍然不常见。sudo使用 systemd “用户单元”应该可以正常工作,但从历史上看,您的目标已经通过使用允许用户以 root 身份运行特定命令的能力多次实现。

    • 2

相关问题

  • Linux 主机到主机迁移

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 在 RHEL4 上修改 CUPS 中的现有打印机设置

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve