可通过openssh的match user与forcecommand配合rbash或只读脚本,将审计用户严格限制于只读操作:匹配指定用户、强制执行受限shell或白名单命令脚本,禁用scp/sftp、撤销主目录写权限、移除authorized_keys中command=覆盖项,并验证逃逸命令被拦截。

可以通过 OpenSSH 的 Match User 和 ForceCommand 配合 rbash(受限 shell)或只读命令封装脚本,将指定审计用户严格限制在只读操作范围内,禁止文件修改、命令执行越界和 shell 逃逸。
配置 Match User 匹配审计账户
在 /etc/ssh/sshd_config 中添加匹配段,精准识别审计用户(如 auditor),避免影响其他用户:
- 使用
Match User auditor单独匹配,不建议用Group或通配符,防止规则误触发 - 匹配后必须缩进写后续指令,且该段只能出现在配置文件末尾(OpenSSH 要求)
- 确保
auditor用户的登录 shell 在/etc/shells中合法(如/bin/rbash)
通过 ForceCommand 强制执行只读入口
ForceCommand 会绕过用户默认 shell,直接运行指定命令——这是实现“锁定”的核心。推荐两种可靠方式:
-
方案一:跳转到 rbash 并预设 PATH 和环境
设置ForceCommand /bin/rbash -l,同时在auditor用户的~/.bashrc中清空PATH、禁用cd、重定义vi/vim为只读模式(如alias vi='vim -R'),并移除写权限相关命令符号链接 -
方案二:执行自定义只读 shell 封装脚本
编写/usr/local/bin/readonly-shell,仅允许ls、cat、ps、systemctl status等安全命令,所有调用经白名单校验;设为可执行并用ForceCommand /usr/local/bin/readonly-shell
堵住常见逃逸路径
仅靠 ForceCommand 不足以防逃逸,需同步加固:
- 禁用
scp和sftp:在Match User段中显式设置SFTPSubsystem none和AllowTcpForwarding no - 撤销用户主目录写权限:
chown root:auditor /home/auditor && chmod 750 /home/auditor,防止上传恶意脚本 - 移除
~/.ssh/authorized_keys中的command=...覆盖项,避免客户端强制命令绕过服务端策略 - 测试是否能执行
sh -i、python -c "import os;os.system('id')"等典型逃逸命令,确认全部被拦截或返回 permission denied
验证与日志追踪
上线前必须验证行为符合预期,并启用审计追踪:
- 用
ssh auditor@host登录,尝试touch test、echo > file、/bin/bash,应全部失败 - 检查
/var/log/auth.log中是否记录每次登录及命令执行(需开启LogLevel VERBOSE) - 对关键只读命令(如
journalctl -u sshd --no-pager)添加 wrapper 日志记录,例如在封装脚本中插入logger -t "AUDIT" "auditor ran journalctl"











