使用lsof恢复误删除的文件_VMware, Unix及操作系统讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  VMware, Unix及操作系统讨论区 »
总帖数
9
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3842 | 回复: 8   主题: 使用lsof恢复误删除的文件        上一篇   下一篇 
flying
注册用户
等级:下士
经验:153
发帖:75
精华:0
注册:2011-8-25
状态:离线
发送短消息息给flying 加好友    发送短消息息给flying 发消息
发表于: IP:您无权察看 2015-8-13 15:28:42 | [全部帖] [楼主帖] 楼主

1.创建一个文件

 [root@linux-5f160 script]# vi test.sh
sleep 3600


2.让这个文件在后台一直执行

 [root@linux-5f160 script]#nohup sh ./test.sh > test.log &


3.删除文件 test.sh

[root@localhost script]# rm -rf test.sh


4.通过lsof查看进程以及文件状态

 [root@linux-5f160 script]# lsof grep test
sh        32332      root    1w      REG              253,7           0    6029319 /mysqldata/script/test.log
sh        32332      root    2w      REG              253,7           0    6029319 /mysqldata/script/test.log
sh        32332      root  255r      REG              253,7          11    6029323 /mysqldata/script/test.sh (deleted)
sleep     32333      root    1w      REG              253,7           0    6029319 /mysqldata/script/test.log
sleep     32333      root    2w      REG              253,7           0    6029319 /mysqldata/script/test.log


5.在/proc/进程ID/fd下面,会暂时保留着这个文件

 [root@linux-5f160 script]#cd /proc/32332/fd
[root@linux-5f160 fd]# ll


总用量 0

 l-wx------ 1 root root 64 4月  29 14:06 0 -> /dev/null
l-wx------ 1 root root 64 4月  29 14:06 1 -> /mysqldata/script/test.log
l-wx------ 1 root root 64 4月  29 14:06 2 -> /mysqldata/script/test.log
lr-x------ 1 root root 64 4月  29 14:06 255 -> /mysqldata/script/test.sh (deleted)
[root@linux-5f160 fd]# more 255
sleep 3600


6.恢复文件

 [root@linux-5f160 fd]# cp 255 /mysqldata/script/test.sh
[root@linux-5f160 fd]#cd /mysqldata/script
[root@linux-5f160 script]# pwd
/mysqldata/script
[root@linux-5f160 script]# cat test.sh
sleep 3600
[root@linux-5f160 script]#


--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
k3neeb
注册用户
等级:上尉
经验:799
发帖:15
精华:0
注册:2015-5-28
状态:离线
发送短消息息给k3neeb 加好友    发送短消息息给k3neeb 发消息
发表于: IP:您无权察看 2016-3-23 9:02:15 | [全部帖] [楼主帖] 2  楼

恢复删除的文件WW8w`HgN}0

?x,m }} jG Io.|G7{0当 UNIX 计算机受到入侵时,常见的情况是日志文件被删除,以掩盖攻击者的踪迹。管理错误也可能导致意外删除重要的文件,比如在清理旧日志时,意外地删除了数据库的活动事务日志。有时可以恢复这些文件,并且lsof可以为您提供帮助。

-|'fc'Ud] n051Testing软件测试网Z*q oin!r

当进程打开了某个文件时,只要该进程保持打开该文件,即使将其删除,它依然存在于磁盘中。这意味着,进程并不知道文件已经被删除,它仍然可以向打开该文件时提供给它的文件描述符进行读取和写入。除了该进程之外,这个文件是不可见的,因为已经删除了其相应的目录条目。51Testing软件测试网-u b S@l2C

k NX K JDm0前面曾在转到 /proc 目录部分中说过,通过在适当的目录中进行查找,您可以访问进程的文件描述符。在随后的内容中,您看到了lsof可以显示进程的文件描述符和相关的文件名。您能明白我的意思吗?51Testing软件测试网%Bmgv\5TK6Z

51Testing软件测试网.x_z#XGME,N"@

但愿它真的这么简单!当您向lsof传递文件名时,比如在lsof /file/I/deleted中,它首先使用stat()系统调用获得有关该文件的信息,不幸的是,这个文件已经被删除。在不同的操作系统中,lsof可能可以从核心内存中捕获该文件的名称。清单 5显示了一个 Linux 系统,其中意外地删除了 Apache 日志,我正使用grep工具查找是否有人打开了该文件。

0t ~'] KB FWk*k0
dOT s&\pc1k0清单 5. 在 Linux 中使用 lsof 查找删除的文件51Testing软件测试网5SNgQ)@ d0wi:V.qW

# lsof | grep error_log
httpd      2452     root    2w      REG       33,2      499    3090660
/var/log/httpd/error_log (deleted)
httpd      2452     root    7w      REG       33,2      499    3090660
/var/log/httpd/error_log (deleted)
... more httpd processes ...


2K/h6L,wH1e&l'u0

!}4a8C9|:r*jT"G0在这个示例中,您可以看到 PID 2452 打开文件的文件描述符为 2(标准错误)和 7。因此,可以在 /proc/2452/fd/7 中查看相应的信息,如清单 6所示。51Testing软件测试网 _,N~m@~8IK.|

51Testing软件测试网D`SJxL^8\
清单 6. 通过 /proc 查找删除的文件
\]EAq6A0

# cat /proc/2452/fd/7
[Sun Apr 30 04:02:48 2006] [notice] Digest: generating secret for digest authentication
[Sun Apr 30 04:02:48 2006] [notice] Digest: done
[Sun Apr 30 04:02:48 2006] [notice] LDAP: Built with OpenLDAP LDAP SDK


7onu\+v ]]0

v7NN&n8p|AG;X~1dUu0Linux 的优点在于,它保存了文件的名称,甚至可以告诉我们它已经被删除。在遭到破坏的系统中查找相关内容时,这是非常有用的内容,因为攻击者通常会删除日志以隐藏他们的踪迹。Solaris 并不提供这些信息。然而,我们知道httpd守护进程使用了 error_log 文件,所以可以使用ps命令找到这个 PID,然后可以查看这个守护进程打开的所有文件。

d2B&AG o+q1z.J051Testing软件测试网"~0R0P)zi/}` hNo
清单 7. 在 Solaris 中查找删除的文件51Testing软件测试网+McBqiS*x

# lsof -a -p 8663 -d ^txt
COMMAND  PID   USER   FD   TYPE        DEVICE SIZE/OFF    NODE NAME
httpd   8663 nobody  cwd   VDIR         136,8     1024       2 /
httpd   8663 nobody    0r  VCHR          13,2          6815752 /devices/pseudo/mm@0:null
httpd   8663 nobody    1w  VCHR          13,2          6815752 /devices/pseudo/mm@0:null
httpd   8663 nobody    2w  VREG         136,8      185  145465 / (/dev/dsk/c0t0d0s0)
httpd   8663 nobody    4r  DOOR                    0t0      58 /var/run/name_service_door
(door to nscd[81]) (FA:->0x30002b156c0)
httpd   8663 nobody   15w  VREG         136,8      185  145465 / (/dev/dsk/c0t0d0s0)
httpd   8663 nobody   16u  IPv4 0x300046d27c0      0t0     TCP *:80 (LISTEN)
httpd   8663 nobody   17w  VREG         136,8        0  145466
/var/apache/logs/access_log
httpd   8663 nobody   18w  VREG         281,3        0 9518013 /var/run (swap)

51Testing软件测试网6rB!j&A'J6v7C O

&TMh2rqg0我使用-a-d参数对输出进行筛选,以排除代码程序段,因为我知道需要查找的是哪些文件。Name列显示出,其中的两个文件(FD 2 和 15)使用磁盘名代替了文件名,并且它们的类型为VREG(常规文件)。在 Solaris 中,删除的文件将显示文件所在的磁盘的名称。通过这个线索,就可以知道该 FD 指向一个删除的文件。实际上,查看/proc/8663/fd/15就可以得到所要查找的数据。51Testing软件测试网zp;\.p$az ?

51Testing软件测试网:s-Q$B\'}{h]

如果可以通过文件描述符查看相应的数据,那么您就可以使用 I/O 重定向将其复制到文件中,如cat /proc/8663/fd/15 > /tmp/error_log。此时,您可以中止该守护进程(这将删除 FD,从而删除相应的文件),将这个临时文件复制到所需的位置,然后重新启动该守护进程。51Testing软件测试网*aV4cPg.Mc

51Testing软件测试网m'^L[j/a&h

对于许多应用程序,尤其是日志文件和数据库,这种恢复删除文件的方法非常有用。正如您所看到的,有些操作系统(以及不同版本的lsof)比其他的系统更容易查找相应的数据。



赞(0)    操作        顶端 
twany
注册用户
等级:少校
经验:1408
发帖:17
精华:0
注册:2015-6-2
状态:离线
发送短消息息给twany 加好友    发送短消息息给twany 发消息
发表于: IP:您无权察看 2016-3-23 10:43:32 | [全部帖] [楼主帖] 3  楼

还可以这样,回头也试试



赞(0)    操作        顶端 
ettu
注册用户
等级:上尉
经验:787
发帖:0
精华:0
注册:2016-2-22
状态:离线
发送短消息息给ettu 加好友    发送短消息息给ettu 发消息
发表于: IP:您无权察看 2016-3-23 16:59:04 | [全部帖] [楼主帖] 4  楼

学习了。



赞(0)    操作        顶端 
duff
注册用户
等级:少校
经验:968
发帖:0
精华:0
注册:2015-7-22
状态:离线
发送短消息息给duff 加好友    发送短消息息给duff 发消息
发表于: IP:您无权察看 2016-3-23 18:23:03 | [全部帖] [楼主帖] 5  楼

收藏一下



赞(0)    操作        顶端 
twany
注册用户
等级:少校
经验:1408
发帖:17
精华:0
注册:2015-6-2
状态:离线
发送短消息息给twany 加好友    发送短消息息给twany 发消息
发表于: IP:您无权察看 2016-3-29 14:18:07 | [全部帖] [楼主帖] 6  楼

真是简单方便



赞(0)    操作        顶端 
ettu
注册用户
等级:上尉
经验:787
发帖:0
精华:0
注册:2016-2-22
状态:离线
发送短消息息给ettu 加好友    发送短消息息给ettu 发消息
发表于: IP:您无权察看 2016-3-29 14:38:32 | [全部帖] [楼主帖] 7  楼

学习了!



赞(0)    操作        顶端 
filogra
注册用户
等级:少校
经验:1408
发帖:13
精华:0
注册:2015-6-2
状态:离线
发送短消息息给filogra 加好友    发送短消息息给filogra 发消息
发表于: IP:您无权察看 2016-4-14 10:15:32 | [全部帖] [楼主帖] 8  楼

有用,感谢~



赞(0)    操作        顶端 
k3neeb
注册用户
等级:上尉
经验:799
发帖:15
精华:0
注册:2015-5-28
状态:离线
发送短消息息给k3neeb 加好友    发送短消息息给k3neeb 发消息
发表于: IP:您无权察看 2016-5-9 17:59:59 | [全部帖] [楼主帖] 9  楼



赞(0)    操作        顶端 
总帖数
9
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论