如何配置 sudoers 以始终保持 LD_LIBRARY_PATH 环境变量?

如何配置 sudoers 以始终保持 LD_LIBRARY_PATH 环境变量?

无论我怎么努力,似乎LD_LIBRARY_PATH使用 sudo 运行命令后,环境变量不会保留。我设法让它保留下来的唯一方法是,每当我从命令行调用命令时,sudo在我的命令前面加上LD_LIBRARY_PATH=/the/path,但我不想每次都这样做。

似乎 env_keep 选项忽略了这个变量,exempt_group 选项也是如此。

我的 %group 目前ALL=(ALL) NOPASSWD:ALL在 sudoers 中具有访问权限。我希望这个特定的环境变量能够保留在我运行的任何命令中。

我怎样才能做到这一点?

我的服务器正在运行 Red Hat Enterprise Linux 5.7。

答案1

您可能希望使用

Defaults env_keep += "LD_LIBRARY_PATH FRED" 

CentOS 6.2但是对with 的快速测试Sudo version 1.7.4p5没有通过LD_LIBRARY_PATH,但确实通过了FRED。 sudoers 手册页有这样的说法

请注意,大多数操作系统上的动态链接器将删除
可以从 setuid 可执行文件的环境中控制动态链接,包括
sudo。根据操作系统的不同,这可能包括 _RLD、DYLD_、LD_、
LDR_、LIBPATH、SHLIB_PATH 等。这些类型的变量已从
在 sudo 开始执行之前,环境就已经存在,因此,
sudo 可以保留它们

因此看起来系统LD_LIBRARY_PATH在 sudo 看到它之前就将其从环境中删除了。

答案2

为了让它发挥作用,我必须这样做:

  1. 添加Defaults env_keep += "LD_LIBRARY_PATH"到 sudoers
  2. 在我的 .bashrc 文件中添加此别名:alias sudo='sudo LD_LIBRARY_PATH=/mypath'

现在,我使用 sudo 调用的任何命令都会设置变量。

答案3

这不仅发生在 LD_LIBRARY_PATH 上,还发生在其他一些可能影响构建环境的环境变量上。在我的例子中,sudo 已变成:

sudo -HE env PATH=${PATH} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} PYTHONPATH=${PYTHONPATH} my_command

答案4

听起来你export LD_LIBRARY_PATH还没有完成。这样做将使环境变量对所有内容都可用,并解决你遇到的这个问题。

或者,如果您想要一个万无一失的持久环境变量,请考虑将其附加到您的bashrc~/.bashrc)文件中,然后打开一个新的终端会话。

相关内容