aav*_*ram 6 python linux bash sudo
我正在尝试将 python 路径值添加到不同的环境,因为我与另一个用户一起运行的某些脚本需要设置它。
现在,奇怪的是,当我运行时sudo -E,我的envdo 中的变量会传递给我要访问的用户sudo- 除了 PYTHONPATH 没有。
跑步:
TESTVAR=testValue sudo -E bash -c 'echo $TESTVAR'
Run Code Online (Sandbox Code Playgroud)
将打印“testValue”,但是:
PYTHONPATH=testValue sudo -E bash -c 'echo $PYTHONPATH'
Run Code Online (Sandbox Code Playgroud)
不会打印任何东西。
我试图了解特定变量是否有什么特别之处,当将它们传递到不同的环境时,sudo 的行为会有所不同。
帮助将不胜感激,谢谢。
因为PYTHONPATH在 的sudo“坏”变量的默认表中要从环境中删除(如果没有明确保留env_keep)。
从源代码plugins/sudoers/env.c文件sudo:
/*
* Default table of "bad" variables to remove from the environment.
* XXX - how to omit TERMCAP if it starts with '/'?
*/
static const char *initial_badenv_table[] = {
"IFS",
.
. (Truncated)
.
"PYTHONHOME", /* python, module search path */
"PYTHONPATH", /* python, search path */
"PYTHONINSPECT", /* python, allow inspection */
"PYTHONUSERBASE", /* python, per user site-packages directory */
"RUBYLIB", /* ruby, library load path */
"RUBYOPT", /* ruby, extra command line options */
NULL
};
Run Code Online (Sandbox Code Playgroud)
如您所见PYTHONPATH,就在那里。
在运行时实现此功能的已编译二进制文件是/usr/lib/sudo/sudoers.so.