概要
以下、よく忘れるので自分用のメモです。
たまにシェルスクリプトの説明とかで、「このスクリプトはrootユーザで実行してください」みたいなものを見ることがあります。(実務では特に)
んで、rootユーザ以外で実行しちゃうとエラーになるか、なんか変な状態になってしまうとかが発生したりする・・・現場ではよくある話かもしれませんw
説明書きにそのように書くのは正しいとしても、せめてroot以外で実行したら駄目な処理をする場合、rootユーザかどうかのチェックくらいは入れておきたいですね。
rootユーザ(superuser account) のユーザIDは常に0
rootユーザのユーザIDは常に 0 なので、それをチェックするのが一番楽です。
以下、サンプル。
#!/usr/bin/env bash # # スクリプトの実行ユーザが root ユーザかどうかをチェックするサンプルです. # # REFERENCES: # - https://github.com/microsoft/vscode-dev-containers/blob/19adbac72304efc3f7b09970a3bac3c5a68a4c27/containers/javascript-node/.devcontainer/library-scripts/common-debian.sh#L24 # _exec() { # root ユーザのユーザIDは常に0なのを利用してチェックする if [ "$(id -u)" -ne 0 ]; then echo -e "non-root user" exit 1 fi echo -e "root user" } _exec
一般ユーザで実行してみると
$ id -u 1000 $ make run ENTER EXAMPLE NAME: root_user_check [INPUT ] root_user_check [TARGET] root_user_check [SCRIPT] /workspaces/try-shellscript/basic/root_user_check/root_user_check.sh ===== START [/workspaces/try-shellscript/basic/root_user_check/root_user_check.sh] ===== non-root user ===== END [/workspaces/try-shellscript/basic/root_user_check/root_user_check.sh] ===== DONE
rootユーザで実行してみると
$ sudo su # id -u 0 $ make run ENTER EXAMPLE NAME: root_user_check [INPUT ] root_user_check [TARGET] root_user_check [SCRIPT] /workspaces/try-shellscript/basic/root_user_check/root_user_check.sh ===== START [/workspaces/try-shellscript/basic/root_user_check/root_user_check.sh] ===== root user ===== END [/workspaces/try-shellscript/basic/root_user_check/root_user_check.sh] ===== DONE
ちゃんと判別できていますね。
参考情報
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場