gpt4 book ai didi

python - 如何确定 Python 脚本作为哪个用户和组运行?

转载 作者:IT老高 更新时间:2023-10-28 20:50:18 30 4
gpt4 key购买 nike

我的 CGI 脚本在 Web 服务器错误日志的堆栈跟踪中收到 "IOError: [Errno 13] Permission denied" 错误。

作为调试此问题的一部分,我想在脚本中添加一点代码,以将脚本运行的用户和(尤其是)组打印到错误日志(可能是 STDERR)中。

我知道我可以将值打印到 sys.stderr,但我如何确定脚本运行的用户和组?

(我对组特别感兴趣,所以 $USER 环境变量无济于事;CGI 脚本设置了 setgid 位,因此它应该作为组“list”运行网络服务器的“www-data”——但我需要代码来看看这是否真的发生了。)

最佳答案

import os, getpass
print getpass.getuser()

考虑以下脚本。

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

考虑运行脚本。

$ python ./foo.py

结果

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

现在运行

$ sudo -u apache python ./foo.py

结果

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

如您所见,这两个调用 os.getlogin()getpass.getuser() 不是一回事。基本原理是linux/和其他unix如何管理运行用户。

考虑

$ id -u

1000

vs 正在运行的进程的有效id。

$ sudo -u apache id -u

33

注意:这正是 Web 服务器启动时所做的事情。他们正在创建一个沙箱(通过 fork /分离 psudo 终端等),并以另一个用户身份运行。要深入了解这里发生的事情:参见 Advanced Programming in the UNIX environment 中的“守护进程”一章。书。

Another good thread关于这个主题。

关于python - 如何确定 Python 脚本作为哪个用户和组运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3042304/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com