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

Yan*_*ard 4 redhat sudo environment-variables

无论我尝试什么,在我使用 sudo 运行命令后,似乎都没有保留LD_LIBRARY_PATH环境变量。我设法让它坚持下去的唯一方法是每当我sudo从命令行LD_LIBRARY_PATH=/the/path调用它时在我的命令前加上前缀,但我不想每次都这样做。

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

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

我怎样才能做到这一点?

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

use*_*517 14

你可能希望你可以使用

Defaults env_keep += "LD_LIBRARY_PATH FRED" 
Run Code Online (Sandbox Code Playgroud)

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

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

所以看起来系统LD_LIBRARY_PATH在 sudo 看到它之前从环境中删除了它。

  • 这并不是 sudo 的问题,因为它永远无法看到 LD_LIBRARY_PATH。我会将我想在脚本中运行的命令包装起来,并在 secipt 中设置环境变量。 (2认同)

Yan*_*ard 5

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

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

现在我用 sudo 调用的任何命令都将具有变量设置。