SSH Bash 监狱会话

SSH Bash 监狱会话

我见过一些游戏隧道服务提供商在登录时将客户的帐户限制在信息屏幕上,并且任何输入都会被忽略。 Ctrl+C 关闭 SSH 会话并断开连接。这基本上会监禁用户,但会维护隧道。

这让我很好奇它是如何做到的。有谁知道如何做到这一点?

答案1

我想您可以通过将用户的登录 shell 设置为非常受限制的内容来实现此目的,例如“睡眠假人外壳“。引用它的网站,

这是一个简单的不执行任何操作、永远睡眠的程序,可以用作登录 shell(在 Linux 或 Unix 中)以保持连接打开,但没有交互式 shell。我们使用它为仅将其用于 SSH 隧道的用户创建 SSH 帐户;创建到我们服务器的加密隧道[...]

大多数受限 shell 仍然允许从 SSH 帐户执行本地命令。将帐户 shell 设置为类似的内容/bin/false(或任何其他简单程序)通常不起作用,因为一旦程序完成执行,隧道就会关闭。 Sleep Dummy Shell 只是休眠,直到用户终止其执行或隧道关闭。

你明白了,一个简单的程序就完成了部分任务,sleepshell.c大约有 20 行 C 代码。

我不确定这是否足够安全ssh <server> /bin/bash,例如,这对于使用或类似意味着什么。

请参阅此答案(作者:michael-n)以获取更多提示和信息。

答案2

有一些快速简单的方法可以使用 bash 作为 shell 来完成此操作,但它们不是很安全。 (过去几年中,authorized_keys“command”指令以及 Bash 的环境变量发现了几个安全缺陷。现在应该是安全的,除非还有另一个潜伏的错误......)

如果您想安全地执行此操作,但仍想在 bash 中编写脚本来显示输出,我建议编写一个小型 C 程序作为 shell,运行并显示 bash 脚本的输出。 C 程序应该忽略它的参数并将其环境重置为安全的默认值,然后使用 STDIN 为 /dev/null 来 fork/exec() bash 脚本。这样用户绝对没有办法与脚本交互。如果您需要,我可以提供一个例子。

相关内容