2012-06-12 150 views
0

我有一個程序通過SSH運行某些命令。一些命令是靜態的(總是相同的),而另一些命令則在運行之間改變。該程序使用私鑰連接到服務器,並且授權密鑰被鎖定以強制命令「sh run_script.sh」。只運行多個內聯命令的第一個Bash命令

如果run_script.sh與一組靜態命令相匹配,或者以某種方式(對於非靜態命令)開始,run_script.sh將只運行$ SSH_ORIGINAL_COMMAND。

的問題是,像

allowedCommand arg1 arg2 && rm -r ~/ 

可能會漏網之魚。

是否有可能讓bash只運行第一個命令,並忽略管道後​​的任何內容或& & &?

回答

1

您可以將包裝腳本設置爲登錄shell(而不是/bin/bash),並使用sed或其他東西來剝離不需要的部分。它可能會出現誤報,並且可能會因包含空白和其他情況的參數而失敗(請參閱BashFAQ/050)。

此方法可能會引入無法預料的安全問題。

使用由ssh,sudo,受限制的外殼(如rbash)和操作系統提供的其他安全設施組合提供的安全功能會更好。