管理系统服务或单元需要进行身份验证。

Jac*_*ary 33 linux daemon centos7

每当尝试以普通用户身份停止/启动守护程序时,我都会遇到一个奇怪的问题,它要求使用另一个普通用户的凭据进行身份验证 - 例如:

[bob@server ~]$ systemctl stop some-daemon.service
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or units.
Authenticating as: alice
Password: 
Run Code Online (Sandbox Code Playgroud)

为什么在bob登录时要求alice进行身份验证,我该如何解决?

Kha*_*led 13

在管理系统服务时,您需要以 root 身份而不是普通用户身份进行。这由$shell 提示末尾的字符指示。

您可以使用sudo command或切换到 root(root shell 通常由#char表示)。

  • 即使我以 root 身份执行此操作,它也会要求普通用户身份验证。基本上 root 用户先执行“su - alice”,然后执行“systemctl”来启动他们的 vnc 守护进程,但现在它要求对每个“systemctl”进行身份验证,无论它是什么...... (2认同)

小智 12

您的系统正在使用polkit授权管理器并且消息来自文件/usr/share/polkit-1/actions/org.freedesktop.systemd1.policypolkit可以在/etc/polkit-1/usr/share/polkit-1目录中配置,更具体地说是在rules.dactions子目录中。有关更多信息,请参阅Polkit 手册页


Gre*_*cki 7

正如已经回答的那样,此消息来自Polkit 授权管理器,简单来说,它是一种控制谁可以做什么的 systemd 方式,包括管理 systemd 服务。


对于 OP,正确的解决方案是将服务配置为用户级systemd 服务。


但如果是系统级服务,您应该这样做:

为 Polkit 添加一条规则,允许您的用户管理服务,如下所示:

cat > /etc/polkit-1/rules.d/10-some-daemon.rules << POLKIT
polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.systemd1.manage-units" &&
        action.lookup("unit") == "some-daemon.service" &&
        subject.user == "bob") {
        return polkit.Result.YES;
    }
});
POLKIT
Run Code Online (Sandbox Code Playgroud)

... buuuuuut在 Centos 7 中使用 systemd v219,action无法访问unit!这已在 v226 中添加...因此您需要允许用户管理所有单位,这很可能不是您应该做的...


因此,我建议您切换到普通旧模式sudo,以允许您的用户管理服务,例如:

cat > /etc/sudoers.d/some-daemon << SUDO
bob ALL= NOPASSWD: /bin/systemctl restart some-daemon.service
bob ALL= NOPASSWD: /bin/systemctl stop some-daemon.service
bob ALL= NOPASSWD: /bin/systemctl start some-daemon.service
SUDO
Run Code Online (Sandbox Code Playgroud)
主要来源: