Shutdown

為什麼 systemctl halt 要求輸入密碼但 systemctl reboot 和 systemctl poweroff 沒有?

  • January 26, 2019

我正在使用 Debian 9.5。每當我輸入命令systemctl halt時,它都會從終端顯示:

Authentication is required to start halt.target

它會要求輸入密碼。但是我可以使用命令systemctl rebootsystemctl poweroff並且它們不會要求輸入密碼並且會成功執行。我認為如果它要求輸入密碼,那麼它也應該要求poweroff

在更高版本的 systemd v235 中,可以在沒有密碼的情況下允許停止。為了使其允許,您必須編輯一些 polkit 配置文件。

送出的描述中添加了這個功能的暫停,說“暫停的整個概念並不是真的太有用”。

$$ 1 $$ 我認為這種觀點解釋了與關機/重啟的區別:-)。 另一種看待它的方式是,常見的 GUI 中提供了關機/重啟按鈕,我們希望它們無需密碼即可工作。systemd 項目提供了一種實現方式。但是使用者通常不希望單獨的按鈕來“停止”。

我審查了這個送出並幫助批准了它。我覺得 systemd 不改變這種行為通常更安全,而且沒有明確的改變理由。

最初的行為可能被認為更簡單……如果我們實際上並不期望它被使用,那麼*維護API 的程式碼和文件可能是非常不可取的。*或者它可能是一種阻止使用者做他們實際上不想做的事情的方法。我不知道。我很模糊地想到了另一個問題。“halt” 被定義為進入 ROM Monitor,如果有的話。如果有一些假設的 ROM Monitor 在啟動時需要密碼,我不確定當作業系統交還控制權時它會再次提示輸入密碼。


在 v235 中添加 polkit 支持是使 logind 支持停止的附帶好處。這樣做是為了使systemctl停止的行為保持一致,但對 polkit 的支持並不是真正的原因。

$$ 1 $$PR #6944 - “systemctl 重啟/暫停調整” - 送出 36b69c313120 - “登錄:添加 Halt() 和 CanHalt() API” 連結:https ://github.com/systemd/systemd/pull/6944/commits/36b69c31312007f522a2a7ae5087ae90bd7867cc

polkit 提示

您可以在 中查看 polkit 預設設置/usr/share/polkit-1/actions/org.freedesktop.login1.policy。您可以搜尋 和 的類似條目power-offreboot並查看它們的<defaults>元素。在 v235 及更高版本中,將有一個條目可供halt您比較。

您可能會注意到一些額外的細節。例如,如果您已通過網路登錄,系統將需要管理員密碼才能關閉電源。

如果您知道正確的咒語,您可以在某處創建一個文件,在該文件下/etc/polkit-1提供與預設設置不同的設置。我的猜測是你必須定義一個“規則”。

引用自:https://unix.stackexchange.com/questions/460481