You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止通过强制分配伪终端逃逸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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:06:29