【发布时间】:2018-11-09 19:03:08
【问题描述】:
[root@hostname ~]# python script.py # allow this
[user@hostname ~]$ sudo python script.py # deny this
[user@hostname ~]$ sudo -E python script.py # deny this
[user@hostname ~]$ sudo PATH=$PATH python script.py # deny this
[user@hostname ~]$ python script.py # kindly refuse this
我正在尝试实现上述行为。如果您关心原因或示例不够充分,请进一步阅读。很抱歉言辞犀利,但我的大多数 Stack Exchange 问题都得到了敌对的问题而不是答案。
这个问题源于需要管理员来运行我的脚本,但脚本的性质需要root 的环境变量(而不是sudo 的)。
我对此进行了深入研究...below is from this answer
if os.geteuid() == 0:
pass # sufficient to determine if elevated privileges
但后来我开始需要在我的脚本中访问PATH。我注意到了
sudo -E env | grep PATH; env | grep PATH
打印不同的PATH 值。我发现这是因为PATH 的安全策略。我还发现the workaround 到PATH 是sudo PATH=$PATH ...
但是,它不是唯一受策略保护的环境变量,在这一点上,为什么要将此环境变量枚举推送给脚本用户?似乎明确要求root 是最好的方法,否则只需警告管理员在脚本中明确使用root。
有没有这种方法可以用 Python 区分 root 和 sudo?
【问题讨论】:
-
根提示符应以“#”结尾。
-
@IgnacioVazquez-Abrams 已修复,我很傻。谢谢
-
@IgnacioVazquez-Abrams 不必。根提示以 PROMPT 变量告诉它的任何结尾。
-
“但是脚本的性质需要root的环境变量(而不是sudo的)”——然后检查你需要的环境变量?
-
@JaredSmith 使用
username = commands.getoutput("echo $(whoami)")作为sudo返回root
标签: python environment-variables python-2.x sudo rhel