![允许所有用户使用“systemctl halt”?(systemd + debian)](https://linux22.com/image/1494551/%E5%85%81%E8%AE%B8%E6%89%80%E6%9C%89%E7%94%A8%E6%88%B7%E4%BD%BF%E7%94%A8%E2%80%9Csystemctl%20halt%E2%80%9D%EF%BC%9F%EF%BC%88systemd%20%2B%20debian%EF%BC%89.png)
是否可以允许所有用户执行“systemctl halt”?
目前只有命令:
systemctl poweroff & systemctl reboot work on my system (Debian Jessie)
当我以普通用户身份调用 systemctl halt 时,收到以下消息:
Failed to start halt.target: Access denied
我尝试了以下方法:
- 方法 - 我尝试在 /usr/share/polkit-1/actions/org.freedesktop.login1.policy 中添加一个新操作
我复制了该动作
<action id="org.freedesktop.login1.power-off"> to
<action id="org.freedesktop.login1.halt">
- 方法(并且有效)是 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