How to check root user in POSIX Shell script

シェルスクリプトなどで現在のユーザーがルートユーザー(root権限,管理者権限,スーパーユーザー,super user)であるかを判別する方法を記す。

例えば,システムやデバイスの操作を行いたい時には,sudosuコマンドによりルート権限を取得してからコマンドを実行する。これをシェルスクリプトで実装するには,スクリプト内で現在のユーザーがルートユーザーかどうかを判定して,ルートユーザーでなければ処理を中断させるのが一つの方法だ。そこで,現在のユーザーがルートユーザーであるかを判別する方法が必要となる。

結論を書くと,以下のPOSIX準拠の構文により実現できる。

if [ $(id -u) = 0 ]; then
echo "I am root user: $(id -nu)."
fi

root権限ではuser ID(UID)が0であることがPOSIXで保証されていることを利用している。このことは,WikipediaのUser identifierのページで言及されている。引用元のPOSIXのgetpwuidコマンドのページを確認すると,以下のとおりに確かにroot権限ではUIDは0となると明記されている。

The following example gets the user database entry for the user with user ID 0 (root).
getpwuid

UIDの取得にはPOSIX準拠コマンドであるid -uにより取得できる。ユーザー名の取得は-n(name)オプションを一緒につければ取得できる。

ネットの情報だと,他にもUID変数やEUID変数,whoamiコマンドを使ったり,ルートユーザー名がrootであることを利用した判別を行っている。

参考:

しかし,これらの変数,コマンド,名前はPOSIXで未定義なので,他の環境での動作が保証できない。そのため,特に他の理由がなければ,[ $(id -u) = 0 ]により判別すべきだろう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です