Users

如何獲取啟動sudo的使用者名

  • December 28, 2020

我的問題:我有一個 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

引用自:https://unix.stackexchange.com/questions/11470