1 當進程打開了某個文件時,只要該進程保持打開該文件,即使將其刪除,它依然存在於磁碟中。這意味著,進程並不知道文件已經被刪除,它仍然可以向打開該文件時提供給它的文件描述符進行讀取和寫入。除了該進程之外,這個文件是不可見的,因為已經刪除了其相應的目錄索引節點。 2 在/proc 目錄下,其中包含了反映 ...
1>當進程打開了某個文件時,只要該進程保持打開該文件,即使將其刪除,它依然存在於磁碟中。這意味著,進程並不知道文件已經被刪除,它仍然可以向打開該文件時提供給它的文件描述符進行讀取和寫入。除了該進程之外,這個文件是不可見的,因為已經刪除了其相應的目錄索引節點。
2>在/proc 目錄下,其中包含了反映內核和進程樹的各種文件。/proc目錄掛載的是在記憶體中所映射的一塊區域,所以這些文件和目錄並不存在於磁碟中,因此當我們對這些文件進行讀取和寫入時,實際上是在從記憶體中獲取相關信息。大多數與 lsof 相關的信息都存儲於以進程的 PID 命名的目錄中,即 /proc/1234 中包含的是 PID 為 1234 的進程的信息。每個進程目錄中存在著各種文件,它們可以使得應用程式簡單地瞭解進程的記憶體空間、文件描述符列表、指向磁碟上的文件的符號鏈接和其他系統信息。lsof 程式使用該信息和其他關於內核內部狀態的信息來產生其輸出。所以lsof 可以顯示進程的文件描述符和相關的文件名等信息。也就是我們通過訪問進程的文件描述符可以找到該文件的相關信息。
3>當系統中的某個文件被意外地刪除了,只要這個時候系統中還有進程正在訪問該文件,那麼我們就可以通過lsof從/proc目錄下恢復該文件的內容。
假設入侵者將/var/log/secure文件刪除掉了,嘗試將/var/log/secure文件恢復的方法可以參考如下:
a.查看/var/log/secure文件,發現已經沒有該文件
[root@localhost ~]# ll /var/log/secure
ls: cannot access /var/log/secure: No such file or directory
b.使用lsof命令查看當前是否有進程打開/var/log/secure
[root@localhost ~]# lsof | grep secure
rsyslogd 642 root 7w REG 253,0 200 4686549 /var/log/secure (deleted)
in:imjour 642 654 root 7w REG 253,0 200 4686549 /var/log/secure (deleted)
rs:main 642 655 root 7w REG 253,0 200 4686549 /var/log/secure (deleted)
c.從上面的信息可以看到 PID 642(rsyslogd)打開文件的文件描述符為7。同時還可以看到/var/log/ secure已經標記為被刪除了。因此我們可以在/proc/642/fd/7(fd下的每個以數字命名的文件表示進程對應的文件描述符)中查看相應的信息,如下:
tail /proc/642/fd/7
Nov 6 09:45:14 localhost sshd[6246]: Accepted password for root from 192.168.6.8 port 52497 ssh2
Nov 6 09:45:14 localhost sshd[6246]: pam_unix(sshd:session): session opened for user root by (uid=0)
d.從上面的信息可以看出,查看/proc/642/fd/7就可以得到所要恢復的數據。如果可以通過文件描述符查看相應的數據,那麼就可以使用I/O重定向將其重定向到文件中,如:
[root@localhost ~]# cat /proc/642/fd/7 > /var/log/secure
[root@localhost ~]# ll /var/log/secure
-rw-r--r--. 1 root root 200 Nov 6 09:52 /var/log/secure
[root@localhost ~]# systemctl restart rsyslog
[root@localhost ~]# lsof | grep secure
login 650 root mem REG 253,0 11216 8505425 /usr/lib64/security/pam_securetty.so
rsyslogd 6447 root 8w REG 253,0 436 4686541 /var/log/secure
in:imjour 6447 6449 root 8w REG 253,0 436 4686541 /var/log/secure
rs:main 6447 6450 root 8w REG 253,0 436 4686541 /var/log/secure