ジョブ管理ツールなどで、外部からPythonを実行すると、パーミッション関連のエラーがよく起こる。そういった場合は、Pythonを実行しているユーザーを確認する。osモジュールのgeteuid関数ではEUID、getuid関数ではUIDを確認できる。
UIDはユーザやプロセスを特定させるIDで、EUIDは、権限を特定させるID。一般ユーザがrootユーザの権限がコマンドを実行する際に、”sudo”などを利用して権限を一時的に昇格させた場合、ログイン中にUIDを変えることができないが、EUIDを変えられる。よって、UIDはユーザやプロセスを特定させるIDで、EUIDは、権限を特定させるID、ということになるのでUIDが0であればrootユーザ、EUIDが0であればrootユーザの権限と言うことになる。
import os
# 実行UID(EUID)確認
euid = os.geteuid()
print(euid)
# UID確認
uid = os.getuid()
print(uid)
下記は、上記コードの出力結果(自分の開発環境内)。IDなので数値が出力される。
1002 # EUID
1002 # UID
この値がどのユーザーにあたるかは、”\etc\passwd”のファイルの中身を確認するばよい。
sudo cat \etc\passwd
今回の場合だと、”1002″なのでtestユーザーで実行されたことがわかる。
root:x:0:0:root:/root:/bin/bash
・
・
・
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
ssm-user:x:1001:1001::/home/ssm-user:/bin/sh
postgres:x:111:116:PostgreSQL administrator :/var/lib/postgresql:/bin/bash
test:x:1002:1002:,,,:/home/webapp:/bin/bash
この他にも、osモジュールにはプロセスの制御端末にログインしているユーザー名を返す関数などもある。
記事を読んでいただきありがとうございました。