genetick的个人博客分享 http://blog.sciencenet.cn/u/genetick

博文

linux系统下误删文件的恢复

已有 50046 次阅读 2010-8-23 15:43 |个人分类:计算机|系统分类:科研笔记| sleuthkit, autopsy

 

星期五的晚上,一手接电话,一手在键盘敲着命令,本该是 rm -rf  /usr/local/apache2/htdocs/tmp/ 命令却少敲了tmp ,竟然运行  rm -rf /usr/local/apache2/htdocs , 这命令是要把htdocs目录下所有文件都删除啊,还好发现的快,赶紧ctrl+c,救回来了几个文件夹。但有几个重要的文件夹都没了,这目录下的文件夹有的是半年前的工作,有的是几个月前的工作,就在一瞬间消失的干干净净。恨自己为什么不备份,恨自己为什么接电话手还在键盘旁,恨自己为什么不多加敲几个字母。几分钟的发泄之后,冷静下来, 思考着怎么把它们找回来。真是黑色星期五!

 备份备份备份真的真的真的真的很重要很重要很重要。。。。。。

在网上泡了好久,该用的恢复方法都试了,可转眼周末都过去了,还没把它们恢复回来。在sleuthkit 和autopsy的使用上卡住了,在image镜像 输入路径卡住了,输入/dev/sda2  建立了case,但analysis时 file type 却没被激活,在image镜像输入/usr/local/apache2/htdocs/* 却报image格式错误。还在摸索中,期待使用过的朋友过来交流下。

 

恢复误删文件引言:(前人总结)

对于rm,很多人都有惨痛的教训。首先,最好的方法是避免这个问题,以下是几点建议:

  1、rm -rf误操作的后果是可怕的,rm -f也要三思而行,不能轻易使用。

  2、做好数据备份。

  3、用一些策略避免出错:

  提倡在shell下用 TAB 补全,用脚本执行任务,减少出错的机会。或者编写一个脚本,起名rm,在脚本里将真实的rm改为mv ,将删除的都mv到一个指定的目录里面,定期清理。

那么rm删除的文件还能恢复吗?

  rm的man里面有如下说法: 请注意,如果使用 rm 来删除文件,通常仍可以将该文件恢复原状。如果想保证该文件的内容无法还原,请考虑使用 shred。所以理论上rm删除的文件是还能恢复的。删掉文件其实只是将指向数据块的索引点(information nodes)释放,只要不被覆盖,数据其实还在硬盘上,关键在于找出索引点,然后将其所指数据块内的数据抓出,再保存到另外的分区。在用rm误删除文件后,我们要做的第一件事就是保证不再向误删文件的分区写数据。

  通常我们可以有以下几种选择:

  1、借助工具。

  2、自己写程序。你需要会编程并了解对应的文件系统。

  3、如果数据很有用,也许可以找专业公司抢救。

 

误删除文件恢复工具(根据自己经验结合网络所写-总结)

 1、The Sleuth Kit http://www.sleuthkit.org/sleuthkit/ (Autopsy是它的一个图形前端):

The Sleuth Kit是一套强大的数字调查、取证工具集合,它可以运行在windows,Linux, OS X, FreeBSD, OpenBSD和Solaris上,能够分析 FAT, NTFS, UFS, EXT2FS和EXT3FS文件系统。The Sleuth Kit能为用户提供文件系统的详细信息,包括已删除数据。The Autopsy Forensic Browser是The Sleuth Kit的Web界面接口,使得工具的使用更加容易和快速。
工具更多信息及下载地址:http://www.sleuthkit.org/
 

我目前使用的正是这个软件,下载 TSK http://www.sleuthkit.org/sleuthkit/ 和autopsy http://www.sleuthkit.org/autopsy,先安装TSK,./configure 、 make 、make install、  可执行文件安装到 /usr/local/bin下, 然后cd autopsy,./configure 进行配置,设置Evidence Locker 目录,如/tmp/recover,需先创建此目录,autopsy会将image文件都存放在此目录下,另一个是Have you purchased or downloaded a copy of the NSRL (y/n) [n, NIST NSRL: 也就是 [NIST National Software Reference Library],這是美國政府的資料庫,在資料庫中的檔案被視為正常可被信賴的系統軟體。因此在列表內的檔案可忽略,減輕調查員的工作量。 可在 http://www.nsrl.nist.gov/  下载安装。]默认是没安装,不安装不影响。设置之后覆盖原来的autopsy可执行文件,直接./autopsy就可运行这个软件。网页界面的,看着很舒服,省去不少命令的输入,如何使用还需一番摸索。

    2、The Coroners Toolkit

也就是我们所说的TCT,想要在国内下载的话,您可以到安全焦点(http://xfocus.org/tool/other/tct-1.07.tar.gz)下载。这是一个unix下的命令行文件系统工具集,支持FFS及ext2fs,从块及结点处来对数据进行恢复。它能够针对文件的最后修改、访问或者改变(MAC)的时间来进行分析,并且根据数据节点的值提取出文件列表以进行恢复。 TCTUTILs:在http://xfocus.org/tool/other/tctutils-1.01.tar.gz可以下载当前最新版本。它是对TCT的补充,提供了根据文件名对数据进行恢复的命令行工具。这两个工具都需要使用者对一些底层基本知识比较了解。Autopsy Forensic Browser:可以从http://xfocus.org/tool/other/autopsy-1.01.tar.gz 下载。它提供了一个友好的html界面给tct及tctutils。它能使枯燥的分析工作相对轻松些:) 

 安装:TCT在各种unix平台下都经过了比较好的测试。现在能够支持FreeBSD、OpenBSD、SunOS、Linux等平台。TCTUTILs和Autopsy则不一定能跑得起来,我测试的平台是一台默认安装的Red Hat 6.2系统。 tct : # tar zvfx tct-1.07.tar.gz -C /usr/local/tct/; cd /usr/local/tct/tct*; make 这样把tct展开到/usr/local/tct/tct-1.07/的目录下,并且进入,make。这里,如果是make过之后,需要重新在编译的话,需要运行perl reconfig命令重新配置。 tctutils:    # tar zvfx tctutils-1.01.tar.gz -C /usr/local/tct;cd /usr/local/tct/tctu*;make现在tctutils似乎只在OpenBSD 2.8、Debian Linux 2.2、Solaris 2.7下经过详尽测试,而对FreeBSD还支持不好。通常make不会出现什么问题,如果有,自己改下代码或者Makefile即可。 Autopsy: 解包后运行./configure后,它会自己寻找一些实用工具如grep、strings、md5sum的路径,并要求确认tct以及tctutils的路径(如果没找到会要求你输入正确路径)。最后要求输入需要检查的文件系统所在,才生成程序autopsy。

 3、Foremost http://foremost.sourceforge.net 和recover http://xfocus.org/tool/other/recover-1.2.tar 。

这两个软件可以恢复ext2 ext3下被删除的文件,但是没有tct那样功能强大。只是相对更“傻瓜”一些,操作起来比较方便。 运行简单,只要运行./foremost    ./recover就OK了,然后会问你需要恢复的数据所以磁盘、删除时间、文件大小等一系统信息,以帮助精确定位需要恢复的文件,但最后恢复出来的东西,都是以数字排序,分析起来有一定的难度。不建议使用这种类型的软件。

4、一个全能的工具,Finaldata,可以恢复unix/linux/dos下误删的文件。对于unix,支持这些产品,     Solaris、AIX和HP-UX。对于linux,支持EXT2的文件系统。对于dos,支持FAT 12/16/32, NTFS 4/5/5.1 的文件系统。 网络上可以下载到Finaldata的windows 免费版本,图形界面的,对windows来说 确实是个好东西,操作方便。 但Finaldata的linux版本,不是免费的,找了好久也没找到破解版的。

5、linux自带的命令恢复操作,如debugfs命令。

  如果文件系统是ext2(对ext3无效),ext3的删除机制是直接把 inode data 删除了,所以造成 ext3 无法反删除(ext3设计为无法恢复被删除的文件)。我的是ext3文件系统,linux带了debugfs命令,但因只一个分区,#debugfus  /dev/sda2, 报错因这个磁盘分区太大导致打开失败,所以安装时还是多分几个区出来比较好,这次输在只有一个分区,所以使用不了这个debugfs命令,不能查看到被删除文件的节点,以至于不能恢复误删除文件。查看linux的分区情况, 使用命令# fdisk -l  查看便知。debugfs(undel lsdel )的使用上网查。还可用unrm、ext2ed、e2undel等命令。

在Linux所用的Ext2文件系统中,文件是以块为单位存储的,默认情况下每个块的大小是1K,不同的块以块号区分。每个文件还有一个节点,节点中包含有文件所有者,读写权限,文件类型等信息。对于一个小于12个块的文件,在节点中直接存储文件数据块的块号。如果文件大于12个块,那么节点在12个块号之后存储一个间接块的块号,在这个间接块号所对应的块中,存储有256个文件数据块的块号(Ext2fs中每个块号占用4字节,这样一个块中所能存储的块号就是1024/4=256)。如果有更大的文件,那么还会在节点中出现二级间接块和三级间接块。   

6、还有一种恢复方法,当误删除的文件有进程访问时,即当进程打开了某个文件时,只要该进程保持打开该文件,可以用 # lsof 来恢复删除文件。操作就是#lsof 查看误删除文件的节点,然后dump回来。

 



https://blog.sciencenet.cn/blog-258654-355554.html

上一篇:“非常6加1”? 骗你没商量
下一篇:鬼节传说
收藏 IP: .*| 热度|

0

发表评论 评论 (4 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-12-21 22:03

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部