lshell是生产跳板机推荐的受限shell,因其配置粒度细、日志完整、支持用户/组差异化策略;rbash依赖环境变量控制易失效。

直接把用户默认 Shell 改成 /bin/rbash 或 /usr/bin/lshell 并不能自动实现安全跳板——它只是起点,后续必须配合路径控制、命令白名单、环境隔离和权限收紧,否则极易被绕过。
选对受限 Shell 类型并验证可用性
生产跳板机推荐使用 lshell(非 rbash),因其配置粒度细、日志完整、可按用户/组差异化策略;rbash 依赖严格环境变量控制,实际中容易因 PATH 污染或脚本调用失效。
- 确认已安装:RHEL/CentOS 执行
yum install lshell,Ubuntu/Debian 执行apt install lshell - 检查二进制路径:运行
which lshell,常见为/usr/bin/lshell;确保该路径已写入/etc/shells(否则chsh或 SSH 登录会失败) - 测试基础可用性:临时切换当前测试用户 shell:
chsh -s /usr/bin/lshell $USER,再新终端登录,确认能进入且基础命令(如ls、pwd)可执行
配置 lshell 实现最小化命令与路径限制
核心是编辑 /etc/lshell/lshell.conf,禁用危险能力,只开放运维必需项:
- 全局禁用:
scp: 0、sftp: 0、overssh: [](防止通过 rsync 等逃逸) - 命令白名单:
allowed: ['ls', 'pwd', 'cd', 'cat', 'tail', 'journalctl', 'sudo']—— 不加bash、sh、python、perl等解释器 - 禁止特殊字符:
forbidden: [';', '&', '|', '`', '$(', '\', '!', '*']防止命令拼接与变量展开 - 路径锁定:
path: ['/home', '/etc', '/var/log', '/opt/scripts'],并设置env_path: ':/usr/bin:/bin',避免用户自定义 PATH 绕过 - 启用日志:
logpath: /var/log/lshell/,确保loglevel: 2(记录所有命令执行)
绑定用户并加固底层执行环境
仅改 shell 不够——攻击者仍可能通过 sudo -u user /bin/bash 或 SSH 的 command= 绕过。需多层拦截:
- 将跳板用户加入专用组(如
jumpuser),在/etc/lshell/lshell.conf中按组配置:[jumpuser] allowed: [...] path: [...] - 在
/etc/passwd中明确指定 shell:ops:x:1001:1001::/home/ops:/usr/bin/lshell:/bin/bash(最后字段为真实登录 shell,倒数第二字段为受限 shell) - 禁用该组用户执行交互式 shell:在
/etc/pam.d/system-auth插入 PAM 规则:auth [success=ok default=bad] pam_succeed_if.so user ingroup jumpuserauth [default=die] pam_deny.so - 确保跳板用户家目录权限为
750,.bashrc、.profile等文件属主 root 且不可写,防止篡改环境变量
SSH 层面强化跳板访问控制
跳板机的 SSH 配置必须独立于其他服务,做到“只放行、不暴露”:
- 专用配置文件:
/etc/ssh/sshd_config.d/99-jump.conf,启用Match Group jumpuser块 - 强制密钥登录 + 禁用密码:
PasswordAuthentication no、PubkeyAuthentication yes - 禁止端口转发与 X11:
AllowTcpForwarding no、X11Forwarding no - 限制来源 IP:
AllowUsers ops@10.10.0.0/16 admin@192.168.100.0/24 - 启用连接审计:
LogLevel VERBOSE,配合rsyslog将 auth 日志发往 SIEM











