上周溯源某挖礦case,在排查過程中發(fā)現(xiàn)挖礦文件被人為刪除。最終通過確定文件被刪除的時間以縮小排查ssh登錄的時間范圍從而鎖定了可疑ip。該case引發(fā)了我的思考,linux下如何查找最近被刪除的文件?本文是數(shù)據(jù)恢復(fù)的第三篇文章,只是快速找到被刪除文件,并不涉及如何恢復(fù)文件本身。 大家都知道文件有三個時間戳atime、mtime、ctime。但是在linux下文件還有crtime(創(chuàng)建時間)和dtime(刪除時間)。通過dtime可以查找最近被刪除的文件,但由于inode可能被覆蓋,該方法不一定完全準(zhǔn)確。 如何查看文件的5個時間戳?上面的操作中刪除一個文件后,雖然文件的block指針被抹除,但被刪除文件的indoe還在,并且寫入了文件的被刪除時間。 通過使用debugfs命令(linux自帶用于內(nèi)核調(diào)試的虛擬文件系統(tǒng)),獲取文件的5個時間戳。關(guān)于linux文件刪除的原理和debugfs的使用可以參考我之前的文章:數(shù)據(jù)恢復(fù)(一)-linux下ext文件系統(tǒng)數(shù)據(jù)刪除原理淺析 。 如何快速定位哪些目錄中的文件被刪除?最常見的我們是通過find命令查找linux中文件的變動。因為linux下一切皆文件,目錄本身也是一個文件。比如我們刪除了一個目錄中的文件,該目錄的時間也會發(fā)送改變。 做一個簡單的測試。原本tmp.873RCQOugw目錄的mtime為2021-12-20,但是我們刪除該目錄中的一個文件之后,該目錄的mtime變?yōu)榱爽F(xiàn)在的時間。 所以可以使用find命令查找存在文件變動的目錄,這樣可以避免全盤掃描,節(jié)省更多的時間。 有哪些可實現(xiàn)的思路?我一開始想到了兩種方式。
為快速驗證我的想法,最終采用了第二種方式實現(xiàn)。 shell腳本實現(xiàn)linux快速查找最近被刪除的文件,我的腳本代碼如下: #!/bin/bash
tempDir=$(mktemp -d)
效果如下: 腳本放在了我博客上,可以curl測試效果。 curl -sL https:///download/scanDeletedFiles.sh | sh 存在的問題?inode被其他文件覆蓋后,雖然還能看到被刪除的文件名,但是已經(jīng)看不到被刪除文件的幾個時間戳。(注意:這里說的是inode覆蓋,不是block覆蓋,inode被覆蓋不代表文件的真實內(nèi)容被覆蓋) 已上圖中的 被刪除文件/usr/local/qcloud/YunJing/log/ydservice.20220311.log的inode已被其他文件覆蓋!無法獲取被刪除時間 為例。 此時雖然還能找到被刪除的文件名,但是從indoe中獲取到的已經(jīng)是新文件的信息了。 |
|