如何阻止通过强制分配伪终端逃逸rbash受限shell?
针对rbash通过SSH伪终端逃逸的加固方案
针对你遇到的rbash受限shell被ssh -t "bash --noprofile"这类方式逃逸的问题,我整理了几个实战验证有效的加固手段,分层次解决这个问题:
1. 直接阻止SSH分配伪终端
最直接的方式是在SSH服务端配置里,针对受限用户禁用终端分配权限。编辑/etc/ssh/sshd_config,添加如下规则:
Match User your_restricted_user PermitTTY no ForceCommand /bin/rbash
PermitTTY no会直接拒绝SSH会话的TTY请求,用户即使加-t参数也无法创建伪终端,从根源上切断这种逃逸路径。ForceCommand确保用户登录后只能执行rbash,避免绕开默认shell。
2. 彻底锁死rbash的可执行路径与环境
即使终端限制被绕过,也要确保rbash环境里没有能调用bash的机会:
- 修改受限用户的
~/.bashrc(或系统级的rbash配置文件),严格限定PATH为仅包含安全的基础命令:PATH=/usr/bin/ls:/usr/bin/cat:/usr/bin/echo unset SHELL export PATH - 把用户的
~/.bashrc、~/.profile等配置文件的所有者改为root,权限设为644,防止用户篡改配置注入恶意路径。
3. 用自定义脚本替代原生rbash(进阶方案)
如果对原生rbash的安全性不放心,可以写一个自定义的受限shell脚本,通过ForceCommand强制用户使用它:
Match User your_restricted_user PermitTTY no ForceCommand /usr/local/bin/restricted_shell.sh
示例restricted_shell.sh内容:
#!/bin/bash echo "=== Restricted Shell ===" while true; do read -p "> " cmd case $cmd in ls|cat|echo) $cmd ;; exit) break ;; *) echo "Command not allowed: $cmd" ;; esac done
这种方式完全控制用户能执行的命令,彻底屏蔽bash等完整shell的调用入口。
4. 禁用SSH的命令执行参数
在sshd_config里补充以下配置,进一步缩小攻击面:
Match User your_restricted_user AllowTcpForwarding no X11Forwarding no PermitOpen none
这些配置会禁用端口转发、X11转发等功能,同时结合ForceCommand后,用户在SSH命令行中指定的任何命令都会被忽略,强制执行你设定的受限环境。
建议你组合使用这些手段,比如先通过PermitTTY no阻止终端分配,再用ForceCommand锁定执行环境,最后加固rbash的环境变量,形成多层防护,基本能覆盖这类逃逸场景。
内容的提问来源于stack exchange,提问作者mindgame3713
相关产品推荐
相关产品推荐

