如何configurationsudoers始终保持LD_LIBRARY_PATH环境variables?

不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.4p5CentOS 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

为了得到这个工作,我必须这样做:

  1. 向sudoers添加Defaults env_keep += "LD_LIBRARY_PATH"
  2. 在我的.bashrc文件中添加这个别名: 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