无论我尝试什么,似乎在我用sudo运行命令后都没有保存LD_LIBRARY_PATH环境变量.我设法让它坚持的唯一方法是每当我从命令行调用它时,用我的sudo命令前缀LD_LIBRARY_PATH = / / path,但我不想每次都这样做.
似乎env_keep选项忽略了这个变量,exempt_group选项也是如此.
我的%组目前有ALL =(ALL)NOPASSWD:ALL作为其在sudoers中的访问权限.我想为我运行的任何命令保留这个特定的环境变量.
我怎样才能做到这一点?
我的服务器正在运行Red Hat Enterprise Linux 5.7.
解决方法
你可能希望你可以使用它
Defaults env_keep += "LD_LIBRARY_PATH FRED"
但是使用Sudo版本1.7.4p5对CentOS 6.2进行快速测试不会传递LD_LIBRARY_PATH但会传递FRED. sudoers man page有这个说法
Note that the dynamic linker on most operating systems will remove variables that can control dynamic linking from the environment of setuid executables,including sudo. Depending on the operating system this may include _RLD,DYLD_,LD_,LDR_,LIBPATH,SHLIB_PATH,and others. These type of variables are removed from the environment before sudo even begins execution and,as such,it is not possible for sudo to preserve them
所以看起来系统在sudo看到它之前从环境中删除了LD_LIBRARY_PATH.