Bash 腳本:要求腳本以 root 身分執行(或使用 sudo)

Bash 腳本:要求腳本以 root 身分執行(或使用 sudo)

我正在嘗試編寫一個 bash 腳本(在 Ubuntu 中),它將使用 tar 備份目錄。

如何檢查腳本,使其只能以 root 身分執行(或使用 sudo)?

例如,如果使用者執行該腳本,則應說明該腳本必須以 sudo 權限執行,然後登出。如果腳本以 root 身分執行,它將繼續通過檢查。

我知道必須有一個簡單的解決方案,我只是無法透過谷歌搜尋找到它。

答案1

若要取得有效 uid,請使用下列命令:

id -u

如果結果為“0”,則腳本要么以 root 身份運行,要么使用 sudo。您可以執行以下操作來執行檢查:

if [[ $(/usr/bin/id -u) -ne 0 ]]; then
    echo "Not running as root"
    exit
fi

答案2

我假設您知道透過將所有權更改為 root

chown root:root file

並將權限設定為700

chmod 700 file

你將完成同樣的事情 - 沒有建議以 sudo 運行。

但為了完整性,我將發布這個答案。

答案3

bash 變數$EUID顯示腳本執行階段的有效 UID,如果要確保腳本以 root 身分執行,請檢查是否$EUID包含值 0:

if [[ $EUID -ne 0 ]]; then
    echo "$0 is not running as root. Try using sudo."
    exit 2
fi

這比(對於 bash 腳本!)的解決方案更好,/usr/bin/id因為它不需要外部命令。

答案4

您的目標是什麼,通知使用者他們應該以 root 身分執行腳本或作為某種安全預防措施?

如果您只是想通知用戶,任何 uid 建議都可以,但作為安全預防措施,它們就像馬上的輪胎一樣有用 - 沒有什麼可以阻止用戶複製腳本、取出 if 語句,並無論如何運行它。

如果這是安全問題,則該腳本應設為 700,由 root:root 擁有,以便任何其他使用者都無法讀取或執行該腳本。

相關內容