[英]Get parent user after sudo with Python
我希望在Python中使用sudo
命令后獲取父用戶。例如,從shell我可以做到:
# Shows root; *undesired* output
$ sudo whoami
root
# Shows parent user sjcipher, desired output
$ sudo who am i
sjcipher
如何在不使用外部程序的情況下在Python中執行此操作?
在大多數情況下,應該提供SUDO_USER環境變量:
import os
if os.environ.has_key('SUDO_USER'):
print os.environ['SUDO_USER']
else:
print os.environ['USER']
who am i
從utmp(5)
獲得了它的信息utmp(5)
; 使用Python,您可以使用pyutmp訪問信息;
這是一個例子,改編自pyutmp
主頁:
#!/usr/bin/env python2
from pyutmp import UtmpFile
import time, os
mytty = os.ttyname(os.open("/dev/stdin", os.O_RDONLY))
for utmp in UtmpFile():
if utmp.ut_user_process and utmp.ut_line == mytty:
print '%s logged in at %s on tty %s' % (utmp.ut_user, time.ctime(utmp.ut_time), utmp.ut_line)
$ ./test.py
martin logged in at Tue Jul 1 21:38:35 2014 on tty /dev/pts/5
$ sudo ./test.py
martin logged in at Tue Jul 1 21:38:35 2014 on tty /dev/pts/5
缺點:這是一個C模塊(即需要編譯),只適用於Python 2(而不是3)。
也許更好的選擇是使用sudo
提供的環境變量? 例如:
[~]% sudo env | grep 1001
SUDO_UID=1001
SUDO_GID=1001
[~]% sudo env | grep martin
SUDO_USER=martin
所以使用像os.environ['SUDO_USER']
這樣的東西可能會更好,這取決於你正在嘗試做什么。
根據設置,您可以使用已設置的環境變量。 請注意,這可能不適用於所有情況,但可能在您的情況下。 應該在su之前返回原始用戶。
import os
print os.environ["USER"]
這是一個可以做到的單線程。
user = os.environ['SUDO_USER'] if 'SUDO_USER' in os.environ else os.environ['USER']
os.getlogin()
或os.getenv('SUDO_USER')
看起來都是不錯的選擇。
[vagrant@localhost ~]$ sudo python3.6
Python 3.6.3 (default, Oct 11 2017, 18:17:37)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.getlogin()
'vagrant'
>>> os.getenv('SUDO_USER')
'vagrant'
>>> os.getenv('USER')
'root'
>>> import getpass
>>> getpass.getuser()
'root'
如前所述 ,您可以使用getpass模塊
>>> import getpass
>>> getpass.getuser()
'kostya'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.