背景
Smartshell是WEB版本的Xshell黑屏操作,用来解决小团队没有堡垒机的问题。可以集中管控资源,登录凭证,以及对操作有个日志记录。其中试用环境需要一台测试机器,让用户查看页面。

最后使用了自定义shell解决,如下图使用test用户登录进去运行的是自己的shell文件。最后效果如下,输出什么都是shell文件中编辑的。

自定义的bash shell文件如下:
bash
#!/bin/sh
printf '\033[?25l' 2>/dev/null
trap 'printf "\033[?25h\n\nConnection closed\n"; exit 0' INT TERM
ls
pwd
ll
echo "========================================="
echo " Custom Shell - Black Screen Test Mode"
echo "========================================="
echo "Connected: $(date)"
echo "User: $(whoami)"
echo "From: $(echo $SSH_CLIENT | awk '{print $1}')"
echo "========================================="
echo ""
echo "enter terminal..."
while true; do
sleep 1
echo -ne "$(date +'%Y-%m-%d %H:%M:%S')\r"
done
问题
如果配置正式机器就需要配置严格的限制权限,否则非常容易被利用。
解决方案
-
使用docker创建一个centos的容器,使用ssh登录这个机器
-
使用受限bash,配置只允许使用的命令
-
自定义Shell
方案对比
| 对比维度 | Docker 容器 | rbash | 自定义 Shell |
|---|---|---|---|
| 隔离级别 | 进程+文件系统隔离 | 仅 Shell 层面限制 | 仅 Shell 层面限制 |
| 逃逸风险 | 极低(需内核漏洞) | 中等(配置不当易逃逸) | 低(脚本可控) |
| 资源限制 | 支持 cgroup | 不支持 | 不支持 |
| 操作审计 | 配合宿主机日志 | 无内置审计 | 支持内置日志 |
| 防御深度 | 5 层(宿主机+容器+SSH+内核+SELinux) | 1 层(Shell) | 1 层(Shell) |
| 学习成本 | 中高 | 低 | 中 |
选型:自定义Shell方式,实现简单,灵活可控
实现
cat /etc/passwd 查看用户bash

/bin/bash 就是root 登录ssh黑屏交互的程序。登录ssh本质是连接,验证,登录机器,找一个Linux规定的程序来接待你。这个/bin/bash就是 根据root登录进去接待你的程序。
添加用户,并设置shell文件
创建文件:echo "" > /opt/shell/custom_shell.sh
赋予权限:chmod 755 /opt/shell/custom_shell.sh
创建用户,并设置执行sh文件:useradd -m -s /opt/shell/custom_shell.sh testuser
查询是否设置OK:
root@iZ2ze6n5mtst0dxrvqZ \~# grep testuser /etc/passwd
testuser:x:1001:1002::/home/testuser:/opt/shell/custom_shell.sh
给用户设置密码:passwd testuser
使用SSH登录
