我有一个CGI脚本,它在Web服务器的错误日志中的堆栈跟踪中得到一个"IOError: [Errno 13] Permission denied"
错误。
作为调试这个问题的一部分,我想在脚本中添加一点代码,将脚本运行时的用户和(特别是)组打印到错误日志(大概是STDERR)中。
我知道我可以将值打印到sys.stderr
,但是我如何确定脚本是以哪个用户和组的身份运行的呢?
(我对这个组特别感兴趣,所以$USER
环境变量没有帮助; CGI脚本设置了setgid位,因此它应该作为组“list”而不是Web服务器的“www-data”运行-但我需要代码来查看是否实际发生了这种情况。)
3条答案
按热度按时间vsdwdz231#
字符串
请考虑以下脚本。
型
请考虑运行脚本。
型
结果
型
现在运行
型
结果
型
正如你所看到的,你这2个调用
os.getlogin()
和getpass.getuser()
不是一回事。基本的原则是linux/和其他unix如何管理运行中的用户。考量
型
1000
与正在运行的进程的有效ID进行比较。
型
33
注意:这正是web服务器在启动时所做的。他们正在创建一个沙盒(通过分叉/分离psudo终端等),并作为另一个用户运行。要深入了解这里发生的事情,请访问:请参阅《Advanced Programming in the UNIX environment》一书中有关“后台进程”的章节。
Another good thread的主题。
4bbkushb2#
你可以使用下面的代码:
字符串
46qrfjad3#
os.getgid()
和os.getuid()
可以是有用的。对于其他环境变量,请查看os.getenv
。例如,我的Mac OS X上的os.getenv('USER')
会传回使用者名称。os.getenv('USERNAME')
将返回Windows计算机上的用户名。