好的阿杰,我给你整理一份 Linux 服务器中恢复被删除日志文件的完整方法,适合追踪攻击者或分析入侵事件。


1️⃣ 关键点说明

  1. Linux 删除文件不会立即清零磁盘
    • 文件只是从目录中移除,但数据仍可能存在于磁盘块
  2. 成功恢复的前提
    • 磁盘空间未被新数据覆盖
    • 尽快操作,避免写入新文件
  3. 常用日志目录
    • 系统日志:/var/log/auth.log/var/log/secure
    • Web 日志:/var/log/nginx//var/log/apache2/

2️⃣ 查看已删除文件仍被进程占用

Linux 删除的文件可能 仍被进程打开

lsof | grep deleted

  • 输出示例:
nginx   1234 www-data 4r  REG  8,1  12345  /var/log/nginx/access.log (deleted)

  • 可以用 cp 或 cat 恢复文件内容:
cp /proc/1234/fd/4 /tmp/access.log.recovered

注意:

  • /proc/<PID>/fd/<FD> 指向进程打开的文件描述符
  • 这种方法速度快,成功率高

3️⃣ 使用文件系统工具恢复

方法一:extundelete(Ext3/Ext4 文件系统)

  1. 安装 extundelete
sudo apt install extundelete      # Ubuntu/Debian
sudo yum install extundelete      # CentOS

  1. 卸载挂载分区(假设日志在 /var
sudo umount /dev/sda1

  1. 恢复被删除文件
sudo extundelete /dev/sda1 --restore-file var/log/auth.log

  1. 恢复的文件会放在 RECOVERED_FILES 目录中

注意:extundelete 仅支持 ext3/ext4 文件系统


方法二:testdisk / photorec

  • testdisk 可以恢复已删除的文件目录结构
  • photorec 可以扫描磁盘恢复文件内容(不依赖文件名)
sudo apt install testdisk
sudo testdisk

  • 按照向导选择磁盘、分区、文件类型恢复

4️⃣ 使用备份恢复

  • 最简单且最可靠的方式:恢复 定期备份
  • 常见备份策略:
    • rsync 增量备份
    • 云备份(阿里云、AWS S3)
    • 本地快照(LVM / ZFS / Btrfs)

5️⃣ 恢复后的分析

  1. 分析日志,找出攻击者 IP、访问时间、命令执行等信息
  2. 对比其他日志(防火墙、Web 服务日志)进行交叉验证
  3. 尽量保留恢复后的日志原样,避免覆盖

6️⃣ 预防措施

  1. 定期备份日志文件
rsync -av /var/log/ /backup/logs/

  1. 开启日志审计
auditctl -w /var/log/auth.log -p wa

  • 监控日志文件修改/删除行为
  1. 使用远程日志服务器
  • 将日志发送到另一台安全服务器,防止本机日志被删除

7️⃣ 总结

方法优点注意事项
进程占用恢复 (/proc/<PID>/fd)快速、无需卸载文件被覆盖后不可用
extundelete支持精确恢复需卸载分区,支持 ext3/ext4
testdisk/photorec支持多文件系统恢复目录结构可能丢失
备份恢复高可靠性需事先做好备份