Linux系統是伺服器最常見的作業系統,當然也面臨著非常多的安全事件,相較Windows作業系統,Linux採用了明確的存取權限控制和全面的管理工具,具有非常高的安全性和穩定性。Linux系統被入侵後,攻擊者為了掩蓋蹤跡,經常會清除系統中的各種日誌,包括Web的access和error日誌、last日誌、message日誌、secure日誌等,給我們後期應急響應和取證分析帶來了非常大的阻力。所以,恢複被清除的日誌是非常重要的取證和分析環節,一下是使用lsof命令恢複記錄檔的案例,適用於常見的日誌恢複工作。
一、前提條件
不能關閉伺服器,不能關閉相關服務或進程,如恢複apache的訪問日誌 /var/log/httpd/access_log ,不能關閉或者重啟伺服器系統,也不能重啟httpd服務。
二、實施過程
1. 找到相關進程pid
代碼如下:
[root@localhost ~]# lsof | grep access_log
httpd 1392 root 7w REG 253,0 0 263802 /var/log/httpd/access_log
httpd 7330 apache 7w REG 253,0 0 263802 /var/log/httpd/access_log
httpd 7331 apache 7w REG 253,0 0 263802 /var/log/httpd/access_log
httpd 7332 apache 7w REG 253,0 0 263802 /var/log/httpd/access_log
httpd 7333 apache 7w REG 253,0 0 263802 /var/log/httpd/access_log
httpd 7334 apache 7w REG 253,0 0 263802 /var/log/httpd/access_log
httpd 7335 apache 7w REG 253,0 0 263802 /var/log/httpd/access_log
httpd 7336 apache 7w REG 253,0 0 263802 /var/log/httpd/access_log
httpd 7337 apache 7w REG 253,0 0 263802 /var/log/httpd/access_log
這裡我們重點關注一下第一、第二、第三、第四列,分別表示進程名、pid、使用者、檔案描述符,我們看到這裡的檔案描述符是7w,所以我們在下一步操作過程要記住這個7.
2. 找回日誌
代碼如下:
[root@localhost ~]# wc -l /proc/1392/fd/7
55 /proc/1392/fd/7
[root@localhost ~]# cat /proc/1392/fd/7 > /var/log/httpd/access_log
我們先通過wc或者tail命令查看日誌資訊,然後再將日誌重寫到access_log中即可。
三、總結
在Linux系統的/proc 分區下儲存著進程的目錄和名字,包含fd(檔案描述符)和其下的子目錄(進程開啟檔案的連結),那麼如果刪除了一個檔案,還存在一個 inode的引用:/proc/進程號/fd/檔案描述符。我們只要知道當前開啟檔案的進程pid和檔案描述符fd就能利用lsof工具列出進程開啟的檔案。通過lsof我們就可以進行簡單的檔案恢複工作,當然這裡不局限於記錄檔,只要是存在引用的檔案。