
シェルスクリプトで現在のユーザーが rootかどうかチェックする
root権限がないと実行できない処理を含むスクリプトは間違えて一般ユーザーで実行しないようにしておく
2021年8月22日 嶋田大貴
実行にroot権限を要する処理を含むシェルスクリプトをどう記述するかは、大きく分けて2種類考えられる。
- スクリプト自体がsudoで実行される前提でそのまま処理を記述する
- スクリプト内でroot権限の必要なコマンドにだけそれぞれ sudoを付ける
スクリプト内で実行されるほとんどのコマンドがroot権限を要する場合は前者の方法を取るのが簡単だが、その場合はスクリプトの先頭に実効ユーザーがrootかどうかをチェックする処理を挟んでおくと「このスクリプトはroot権限でしか実行できないよ」という意思が明確になるので、おそらくそんなスクリプトを書いたことすら忘れている未来の自分にとって親切である。
bashの場合
bashではシェル変数EUIDに実効ユーザーIDが格納されているのでそれがゼロ(つまりroot)かどうかチェックする。
#!/bin/bash
if [ "$EUID" -ne 0 ]; then
# rootユーザーにしか実行させない
echo "Please run as root"
exit 1
fi
# ここからなんか処理...
bashの機能に依存したくない場合
変数EUIDはbash固有の機能なので、他のBシェルでは id -u
コマンド(man)の実行結果を使用してチェックを行う。
#!/bin/sh
if [[ `id -u` -ne 0 ]]; then
# rootユーザーにしか実行させない
echo "Please run as root"
exit 1
fi
# ここからなんか処理...
参考: Stack Overflow
記事へのコメントは Twitterにお願いします。
2021年8月22日 嶋田大貴