ssh rc 登录钩子是什么
sshd 在建立登录会话时会执行 ~/.ssh/rc 或全局的 /etc/ssh/sshrc 文件。这两个位置名字低调、平时几乎没人查看,因此很适合作为登录触发的隐蔽据点:只要有人用 SSH 登录,里面的命令就会被执行,完全不需要改动密钥或账号。
基本信息
| 用户级位置 | ~/.ssh/rc |
|---|---|
| 全局位置 | /etc/ssh/sshrc |
| 触发条件 | SSH 登录会话建立时执行 |
| 正常情况 | 多数系统默认没有这些文件 |
| 检查要点 | 文件是否存在、内容、权限与 mtime |
| 相关位置 | 用户 shell 启动文件、/etc/profile.d/ |
典型使用场景
- 排查登录触发的持久化手段
- 处置时清点所有与登录关联的执行点
- 排查「没有计划任务却在登录后出现外连」的现象
- 加固巡检:确认系统上没有这类钩子文件
- 与 .bashrc、profile.d 一起做完整清点
- 处置后验证钩子已清除
- 演练中练习检查登录钩子
- 排查堡垒机或运维跳板机上被投放的登录钩子
检查登录钩子文件
检查登录钩子文件
ls -la /root/.ssh/rc /etc/ssh/sshrc 2>/dev/null # 是否存在
for h in /home/*; do ls -la "$h/.ssh/rc" 2>/dev/null; done # 遍历各用户
head -n 20 /etc/ssh/sshrc 2>/dev/null # 查看内容
grep -rn 'sshrc\|rc' /etc/ssh/sshd_config 2>/dev/null | head # 配置是否相关
stat -c '%y %n' /etc/ssh/sshrc 2>/dev/null # 文件修改时间登录触发点清单
| 位置 | 作用 | 检查重点 |
|---|---|---|
| ~/.ssh/rc | 该用户登录时执行 | 内容是否调用网络或写入文件 |
| /etc/ssh/sshrc | 所有用户登录时执行 | 是否存在以及内容 |
| /etc/profile.d/ | 登录 shell 加载 | 新增脚本是否可疑 |
| ~/.bashrc | 交互式 shell 加载 | 是否被追加了命令 |
| ~/.ssh/authorized_keys | 密钥登录 | 是否新增陌生公钥 |
正常主机一般没有 .ssh/rc 与 sshrc:一旦出现,就要能逐行解释它的用途与来源,解释不清楚就按可疑处理。
检查时不要用会触发登录钩子的方式操作:先用只读命令看清楚内容与时间,再决定处理顺序。
用户级钩子的排查范围要覆盖全部家目录,不只是 root:被入侵的业务账号往往才是攻击者的落脚点。