我需要在 Solaris 10 上通过 sudo 执行命令,并且需要将两个环境变量传递给该命令。这件事必须做在/bin/sh
,不bash
,不ksh
。
这在 Linux 上是可能的,那里存在一些选项,但它们在Solaris 上不起作用,因为Solarissudo
不支持-E
我们在Linux 上的交换机。安装更现代版本的 sudo 也不是一个真正的选择。
我能想到的唯一解决方法是将命令与变量一起放入脚本中,例如
#!/bin/sh
a=foo
b=bar
export a
export b
my_command
然后通过 sudo 执行该脚本。然而,这种方式规避了安全性,因为现在我需要通过 sudo 允许该脚本,这是不好的做法,因为脚本可以编辑,所以我无法控制我实际授予的内容。
有任何想法吗?
编辑:我想传递的变量是 LD_PRELOAD LD_LIBRARY_PATH。由于通过 sudo 的命令是在单一用途 chroot 中执行的,因此我能够将变量引用的库复制到标准位置,覆盖一些“系统”库。请注意,这通常不是一个好的做法(我强烈建议不要这样做),但是在这种情况下 - 单一目的 chroot - 我发现它是一个务实的解决方案。