远程 Linux Shell 非常有限的默认解决方案

远程 Linux Shell 非常有限的默认解决方案

我有一个用户需要连接到远程机器M(通过 ssh)并在一组固定的命令中运行一个(N总共)。

这些命令依赖于python、其库以及对网络的特权访问(哪台机器M具有)。

是否存在默认策略来限制 Linux 用户 shell 仅执行这些N命令,而没有任何可能性:

  • 进一步访问 fs
  • 读取命令本身的内容
  • 获取网络特权访问权限
  • 和类似的

换句话说,用户登录后向用户提示有限的控制台的默认策略是什么,例如仅允许输入1和之间的数字N

答案1

在 authorized_keys 文件中有一个巧妙的技巧,您可以使用命令选项来定义登录时要运行的命令,由密钥标识,因此如果您的 N 个命令是静态的 - 您可以在服务器上定义它们,然后就可以了。它不会限制网络,只会启动命令。它在 authorized_keys 文件中看起来会像这样:

command = "date" ssh-rsa AAAA

您可以找到有关此内容的更多信息教程

为了阻止用户访问网络 - 您可以使用 SELinux 或其他类似软件,也可以编写 eBPF 钩子来允许您想要的操作。

答案2

我们假设这不是一个仅包含他们需要的微型 chroot 或容器,而是一个通用的多用户操作系统。

如果自动化程度足够高,可能就不需要登录主机了。也许可以通过一些自助系统提供这些有限的选项,而这正是自动化所做的。

为了让它们在主机上执行操作,请尝试我称之为“强制文本菜单”的东西。您可能需要编写一个脚本。

严格限制某人做其他事情需要一些技巧。

  • 以非特权用户身份登录,最好是该用户独有的。使用 doas 或 sudo 等工具升级特权。
  • 授权此菜单是与 OpenSSHForceCommand块一起运行的。
  • 还可以从 shell 配置文件中执行它。exec 因此它会替换 shell 进程,并且当菜单退出时,它们的会话也会退出。
  • 在菜单脚本中捕获信号。
  • 小心那些可以运行任意命令的程序。攻击很容易在 vim 中,命令是:shell
  • 编写并使用作为菜单项包装脚本,以实现更复杂的操作或对输出的更多控制。

选择脚本语言来编写菜单。考虑使用现有的文本菜单库。输入循环本身并不困难,但使其强大、易于修改且具有良好的用户体验才是您在生产中真正想要的。

相关内容