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表示)。
小智 12
您的系统正在使用polkit授权管理器并且消息来自文件/usr/share/polkit-1/actions/org.freedesktop.systemd1.policy。polkit可以在/etc/polkit-1和/usr/share/polkit-1目录中配置,更具体地说是在rules.d和actions子目录中。有关更多信息,请参阅Polkit 手册页。
正如已经回答的那样,此消息来自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)
unit - Centos 7的systemd缺乏支持的信息来源,也请点赞!