rssh 无法真正提升 ssh 安全性,因其多年未维护、不兼容现代系统且存在漏洞;应采用 rbash、lshell 和 forcecommand 结合最小权限、多层拦截与审计的方案。

直接把用户 Shell 设为 rssh 并不能真正提升 SSH 远程命令执行的安全性。rssh 已多年未维护,RHEL/CentOS 8+ 及主流发行版默认不提供,且不兼容 systemd、PAM 和 SELinux,存在已知漏洞,也不支持 ForceCommand 或 command= 等现代 SSH 控制机制。它只允许 scp/sftp/rsync 等少数协议,完全禁用交互式 shell,但代价是功能僵化、运维不可控、排查困难。
真正安全的远程命令执行控制,应基于“最小权限 + 多层拦截 + 可审计”原则,而非依赖一个过时的受限 shell。
用 rbash 构建轻量级受限环境
rbash 是 Bash 官方支持的受限模式,启用简单,行为可控:
- 执行
sudo usermod -s /bin/rbash username切换用户默认 shell - 在用户家目录下创建
.bashrc,清空PATH并锁定为仅含/usr/bin、/bin中白名单命令路径 - 在
.bashrc中禁用危险内置命令:unset -f cd eval export unset - 设置
export ENV=/dev/null防止加载额外配置 - 确保家目录权限为
750,.bashrc为644,避免被篡改
用 lshell 实现命令级白名单控制
适合需差异化策略的跳板场景,例如运维组可 ssh 跳转、备份组仅能 scp:
- 安装后编辑
/etc/lshell.conf,按用户组定义策略 - 示例配置中明确列出
allowed: ['ssh', 'scp', 'sftp', 'ls', 'pwd', 'exit'] - 自动过滤
; & |` $(等 shell 元字符,防止命令拼接绕过 - 启用日志记录到
/var/log/lshell/,级别设为2(含完整命令参数)
用 SSH ForceCommand 实现连接级强制路由
这是最可靠的一层控制,所有 SSH 登录都会被重定向到指定脚本:
- 在
/etc/ssh/sshd_config中为跳板用户添加:Match User jumpuserForceCommand /usr/local/bin/jump-wrapper.sh -
jump-wrapper.sh负责校验来源 IP 是否在白名单、目标主机是否合法、是否超时,并调用ssh -o StrictHostKeyChecking=yes user@host完成跳转 - 所有执行行为统一记录,无法通过修改 shell 或上传脚本绕过
必须同步加固的关键项
- 禁用密码登录:
PasswordAuthentication no,仅允许密钥认证 - 关闭 root 远程登录:
PermitRootLogin no - 限制可登录用户:
AllowUsers jumpuser@10.0.1.0/24(支持 IP 细粒度) - 日志级别设为
VERBOSE,并将/var/log/secure转发至 SIEM 系统 - 用户家目录挂载时加
noexec,nosuid,nodev选项,阻止二进制执行
不复杂但容易忽略。











