bashスクリプトをrootとして実行することを許可しますが、sudoは許可しません

bashスクリプトをrootとして実行することを許可しますが、sudoは許可しません

私はここで初めてで、bash/linuxに初めて触れました。

先生は、sudoを使用するのではなく、「実際の」ルートの場合にのみスクリプトが実行されるようにする課題を与えられました。 2時間検索して努力した後、私は彼が風を吸っていると考え始めました。ルートだけを許可すると簡単ですが、sudoで実行しているユーザーはどのように除外しますか?

これが私が持っているものです:

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

ベストアンサー1

私が考えることができる唯一の方法は、SUDO_*sudoが設定した環境変数の1つをチェックすることです。

#!/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)

おすすめ記事