首页/安全/应急响应速查/检查 ~/.ssh/rc 与 sshrc 登录钩子

检查 ~/.ssh/rc 与 sshrc 登录钩子

sshd 在登录会话建立时会执行 ~/.ssh/rc 或 /etc/ssh/sshrc:这两个位置名字低调,是登录触发的隐蔽据点。

应急响应速查安全更新于 2026-10-13

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:被入侵的业务账号往往才是攻击者的落脚点。

易错点

  • 只查 authorized_keys:rc 钩子不需要任何密钥也能上线
  • 看到文件就直接跳过:要先看权限、所有者、mtime 与内容
  • 只查全局 sshrc 不查用户目录:按用户投放的钩子最隐蔽
  • 删除前不留档:丢失攻击者选用的登录触发方式这一关键证据
  • 只看文件是否存在不看内容:存在的文件可能来自配置管理工具,要读内容再定性
  • 忽略文件权限与 mtime:这两项是判断「谁在什么时候放进来」的直接依据

数据来源与参考

  • OpenSSH sshd(8) 手册:LOGIN PROCESS 一节

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌