文件传输通道的两侧痕迹
SFTP 与 SCP 都跑在 SSH 之上,是数据外带与工具投递最常用的通道。服务端的线索在于 sftp 子系统会话:sshd 会为每次文件传输启动子系统进程,相关记录出现在认证日志里。客户端侧则表现为 sftp/scp 进程与目标目录的文件变化,两侧对照可以判断一次传输的方向、目标与大致内容范围。
日志默认不记路径
sshd 的默认配置只记录会话的建立与结束,不会记录传输了哪些文件。要还原具体文件,只能结合目标目录在对应时间窗内的新增与修改记录、以及文件系统层面的变更日志来推断。这也是为什么把文件传输与目标目录时间窗放在一起分析是必要步骤。
基本信息
| 适用平台 | Linux/Unix(OpenSSH 服务端与客户端) |
|---|---|
| 服务端配置 | sshd_config 中的 Subsystem sftp 指令 |
| 服务端日志 | 认证日志中的子系统请求与会话开始结束记录 |
| 客户端行为 | 进程命令行、目标目录文件变化、可能的本地临时文件 |
| 注意 | 较新版本 OpenSSH 的 scp 也走 SFTP 协议,判定方式随之变化 |
典型使用场景
- 发现数据外带:确认某时段是否存在文件传输会话及其来源地址
- 排查工具投递:外来文件落地后紧跟执行动作,形成链条
- 核对备份与同步作业:区分正常同步与异常外传
- 解释目录变化:把新增文件的时间与传输会话对齐
- 处置验证:封禁后确认不再有新的子系统会话
检索传输痕迹
检索传输痕迹
# 服务端:查找子系统与会话相关记录
grep -i 'subsystem' /var/log/auth.log | tail -20
grep -E 'Starting session|session closed' /var/log/auth.log | tail -20
# 确认服务端配置中的子系统定义
grep -E '^\s*Subsystem' /etc/ssh/sshd_config
# 目标目录侧:找出时间窗内新增或修改的文件
find /tmp /home /var/tmp -xdev -newermt '2026-01-02 03:00' ! -newermt '2026-01-02 05:00' -type f 2>/dev/null | head
# 客户端侧:确认本机是否运行过 sftp/scp(需要历史记录或审计日志)
ls -lt --time-style=long-iso ~/.ssh/ 2>/dev/null | head线索来源对照
| 来源 | 能说明什么 | 局限 |
|---|---|---|
| 服务端子系统记录 | 发生了文件子系统会话 | 不含具体文件路径 |
| 会话开始与结束 | 会话时长与来源地址 | 需与用户名配对才准确 |
| 目标目录文件时间 | 产生了哪些文件 | 无法区分传输来源 |
| 客户端进程记录 | 本机发起的传输行为 | 需审计或历史记录支持 |
| 网络流量记录 | 传输的数据量级 | 加密内容不可见 |
scp 的实现方式随版本变化:较早版本在远端执行 scp 程序,会在进程执行记录里留下痕迹;较新版本默认走 SFTP 协议,行为更接近 sftp,判定时要结合具体版本。
内部网络的数据外带不一定走 SSH:邮件、网盘客户端、数据库导出、对象存储上传都是常见通道,排查时不要局限在文件传输协议上。