找出删除这些文件或目录的进程

2025-12-09 20:13:00
丁国栋
原创 12
摘要:有一个目录下的文件经常被删除,怎么找出删除这些文件或目录的进程?

有一个目录下的文件经常被删除,怎么找出删除这些文件或目录的进程?

可以通过以下方法找出删除文件的进程:

一、实时监控方法

1. 使用 auditd(推荐)

# 安装 auditd
sudo apt install auditd  # Ubuntu/Debian
sudo yum install audit  # RHEL/CentOS
# 监控特定目录
sudo auditctl -w /path/to/monitor -p wa -k delete_monitor
# 查看日志
sudo ausearch -k delete_monitor | tail -20

2. 使用 inotifywait

# 安装 inotify-tools
sudo apt install inotify-tools
# 监控删除事件
inotifywait -m -r -e delete /path/to/monitor

二、日志分析方法

1. 查看系统日志

# 检查系统日志中的删除操作
sudo grep -i "delete\|remove\|unlink" /var/log/syslog
sudo journalctl -f | grep -i "delete\|remove\|unlink"

2. 检查最近删除的文件

# 使用 lsof 查看被删除但仍被进程占用的文件
lsof | grep deleted

三、使用专用工具

1. fatrace(文件活动跟踪)

sudo fatrace | grep -E "DELETE|UNLINK"

2. opensnoop(来自 bcc/BPF)

# 需要安装 bcc-tools
sudo opensnoop-bpfcc | grep -E "unlink|rmdir"

四、持久化监控方案

创建监控脚本 /usr/local/bin/monitor_deletes.sh

#!/bin/bash
MONITOR_DIR="/path/to/monitor"
LOG_FILE="/var/log/file_deletes.log"
# 使用 auditd 永久监控
echo "-w $MONITOR_DIR -p wa -k file_deletes" >> /etc/audit/rules.d/delete_monitor.rules
auditctl -R /etc/audit/rules.d/delete_monitor.rules
# 后台运行 inotifywait
inotifywait -m -r -e delete --format '%T %e %w%f' --timefmt '%F %T' "$MONITOR_DIR" >> "$LOG_FILE" &

五、快速排查步骤

  1. 立即启动监控
sudo auditctl -w /problem/directory -p wa -k who_deletes
  1. 在另一个终端执行删除操作测试

  2. 查看结果

sudo ausearch -k who_deletes | grep -E "pid=|comm="

六、高级排查

如果怀疑是恶意软件或定时任务:

# 检查 crontab
crontab -l
sudo cat /etc/crontab
ls -la /etc/cron.*
# 检查 systemd 定时器
systemctl list-timers
# 检查进程树
pstree -p

建议

  1. 立即启用 auditd 监控,它是最可靠的方案
  2. 如果目录很重要,先设置只读保护chmod -R a-w /path/to/directory
  3. 考虑配置 文件系统配额 或使用 SELinux/AppArmor 限制删除权限

通过上述方法,你应该能够找到删除文件的进程。通常最常见的原因是:

  • Cron 任务
  • 应用程序的日志轮转
  • 自动化清理脚本
  • 存储空间清理工具
发表评论
博客分类