Bash
允許 bash 腳本以 root 身份執行,但不允許 sudo
我是新來的,也是 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)