不pipe我尝试什么,似乎在使用sudo运行一个命令后, LD_LIBRARY_PATH环境variables不会保留。 我设法让它坚持下来的唯一方法是每当我从命令行调用sudo
命令时,用LD_LIBRARY_PATH=/the/path
来加前缀,但是我不想每次都这样做。
看来env_keep选项忽略了这个variables,exempt_group选项也是如此。
我的%组目前拥有ALL=(ALL) NOPASSWD:ALL
作为sudoers的访问权限。 我希望这个特定的环境variables能够保存我运行的任何命令。
我怎样才能做到这一点?
我的服务器正在运行红帽企业版Linux 5.7。
你可能期望你可以使用这个
Defaults env_keep += "LD_LIBRARY_PATH FRED"
但在Sudo version 1.7.4p5
的CentOS 6.2
上快速testing不会传递LD_LIBRARY_PATH
但会传递FRED
。 sudoers手册页有这个说
请注意,大多数操作系统上的dynamic链接器将删除这些variables 可以控制setuid可执行文件的环境dynamic链接,包括 须藤。 根据操作系统的不同,这可能包括_RLD,DYLD_,LD_, LDR_,LIBPATH,SHLIB_PATH等。 这些types的variables被从中删除 sudo之前的环境甚至开始执行,因此不是 可能sudo保存它们
所以看起来像sudo发现它之前系统从环境中删除LD_LIBRARY_PATH
。
为了得到这个工作,我必须这样做:
Defaults env_keep += "LD_LIBRARY_PATH"
alias sudo='sudo LD_LIBRARY_PATH=/mypath'
现在我用sudo调用的任何命令都会有variables设置。
这听起来像你还没有完成export LD_LIBRARY_PATH
。 这样做会使环境variables可用,解决你遇到的这个问题。
或者,如果你想要一个可靠的持久环境variables,可以把它追加到你的bashrc
( ~/.bashrc
)文件中,然后打开一个新的terminal会话。
这种情况不仅发生在LD_LIBRARY_PATH上,还有一些其他的环境variables可能会随着构build环境的变化而变化。 就我而言,sudo已经成为:
sudo -HE env PATH=${PATH} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} PYTHONPATH=${PYTHONPATH} my_command