如果禁用用户登录和 ssh 密码,rbash 是否安全?

如果禁用用户登录和 ssh 密码,rbash 是否安全?

我有一台服务器,想将其用作远程和本地端口转发的 SSH 网关。我不希望在其上执行任意命令,只希望执行我的脚本。

我不断阅读有关受限 shell 如何容易被突破的文章,但如果出现以下情况,rbash 是否足够好:

  • 用户没有密码(因此他/她无法登录到 shell)
  • ssh 密码已禁用(因此需要密钥)
  • PATH=~/usr/bin(仅限此,因此无法执行其他地方的文件)
  • ~/.ssh/authorized_keys 中的条目前缀为: command="cmd_handler",no-pty,permitopen="127.0.0.1:*",permitopen="localhost:*",no-agent-forwarding,no-X11-forwarding

“cmd_handler” 是一个 rbash shell 脚本,可以根据从 stdin 传输到 ssh 的内容执行几项不同的特定操作。它位于 ~/usr/bin 文件夹中,并附带指向其所需可执行文件的符号链接,具体来说foldheadncsedssh-keygen、 、teetr~/usr/bin 是 PATH 中唯一的文件夹,因此这些是唯一可用的命令。

用户是组所有者,对需要访问的任何文件或文件夹(包括 ~/usr/bin 文件夹)具有只读访问权限。用户不是所有者,对 ~/.ssh 和 ~/.ssh/authorized/keys(必需)以外的任何文件和文件夹没有写入权限。

我不认为这会给系统带来任何风险,因为远程计算机可以执行的唯一命令是“cmd_handler”。如果远程用户确实可以执行另一个命令,那么可用的方法就不多了。 、teesed理论上ssh-keygen有可能修改 ~/.ssh/authorized_keys 以执行任意命令,但即使他们可以,周围可用的也只有这七个命令,如果他们将某些内容写入 /tmp 或 ~/.ssh,也不会有什么影响,因为 rbash 不会执行 PATH 之外的任何内容。

所以,回到最初的问题:这对于我想要做的事情来说足够好吗,或者我真的需要研究 AppArmor 之类的东西吗?我想要一个解释特定漏洞的答案,而不是关于每个人都知道 rbash 很容易被破解之类的一般性陈述。这可能是真的,但它是否特别不安全应用?

答案1

拥有使用不受信任的用户输入的脚本基本上意味着您在该会话中拥有一个完整的 shell 用户(如果脚本的解析例程中存在漏洞)。因此,您的“PATH”设置实际上没有起作用。

此外,您的authorized_keys密钥前缀允许远程用户打开到机器上任何本地端口的连接,这可以用来利用环境(如果您有一个在环回接口上监听的弱本地服务)。

要正确回答您的问题(并突出显示特定漏洞),需要查看您正在运行的脚本以及它如何处理输入,因为这将是您案例中的主要利用载体。但是,如果您正在构建一个可靠的环境,我建议不要依赖“拒绝列表”方法(当您试图阻止所有坏东西时),而是使用“允许列表”方法(当您明确定义允许的内容时,使用默认隐式拒绝)。不过,对于您的情况,假设您想使用 bash 脚本,我会研究 MAC 解决方案,例如 SELinux,我会为帐户分配一个 SELinux 用户,并为该用户运行的进程定义一个受限域。

相关内容