当 Linux 计算机受到入侵时, 常见的情况是日志文件被删除, 以掩盖攻击者的踪迹. 管理错误也可能导致意外删除重要的文件, 比如在清理旧日志时, 意外地删除了数据库的活动事务日志. 有时可以通过 lsof 来恢复这些文件.
在 / proc 目录下, 其中包含了反映内核和进程树的各种文件./proc 目录挂载的是在内存中所映射的一块区域, 所以这些文件和目录并不存在于磁盘中, 因此当我们对这些文件进行读取和写入时, 实际上是在从内存中获取相关信息. 大多数与 lsof 相关的信息都存储于以进程的 PID 命名的目录中, 即 /proc/1234 中包含的是 PID 为 1234 的进程的信息. 每个进程目录中存在着各种文件, 它们可以使得应用程序简单地了解进程的内存空间, 文件描述符列表, 指向磁盘上的文件的符号链接和其他系统信息.
当系统中的某个文件被意外地删除了, 只要这个时候系统中还有进程正在访问该文件, 那么我们就可以通过 lsof 从 / proc 目录下恢复该文件的内容. 假如由于误操作将 / var/log/messages 文件删除掉了, 那么这时要将 / var/log/messages 文件恢复的方法如下:
首先使用 lsof 来查看当前是否有进程打开 / var/logmessages 文件, 如下:
- # lsof |grep /var/log/messages
- syslogd 1283 root 2w REG 3,3 5381017 1773647 /var/log/messages (deleted)
从上面的信息可以看到 PID 1283(syslogd) 打开文件的文件描述符为 2. 同时还可以看到 / var/log/messages 已经标记被删除了. 因此我们可以在 /proc/1283/fd/2 (fd 下的每个以数字命名的文件表示进程对应的文件描述符) 中查看相应的信息, 如下:
# head -n 10 /proc/1283/fd/2
Aug 4 13:50:15 holmes86 syslogd 1.4.1: restart.
Aug 4 13:50:15 holmes86 kernel: klogd 1.4.1, log source = /proc/kmsg started.
Aug 4 13:50:15 holmes86 kernel: Linux version 2.6.22.1-8 (root@everestbuilder.linux-ren.org) (gcc version 4.2.0) #1 SMP Wed Jul 18 11:18:32 EDT 2007
从上面的信息可以看出, 查看 /proc/8663/fd/15 就可以得到所要恢复的数据. 如果可以通过文件描述符查看相应的数据, 那么就可以使用 I/O 重定向将其复制到文件中, 如:
cat /proc/1283/fd/2> /var/log/messages
对于许多应用程序, 尤其是日志文件和数据库, 这种恢复删除文件的方法非常有用.
来源: http://www.bubuko.com/infodetail-2586555.html