刪除關機命令但保持重新啟動的最佳方法

刪除關機命令但保持重新啟動的最佳方法

我在資料中心有一個 raspi 類型的設備,最近不小心將關閉命令貼到了螢幕上錯誤的終端機中。有沒有辦法保留shutdown -r但刪除#poweroff #shutdown -P -H選項?

我想保持shutdown -r 指揮。如果我設法凍結系統,或者使用 ip 表規則將自己鎖定在外,我喜歡在上面放置一個計時器。例子shutdown -r +10

答案1

您應該使用基於 systemd 的 Linux 發行版。在這種情況下,您應該能夠面具poweroff 目標,這樣 systemd 將拒絕執行它(並關閉電源)。例如:

systemctl mask poweroff.target

這使得除了重新啟動之外完全不可能關閉系統。看看沒有任何反應:

Debian9 動畫演示

在這種情況下,該虛擬機器的虛擬電源開關甚至無法再關閉系統。但它仍然可以完美地重新啟動。

當然,要撤消更改,只需取消對目標的屏蔽即可。然後就可以關閉系統了。

systemctl unmask poweroff.target

答案2

有幾種方法可以實現這一目標。一個人將使用常規的非特權帳戶,這需要使用 sudo 運行命令並輸入密碼。然後您可以將以下內容附加到 /etc/sudoers (透過執行 visudo):

## user is allowed to execute reboot -r only
jdoe ALL=NOPASSWD: /sbin/shutdown -r *

另外,要停用 sudo 憑證緩存,還需添加以下內容:

Defaults timestamp_timeout=0

如果您之前使用 sudo 呼叫命令,這將阻止憑證快取。

例子:

[root@ops ~]# su - jdoe
[jdoe@ops ~]$ sudo shutdown -c
[sudo] password for jdoe:
[jdoe@ops ~]$ sudo shutdown -r +10
Shutdown scheduled for Mon 2018-09-03 18:51:13 IDT, use 'shutdown -c' to cancel.
[jdoe@ops ~]$ sudo shutdown -H
[sudo] password for jdoe:
^[[A[jdoe@ops ~]$ sudo shutdown -c
[sudo] password for jdoe:

請注意,在上面的範例中,我在運行時不需要輸入密碼sudo shutdown -r +10,但在其餘時間則需要輸入密碼。如果您不想在命令 ( sudo shutdown -r +10) 之前輸入 sudo,請將以下內容新增至 .bash_profile 或 .bashrc 中:

alias shutdown="sudo shutdown"

例子:

[jdoe@ops ~]$ source ~/.bash_profile
[jdoe@ops ~]$ shutdown -r +10
Shutdown scheduled for Mon 2018-09-03 19:03:14 IDT, use 'shutdown -c' to cancel.
[jdoe@ops ~]$ shutdown -c
[sudo] password for jdoe:

請注意,最佳實踐是使用非特權帳戶並在需要時使用 sudo 升級。

答案3

有一個工具叫莫莉守衛這要求您指定要關閉或重新啟動的電腦的主機名稱。

如果您不使用 Debian,那麼從原始程式碼編譯它應該很簡單,因為程式相當原始。

答案4

將關閉可執行檔重新命名為不可能意外呼叫的名稱。

然後別名shutdown(whatever) -r

相關內容