将外部变量注入到Linux shell脚本中最安全的方法是什么,该脚本反过来通过SSH执行代码



我需要编写一个Linux shell脚本,它看起来像这样——它将由一个作业调度工具执行,普通终端用户可以在该工具中配置$1$2:

SERVER=$1
OPTIONS=$2
ssh -t remote_user_name@$SERVER 'ksh -lc "remote_command_name $OPTIONS"'

看着这里,我可以看到我需要小心如何写这篇文章,以避免"注入";问题。

(更不用说,在单引号内,我现在实际上没有$OPTIONS插值。(

在我的情况下,remote_command_name的可接受选项如下:

  1. --help
  2. config_file_path_to_run_against
  3. --verbose config_file_path_to_run_against

我不是一个真正的Linux用户——我如何获得$OPTIONS插值,并尽可能地最小化";注入";漏洞(请注意,调度工具的配置面板已经在登录墙后面,如果被破坏,可能意味着有人已经在横冲直撞。但在可能的范围内,我希望避免成为为调度工具编写内容的人,该工具将钓鱼用户帐户变成杠杆,以提升其调度或提供的机器的野生特权对于恶意的最终用户来说,这是一个方便的权限提升杠杆。(

FWIW,看起来两台机器上选择的shell都默认为ksh

好的,到目前为止,我已经走到了这一步——插值正在工作。

是。。。安全吗?

SERVER=$1
OPTIONS=$2
REMOTE_COMMAND_DBL_QUOT=""remote_command_name $OPTIONS""
LOCAL_COMMAND="ksh -lc $REMOTE_COMMAND_DBL_QUOT"
ssh -t remote_user_name@$SERVER $LOCAL_COMMAND

最新更新