允许所有用户使用“systemctl halt”?(systemd + debian)

允许所有用户使用“systemctl halt”?(systemd + debian)

是否可以允许所有用户执行“systemctl halt”?

目前只有命令:

systemctl poweroff & systemctl reboot work on my system (Debian Jessie)

当我以普通用户身份调用 systemctl halt 时,收到以下消息:

Failed to start halt.target: Access denied

我尝试了以下方法:

  1. 方法 - 我尝试在 /usr/share/polkit-1/actions/org.freedesktop.login1.policy 中添加一个新操作

我复制了该动作

<action id="org.freedesktop.login1.power-off"> to
<action id="org.freedesktop.login1.halt">
  1. 方法(并且有效)是 chmod u+s /sbin/halt,但因为 /sbin/halt 是 -> /bin/systemctl 的链接,所以这可能不是一个好主意

答案1

步骤 1:等待几个月,直到 Debian Stretch 发布 – 你至少需要 systemd v227,并带有提交2ac3930f(polkit 检查/sbin/halt)和88ced61b(扩展的 polkit 数据systemctl halt等)

第2步:在...中创建 polkit 规则事实上,这还不够,因为即使 Stretch 仍然有polkit v0.105,它还不支持基于 JS 的规则;只有相当有限的.pkla格式。也就是说,v0.113最后在“实验”中。

但是如果你碰巧升级到 systemd ≥v227 和 polkit ≥v0.113,那么这样的规则应该有效:

/* copy to /etc/polkit-1/rules.d/systemd-allow-halt.rules */

polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.systemd1.manage-units" &&
        action.lookup("unit") == "halt.service")
    {
        return polkit.Result.YES;
    }
});

所以,教你自己打字systemctl poweroff吧。“Halt”不是正常的关机命令;它是字面上的命令机器——无需关闭电源。这没什么用。

如果你觉得它有用,请使用须藤反而:

# /etc/sudoers

ALL ALL=(root) NOPASSWD: /usr/bin/systemctl halt, /sbin/halt

相关内容