我使用的是 Debian 9.5。每当我从终端输入命令时systemctl halt
,它都会说:
Authentication is required to start halt.target
它会要求输入密码。但我可以使用命令systemctl reboot
,systemctl poweroff
并且它们不会要求输入密码并且会成功执行。我想如果它要求输入密码停那么它还应该要求关机。
答案1
在更高版本中,systemd v235,停止可以无需密码即可允许。为了允许它,您必须编辑一些 polkit 配置文件。
添加此暂停功能的提交描述称“暂停的整个概念并不是真的太有用”。 [1]我认为这个观点解释了与关机/重启的区别:-)。
另一种看待它的方式是,常见的 GUI 中提供了关机/重启按钮,我们希望它们无需密码即可工作。 systemd 项目提供了一种实现这一点的方法。但用户通常不希望有一个单独的按钮来“停止”。
我审查了此提交并帮助批准了它。我觉得 systemd 不改变这种行为通常更安全,而且没有明确的改变理由。
最初的行为可能被认为更简单......维持如果我们实际上并不希望使用 API 的代码和文档,那么它肯定是不可取的。或者它可能是阻止用户做他们实际上不想做的事情的一种方法。我不知道。我非常模糊地想象出另一件事。 “halt”被定义为进入 ROM 监视器(如果有的话)。如果有一些假设的 ROM 监视器在启动时需要密码,我不确定当操作系统交回控制权时它是否会再次提示输入密码。
在 v235 中添加 polkit 支持是停止登录支持的一个附带好处。这样做是为了使systemctl
停止时的行为保持一致,但 polkit 支持并不是真正的原因。
[1] PR #6944 - “systemctl 重新启动/挂起调整” - 提交 36b69c313120 - “logind:添加 Halt() 和 CanHalt() API”
关联:https://github.com/systemd/systemd/pull/6944/commits/36b69c31312007f522a2a7ae5087ae90bd7867cc
波尔基特提示
您可以在 中看到 polkit 默认设置/usr/share/polkit-1/actions/org.freedesktop.login1.policy
。您可以搜索power-off
和的类似条目reboot
,并查看它们的<defaults>
元素。在 v235 及以上版本中,会有一个条目halt
可供您比较。
您可能会注意到一些其他细节。例如,如果您通过网络登录,系统将需要管理员密码才能关闭。
如果您知道正确的咒语,您可以在某处创建一个文件,在/etc/polkit-1
该文件下提供与默认设置不同的设置。我的猜测是你必须定义一个“规则”。