0

我有一个通过 SSH 运行某些命令的程序。一些命令是静态的(总是相同的),而另一些则具有在运行之间变化的参数。程序使用私钥连接服务器,锁定授权密钥强制执行命令“sh run_script.sh”。

run_script.sh 只会在 $SSH_ORIGINAL_COMMAND 匹配一组静态命令时运行,或者如果它以某种方式开始(对于非静态命令)。

问题是类似的东西

allowedCommand arg1 arg2 && rm -r ~/ 

很可能会溜走。

是否可以让 bash 只运行第一个命令,而忽略管道或 && 之后的任何内容?

4

1 回答 1

1

您可能可以将包装脚本设置为登录 shell(而不是/bin/bash),并使用它sed或其他东西来去除不需要的部分。它可能会出现误报,并且对于包含空格和其他情况的参数可能会失败(请参阅BashFAQ/050)。

这种方法可能会引入无法预料的安全问题。

最好将ssh, sudo, 受限外壳等提供的安全功能rbash与操作系统提供的其他安全设施结合使用。

于 2012-06-12T18:02:55.280 回答