シェルスクリプトで現在のユーザーが rootかどうかチェックする

root権限がないと実行できない処理を含むスクリプトは間違えて一般ユーザーで実行しないようにしておく

2021年8月22日 嶋田大貴

実行にroot権限を要する処理を含むシェルスクリプトをどう記述するかは、大きく分けて2種類考えられる。

スクリプト内で実行されるほとんどのコマンドが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

2021年8月22日 嶋田大貴

記事一覧へ戻る