找出删除这些文件或目录的进程
- 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" &
五、快速排查步骤
- 立即启动监控:
sudo auditctl -w /problem/directory -p wa -k who_deletes
-
在另一个终端执行删除操作测试
-
查看结果:
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
建议
- 立即启用 auditd 监控,它是最可靠的方案
- 如果目录很重要,先设置只读保护:
chmod -R a-w /path/to/directory - 考虑配置 文件系统配额 或使用 SELinux/AppArmor 限制删除权限
通过上述方法,你应该能够找到删除文件的进程。通常最常见的原因是:
- Cron 任务
- 应用程序的日志轮转
- 自动化清理脚本
- 存储空间清理工具
发表评论