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.
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.