私はここで初めてで、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)