Bash

允許 bash 腳本以 root 身份執行,但不允許 sudo

  • January 5, 2021

我是新來的,也是 bash/linux 的新手。

我的老師給了我一個作業,讓我只在你“真正”是 root 時才執行腳本,而不是在你使用 sudo 時執行。經過兩個小時的搜尋和嘗試,我開始認為他在拖釣我。只允許 root 很容易,但是如何排除使用 sudo 執行它的使用者?

這就是我所擁有的:

if [[ $EUID -ne 0 ]]; then
 echo "You must be root to run this script."
 exit
fi

我能想到的唯一方法是檢查SUDO_*sudo 設置的環境變數之一:

#!/usr/bin/env sh

if [ "$(id -u)" -eq 0 ]
then
   if [ -n "$SUDO_USER" ]
   then
       printf "This script has to run as root (not sudo)\n" >&2
       exit 1
   fi
   printf "OK, script run as root (not sudo)\n"
else
   printf "This script has to run as root\n" >&2
   exit 1
fi

請注意,這個解決方案當然不是未來的證明,因為您無法阻止任何人在執行腳本之前設置變數:

$ su
Password:
# SUDO_USER=whatever ./root.sh
This script has to run as root (not sudo)
# ./root.sh
OK, script run as root (not sudo)

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