2017-05-12 5 views
2

以下のようにスクリプトを実行しようとしていますが、このスクリプトを実行しているsudoユーザーにアクセスしたいとします。Pythonでsudo usernameを取得するには?

:$sudo -u usergroup script.py 

ここで、私は出力として 'usergroup'を期待しています。私が試してみました何 は、

  • GETPASSです:これはあなたの実際のユーザーではなくsudoのユーザー

を与えます。

:$ sudo -u usergroup ipython 

In [1]: import getpass 

In [2]: getpass.getuser() 
Out[2]: 'akshay' 
  • os.getenv

In [4]: os.getenv("SUDO_USER") 
Out[4]: 'akshay' 

In [5]: os.getenv("USER") 
Out[5]: 'akshay' 

私は以下のPythonバージョンを使用しています。

In [7]: sys.version 
Out[7]: '2.7.11 (default, Apr 25 2016, 09:27:56) \n[GCC 5.2.1 20150902 (Red Hat 5.2.1-2)]' 

In [8]: 

ここをクリックしてください。既存の質問や解決策を見つけられませんでした。

+0

サーバーでsudoとしてコマンドを実行しようとしていますか?またはsudoに関する情報を取得するだけですか? – JacobIRR

+0

ロギングの情報を取得するだけです。 – Akshay

+0

あなたの質問が分からない場合、コードはうまくいきます。 – McGrady

答えて

5

effective user id(ほとんどのアクセスチェックで使用されます)を取得するには、os.geteuidを使用する必要があります。

その後
>>> import os 
>>> os.geteuid() 
0 

、UIDに関する情報を取得するためにpwd.getpwuidに戻り値を渡しが返さ:効果的なユーザーのユーザー名を取得するpwd.getpwuid()

>>> import pwd 
>>> pwd.getpwuid(os.geteuid()) 
pwd.struct_passwd(pw_name='root', pw_passwd='x', ...) 

アクセスpw_name属性(または[0])。

>>> pwd.getpwuid(os.geteuid()).pw_name 
'root' 
>>> pwd.getpwuid(os.geteuid())[0] 
'root' 

os.getegid + grp.getgrgidを使用し、効果的なグループ情報を取得します。

>>> grp.getgrgid(os.getegid()) 
grp.struct_group(gr_name='root', gr_passwd='x', gr_gid=0, gr_mem=[]) 
>>> grp.getgrgid(os.getegid()).gr_name 
'root' 
+0

私のusecaseのための完璧なソリューション、infact後で1つのライナー 'pwd.getpwuid(os.geteuid()).pw_name' – Akshay

関連する問題