重新啟動/關閉系統時始終要求輸入 sudo 密碼

重新啟動/關閉系統時始終要求輸入 sudo 密碼

所以,

我注意到在 manjaro 上,如果只有一個用戶,則reboot無需輸入須藤,只會失敗並要求輸入 sudo 密碼,而在 ubuntu 伺服器上,鍵入此命令不會要求輸入 sudo 密碼並成功重新啟動系統。我的問題是我怎麼能做到這樣當我打字時重新啟動/關閉/停止,即使目前只有一個使用者登錄,ubuntu 總是要求輸入 sudo 密碼?這可能與 polkit 有關嗎?如果是這樣,我該如何改變這一點?

我問這個的原因是我想確保每個可以物理訪問我的伺服器的人都無法重新啟動(當然除非拔掉電源線,這是不同的哈哈)

謝謝

答案1

我這樣做的方法之一是掩蓋systemd目標,這會阻止執行某些操作,無論誰輸入命令。例如,要防止系統關閉,您可以這樣做:

sudo systemctl mask poweroff.target

sudo shutdown現在,任何通過或關閉系統的嘗試sudo systemctl shutdown都會失敗。停止和重新啟動也可以完成相同的操作:

sudo systemctl mask runlevel0.target
sudo systemctl mask halt.target
sudo systemctl mask runlevel6.target
sudo systemctl mask reboot.target

筆記: runlevel6相當於reboot, 且runlevel0相當於shutdownhalt

若要撤銷此操作,可以再次執行這些命令,但請使用unmask

sudo systemctl unmask runlevel0.target
sudo systemctl unmask shutdown.target
sudo systemctl unmask halt.target
sudo systemctl unmask runlevel6.target
sudo systemctl unmask reboot.target

考慮到這一點,現在您可以編寫一個可執行的腳本僅有的對於有sudo存取權限的人:

#!/bin/bash

## Determine the operation to run (mask | unmask)
op=mask

if [[ $1 = unmask ]]
then
        op=unmask
fi

## Set the targets we want to mask
declare -a arr=("runlevel0" "runlevel6" "shutdown" "reboot" "halt")

## Run the commands
for i in "${arr[@]}"
do
        cmd=$( sudo systemctl $op $i.target )
        echo "$i :: $op"
done

警告:這段程式碼可以工作,但是非常粗糙。在生產機器上運行之前,請務必使用虛擬機器或「安全」的地方對其進行健全性檢查。

現在,您可以執行此腳本來在啟動後封鎖目標,然後像這樣關閉/重新啟動:

sudo ~./setTargetMask.sh unmask
sudo shutdown now

筆記:您可以隨意稱呼該腳本。

相關內容