我有服务器 Alice 和服务器 Bob。Alice 被严格锁定,并且需要保持这种状态。Bob 暴露在公共互联网上。有时我需要让 Bob 在 Alice 上运行脚本。(脚本的起因可能是来自外部用户或 Bob 上的 cron 作业。)
[我拥有这两台机器的完全访问权限]
这对于 SSH 来说很简单。然而,这意味着 Alice 的密钥现在存储在 Bob 身上。如果 Bob 受到攻击,密钥可能会暴露给 Alice。(他们非常担心,物理访问 Bob 可能会将密钥暴露给 Alice。例如,从 Bob 身上拔出驱动器并查看它。Alice 被锁在一个单独的房间里)
我并不想执行任何命令。Alice 上有几个特定的脚本需要我执行。(如果是恶意执行的,它们实际上不会造成任何伤害)
我目前的计划是在 Alice 上安装 Apache2(或其他安全 CGI 接口)并创建可以执行我想要的操作的 CGI 脚本。Bob 可以根据需要调用这些脚本。(我可能会为脚本添加安全性以验证这些脚本是否由 Bob 发送)
因此,为了在 Alice 上启动脚本,我只需从 Bob 向我运行的脚本执行一个 GET 操作。
所以,所有这些都表明:这有意义吗?我在这里忽略了什么明显的东西?
我在这里回答了我自己的问题。但我想确保我做得正确,以免弄得一团糟。
[更详细一点:脚本本身是无害的,但是拥有足够的权限来运行脚本中的命令可能会有问题。想想“rm oldlog”与“rm *”。脚本还留下了更多的审计线索,可以通过直接执行命令来绕过。]
答案1
“Alice 上的 Apache2(或其他安全 CGI 接口)”远远超出您的需要,会增加复杂性,并极大地扩展您的“威胁面”。Bob 上的简单 Perl 脚本,监视触发事件,并监听某个端口上的连接;再加上 Alice 上的请求者 Perl 脚本,连接到 Bob 上的端口并读取事件,会更容易。
我记得《编程 Perl》一书(O'Reilly)中的例子也有类似的东西。
“如果恶意发射,它们不会真正造成任何伤害”?真的吗?如果反复发射它们,速度以颠覆爱丽丝的全部力量所能达到的速度,会怎样?