How to determine what user and group a Python script is running as? How to determine what user and group a Python script is running as? python python

How to determine what user and group a Python script is running as?


import os, getpassprint getpass.getuser()

Consider the following script.

---- foo.py ---- import os, getpassprint "Env thinks the user is [%s]" % (os.getlogin());print "Effective user is [%s]" % (getpass.getuser());

Consider running the script.

$ python ./foo.py

results in

Env thinks the user is [jds]Effective user is [jds]

now run

$ sudo -u apache python ./foo.py

results in

Env thinks the user is [jds]Effective user is [apache]

As you can see, you these 2 calls os.getlogin() and getpass.getuser() are not the same thing.The underlying principle is how linux/and other unix's manages the running user.

Consider

$ id -u

1000

vs the effective id of the running process.

$ sudo -u apache id -u

33

Note: this is exactly what web servers are doing when they start up. They are creating a sandbox (by forking/divorcing the psudo terminal etc), and running as another user. For an in-depth account of what is going on here: see the chapter on 'daemon processes' in the Advanced Programming in the UNIX environment book.

Another good thread on the subject.


You can use the following piece of code:

import osprint(os.getegid())


os.getgid() and os.getuid() can be useful. For other environment variables, look into os.getenv. For example, os.getenv('USER') on my Mac OS X returns the username. os.getenv('USERNAME') would return the username on Windows machines.