linux下的lsof的使用及其在取证分析时的应用

0x00 前言

      lsof(list open files  ~~~ “ls + of”的组合)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。在终端下输入lsof即可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。
0x01 
  lsof 常见的用法是查找应用程序打开的文件的名称和数目。可用于查找出某个特定应用程序将日志数据记录到何处,或者正在跟踪某个问题。例如,linux限制了进程能够打开文件的数目。通常这个数值很大,所以不会产生问题,并且在需要时,应用程序可以请求更大的值(直到某个上限)。如果你怀疑应用程序耗尽了文件描述符,那么可以使用 lsof 统计打开的文件数目,以进行验证。
lsof语法格式是: lsof [options] filename

常用的参数列表
lsof filename 显示打开指定文件的所有进程
lsof -a 表示两个参数都必须满足时才显示结果
lsof -c string 显示COMMAND列中包含指定字符的进程所有打开的文件
lsof -u username 显示所属user进程打开的文件
lsof -g gid 显示归属gid的进程情况
lsof +d /DIR/ 显示目录下被进程打开的文件
lsof +D /DIR/ 同上,但是会搜索目录下的所有目录,时间相对较长
lsof -d FD 显示指定文件描述符的进程
lsof -n 不将IP转换为hostname,缺省是不加上-n参数
lsof -i 用以显示符合条件的进程情况


lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
46 --> IPv4 or IPv6,例如 -i 4 或者 -i 6 
protocol --> TCP or UDP
hostname --> Internet host name
hostaddr --> IPv4地址
service --> /etc/service中的 service name (可以不只一个)
port --> 端口号 (可以不只一个),例如lsof -i 4  1.1.1.1@110-135

0x02 实践

1、列出某个用户打开的文件

# lsof -u user_name  例如root@kali:~# lsof -u root ,lsof -u ^root查看非root用户的文件使用情况

2、列出在某个端口运行的进程

# lsof -i :port_number 例如root@kali:~# lsof -i:9392,root@kali:~# lsof -i:100-10000,root@kali:~# lsof -i:9392,9293,33218

3、根据进程名称列出打开的文件

# lsof -c process_name 例如root@kali:~# lsof -c ssh ,root@kali:~# lsof -a -c ssh -u root可以组合查询root用户的SSH

4、列出所有网络连接

#lsof -i 例如root@kali:~# lsof -i ,root@kali:~# lsof -i TCP,root@kali:~# lsof -i  TCP@localhost,

root@kali:~# lsof -i TCP@127.0.0.1:ssh,http  , root@kali:~# lsof -i TCP@127.0.0.1:100-1000000

5、根据进程id来列出打开的文件

# lsof -p PID  例如root@kali:~# lsof -p 9371,root@kali:~# lsof -i -a -p 9371 ,root@kali:~# lsof `which httpd` (哪个进程在使用apache的可执行文件)

6、 列出某个目录中被打开的文件

# lsof +D path_of_the_directory 例如 root@kali:~# lsof +D /var/log/

7、杀掉某个用户的所有活动进程

# killall -9 `lsof -t -u username` 例如root@kali:~#kill -9 `lsof -t -u root`(谨慎:如果是单一用户,这命令一敲就黑屏了)

8、恢复删除的文件

 第一步:lsof查看---当前是否有进程打开/var/logmessages文件,如下: # lsof |grep /var/log/messages

syslogd 1283 root 2w REG 3,3 5381017 1773647 /var/log/messages (deleted)
第二步:获取信息--从上面的信息可以看到 PID 1283(syslogd)打开文件的文件描述符为 2,/var/log/messages已被标记删除了。

第三步:因此我利用 I/O 重定向查看 /proc/1283/fd/2 (fd下的每个以数字命名的文件表示进程对应的文件描述符)的同时恢复该文件。

cat /proc/1283/fd/2 > /var/log/messages



欢迎大家分享更好的思路,热切期待^^_^^ !!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值