Bash スクリプト: スクリプトを root (または sudo) で実行する必要がある

Bash スクリプト: スクリプトを root (または sudo) で実行する必要がある

tar を使用してディレクトリをバックアップする bash スクリプト (Ubuntu) を作成しようとしています。

スクリプトを 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

所有権をルートに変更することで

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

/usr/bin/idこれは、外部コマンドを必要としないため、(bash スクリプトの場合) を使用したソリューションよりも優れています。

答え4

ここでの目的は何ですか? スクリプトを root として実行する必要があることをユーザーに通知すること、または何らかのセキュリティ予防策として実行することでしょうか?

ユーザーに通知したいだけであれば、uid の提案はどれでも問題ありませんが、セキュリティ上の予防策としては、それらは馬のタイヤと同じくらい役に立ちません。ユーザーがスクリプトをコピーし、if ステートメントを削除して、とにかく実行することを止めるものは何もありません。

これがセキュリティ上の問題である場合は、スクリプトを 700 に設定し、root:root が所有するようにして、他のユーザーが読み取りや実行ができないようにする必要があります。

関連情報