【Bash / Ruby / Python3】root権限を確認する方法の比較
前書き
自動化Script作成時に、Bash (Shell Script)ではなく、RubyやPython3を用いた方がScriptのメンテナンス負荷が低くなります。自動化Scriptに使用するプログラミング言語変更を目的として、各言語の実装を比較します。
本記事では、root権限を確認する方法を比較します。比較では、実装例および実行例をそれぞれ示します。
Bashではなく、RubyやPython3を使った方が好ましい理由は、以下の記事に記載しています。この記事には、各プログラミング言語の様々な実装(ディレクトリ操作やファイル操作など)を比較した他記事へのリンクを一覧にまとめています。
Bash(Shell Script)からRubyやPythonに乗り換え!頻繁に使う処理を各言語で比較
各言語のVersion
- Bash:GNU bash, バージョン 5.0.3(1)-release
- Ruby:ruby 2.5.5p157 (2019-03-15 revision 67260)
- Python:Python 3.7.3
比較:root権限を確認する方法
自動化Scriptでは、root権限を持つユーザしか実行を許可したくない場合があります。root権限の有無を確認する場合は、実行ID(EUID)とUIDを確認します。実行ID(EUID)は権限を定義するためのIDであり、UIDはユーザやプロセスを特定させるIDです。
通常の環境であれば、rootはEUID / UIDのどちらも0です。より正確に検証する場合は、ユーザ名がrootかどうか等も確認した方が好ましいですが、本記事ではEUIDとUIDのみを確認する方法を紹介します。
以下に、各言語の実装例および実行例を示します。
Bashの場合
1 2 3 4 5 6 7 8 9 10 |
#!/bin/bash # 実行UID(EUID)とUIDを確認し、 # "0"(root)であれば管理者権限を持つ。 # ":-"部分は${EUID}に値が入っていなければ、${UID}の値を代入するという意味 if [ ${EUID:-${UID}} = 0 ]; then echo "管理者権限を持っています。" else echo "このスクリプトの実行には、管理者権限が必要です。" fi |
Rubyの場合
1 2 3 4 5 6 7 8 9 |
#!/usr/bin/env ruby # 実行UID(EUID)とUIDを確認し、 # "0"(root)であれば管理者権限を持つ。 if Process.euid == 0 and Process.uid == 0 puts("管理者権限を持っています。") else puts("このスクリプトの実行には、管理者権限が必要です。") end |
Python3の場合
1 2 3 4 5 6 7 8 9 10 |
#!/usr/bin/env python3 import os # 実行UID(EUID)とUIDを確認し、 # "0"(root)であれば管理者権限を持つ。 if os.geteuid() == 0 and os.getuid() == 0 : print("管理者権限を持っています。") else: print("このスクリプトの実行には、管理者権限が必要です。") |
Bash、Ruby、Python3の実行例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ ./bash.sh このスクリプトの実行には、管理者権限が必要です。 $ sudo ./bash.sh [sudo] nao のパスワード: 管理者権限を持っています。 $ ./ruby.rb このスクリプトの実行には、管理者権限が必要です。 nao@debian:~/scripts$ sudo ./ruby.rb 管理者権限を持っています。 $ ./python.py このスクリプトの実行には、管理者権限が必要です。 $ sudo ./python.py 管理者権限を持っています。 |
ロシア人と国際結婚した地方エンジニア。
小学〜大学院、就職の全てが新潟。
大学の専攻は福祉工学だったのに、エンジニアとして就職。新卒入社した会社ではOS開発や半導体露光装置ソフトを開発。現在はサーバーサイドエンジニアとして修行中。HR/HM(メタル)とロシア妻が好き。サイトに関するお問い合わせやTwitterフォローは、お気軽にどうぞ。
1件の返信
[…] root権限確認 […]