具有shellshock固定bash版本的非导入环境变量

时间:2014-10-21 15:37:20

标签: linux bash shellshock-bash-bug

我有一个简单的bash脚本,它修改了后续二进制文件将使用的环境变量。贝娄我的基本脚本:

#!/bin/bash
export DBROOT="NEW_DIRECTORY" 
export TERM=xterm
su  -c " <test_process> " - omni

DBROOT变量由“test_process”用作环境变量。此外,DBROOT定义为另一个值“OLD_DIRECTORY”作为全局环境变量。该脚本的目标是强制“test_process”使用NEW_DIRECTORY值(导出值)。

使用未修补的bash版本,测试工作正常。但是,在对bash上的shellshock bug进行修补之后,test_process不会读取DBROOT的导出值和全局环境变量。就像“test_process”忽略了导出变量和全局变量一样。

我没有“test_process”的源代码。 bash版本是版本2.05b.0(1)-release (rpm版本是bash-2.05b-41.7.i386.rpm)我在 Red Hat Enterprise Linux AS上运行第3版

更新 通过设置编译时定义

重新编译bash 2.05b最后的源代码

#define NON_INTERACTIVE_LOGIN_SHELLS

脚本再次起作用。 如果没有这个定义,bash会在-命令

之后误解su个字符

1 个答案:

答案 0 :(得分:4)

这是你正在使用的非常古老的软件。

我建议尝试:

su -c "DBROOT='NEW_DIRECTORY' TERM='xterm' <test_process> " - omni

这会将环境设置移动到由su运行的shell,而不是依靠su来传播环境。