我正在一个 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 somefile
ssh 进程时卡在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'