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

后端 未结 3 763
执笔经年
执笔经年 2021-01-01 11:10

I have a CGI script that is getting an \"IOError: [Errno 13] Permission denied\" error in the stack trace in the web server\'s error log.

As part of deb

3条回答
  •  一整个雨季
    2021-01-01 11:42

    import os, getpass
    print getpass.getuser()
    

    Consider the following script.

    ---- foo.py ---- 
    import os, getpass
    print "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.

提交回复
热议问题