首页/安全/取证与溯源速查/lsof 网络与已删文件检查
Linux 取证135 条

lsof 网络与已删文件检查

lsof 把文件、网络连接与进程串起来:-i 看网络、-p 看单个进程、+L1 找已删除但被占用的文件,是现场排查的高频命令。

取证与溯源速查安全更新于 2026-10-13

lsof 用来做什么

lsof(list open files)在 Linux 中把“进程—文件—网络连接”三者的关系一次列全:-i 看网络连接,-p 看某个进程打开的全部资源,+L1 找链接数为 0 的文件,也就是已被删除但仍被进程占用的文件。事件响应现场常用它回答三个问题:哪个进程还在保持外联、某个可疑进程打开了哪些文件、有没有程序在占用已删除的载荷文件。输出信息量大,配合 -nP 禁用名称解析可以显著提速。

基本信息

适用平台多数 Linux 发行版(RHEL/CentOS 7+、Ubuntu 18.04+ 等),需安装 lsof 包
权限要求普通用户只能看到自己的进程;查看全部进程与 /proc 详情需要 root
常用选项-nP 关闭主机名与端口名解析、-i 网络、-p PID、-u 用户、+L1 已删文件
输出列COMMAND、PID、USER、FD、TYPE、DEVICE、SIZE/OFF、NODE、NAME
配合使用/proc/<pid>/fd 可进一步复制已删除文件内容

典型使用场景

  • 现场确认哪个进程正在保持可疑的外联连接,拿到 PID 与对端地址
  • 排查监听端口异常的进程:确认是否有非计划内的服务在监听
  • 发现被删除但仍被占用的载荷文件,尝试从 /proc 恢复内容
  • 定位文件占用冲突:确认某文件被哪个进程持有,便于安全释放
  • 处置前固定证据:记录进程与连接的对应关系,避免直接重启丢失关联

常用命令

常用命令
# 已建立的 TCP 连接(-nP 避免反向解析,速度快且输出干净)
sudo lsof -nP -iTCP -sTCP:ESTABLISHED | head -20
# 某个进程打开的全部文件与网络句柄
sudo lsof -nP -p 1234
# 已删除但仍被占用的文件(链接数为 0)
sudo lsof +L1 | head -20
# 从 /proc 直接复制已删除文件内容,保住载荷本体
sudo cp /proc/1234/fd/7 /case/recovered-payload.bin
# 汇总某进程的外联目标,便于与情报比对
sudo lsof -nP -i -a -p 1234

输出逐列读法

列含义正常/异常
COMMAND / PID进程名与进程号进程名被截断时用 PID 反查完整命令行
USER持有该句柄的用户服务进程以 root 运行属正常,交互用户持有大量连接需关注
FD文件描述符cwd 当前目录、txt 程序本体、mem 内存映射、数字为普通句柄
TYPE对象类型REG 普通文件、DIR 目录、IPv4/IPv6 网络套接字
NODEinode 号已删除文件在 NAME 中标 (deleted),可据此恢复
NAME路径或连接地址含 (ESTABLISHED)/(LISTEN) 等状态,注意区分本地与对端
lsof 输出可能被攻击者通过动态库劫持污染(例如 LD_PRELOAD 隐藏进程),存在被隐蔽的可能时,要用 /proc 目录直接枚举交叉验证,而不是只信 lsof 的结果。
对连接数成千上万的主机执行全量 lsof 会消耗较多时间与 IO;先按端口或 PID 收窄范围,处置窗口紧张时优先记录关键进程的快照。

易错点

  • 在检测到恶意进程后直接 kill:进程退出后句柄与已删除文件内容随之消失,应先记录 lsof 输出并从 /proc/<pid>/fd 复制载荷文件
  • 不加 -nP 直接跑全量查询:DNS 反向解析会让命令长时间卡住,现场排查时先禁用解析再逐步收窄
  • 把 lsof 输出当作可信清单:rootkit 类恶意代码可以劫持相关调用隐藏自身,结论需与 /proc、网络连接表、审计日志交叉
  • 忽略 (deleted) 标记的含义:文件被删除但句柄仍在时取证价值最高,错过窗口后内容无法恢复
  • 用普通用户执行全量命令:只能看到自己拥有的进程,会误判为“主机上没有可疑连接”,关键时刻要用 root 并记录执行账号

数据来源与参考

  • lsof 官方文档(man 8 lsof)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌