概要
以下、よく忘れるので自分用のメモです。
たまにシェルスクリプトの説明とかで、「このスクリプトは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)"-ne0];thenecho -e "non-root user"exit1fiecho -e "root user"} _exec
一般ユーザで実行してみると
$ id -u1000 $ 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 -u0 $ 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
ちゃんと判別できていますね。
参考情報
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場