Users如何獲取啟動
如何獲取啟動sudo
的使用者名
我的問題:我有一個 Python 程序,使用者使用
sudo
. 有時我必須得到使用者的家,而我只知道它的名字就可以做到這一點:import pwd pwd.getpwnam(username)
那麼:如何獲取啟動程序的使用者名?
當您通過
sudo
設置幾個環境變數啟動某些東西時,特別是我認為您正在尋找SUDO_UID
. 通過訪問環境變數的常用渠道執行的任何程序都應該可以訪問這些。您可以從 shell 中查看通過像這樣作弊設置的其他內容:
sudo env | grep SUDO
這是我目前用於覆蓋 systemd (=“root”)、sudo、pkexec 和正常執行的內容。肯定可以變得更漂亮:
import os import shutil import getpass import pwd def get_user(): """Try to find the user who called sudo/pkexec.""" try: return os.getlogin() except OSError: # failed in some ubuntu installations and in systemd services pass try: user = os.environ['USER'] except KeyError: # possibly a systemd service. no sudo was used return getpass.getuser() if user == 'root': try: return os.environ['SUDO_USER'] except KeyError: # no sudo was used pass try: pkexec_uid = int(os.environ['PKEXEC_UID']) return pwd.getpwuid(pkexec_uid).pw_name except KeyError: # no pkexec was used pass return user
➜ ~ python3 /home/mango/getuser.py mango ➜ ~ sudo python3 /home/mango/getuser.py mango ➜ ~ pkexec python3 /home/mango/getuser.py mango