通过 SSH 的远程命令和受限 Shell

通过 SSH 的远程命令和受限 Shell

我正在一个 ssh 服务器上工作,我唯一希望用户做的事情就是

ssh user@ip cat somefile

我的威胁缓解计划的一部分是为用户提供受限的 bash

我看过示例,chsh rbash但在我的服务器上找不到 rbash。所以我做了一个脚本“rbash”

    #!/bin/bash
    bash -r

bash -r 是启动受限 shell 的选项,因此我将此脚本放在 /bin 中。然后跑了chsh user -s /bin/rbash

现在我可以ssh user@ip进入服务器并发现自己处于受限 shell 中,但是当我尝试ssh user@ip cat somefilessh 进程时卡在debug1: sending command: cat somefile

我以正确的方式处理这件事吗?当我通过 ssh 登录时cat somefile,如何使该命令远程工作并保留受限 shell?

其他可能相关的信息

  • 操作系统 Fedora 29
  • ssh 验证方法公钥

答案1

创建rbash

如果您在手册页中一直向下滚动,bash您会找到以下章节RESTRICTED SHELL

如果 bash 以名称 rbash 启动,或者在调用时提供了 -r 选项,则 shell 会受到限制。

要使用名称“rbash”启动 bash,您可以创建一个符号链接ln -s /bin/bash /bin/rbash

限制用户cat somefile

man authorized_keys

command="command"
    Specifies that the command is executed whenever this key is used for
    authentication.

您可以调整您的authorized_key 文件:

command="cat somefile" KEY_TYPE KEY COMMENT

现在这个用户组合键只能运行cat somefile

为什么你的包装器不起作用

您的脚本运行bash -r但不执行您的命令cat somefile。您可以看到输入set -xe脚本时会发生什么:

#!/bin/bash
set -xe
bash -xer

这表明它bash没有被卡住,而是在等待输入,并且您确实生成了两个 shell。它没有提示,但可以执行命令:

$ ssh user@ip cat somefile
+ /bin/bash -r

ls 
+ ls
somefile
exit
+ exit
exit
+ exit
$

您可以将命令通过管道传输到此 shell,但这不是一个好的解决方案:

ssh user@ip <<< 'cat somefile'

相关内容