在 CentOS 系统中,要实现目录(例如 /var/log
)的 readdir
操作的日志记录,可以通过以下几种方法:
方法一:使用 inotify
inotify
是 Linux 内核提供的一种文件系统事件监控机制。你可以使用 inotifywait
工具来监控目录的变化,并将变化记录到日志文件中。
-
安装
inotify-tools
sudo yum install inotify-tools
-
创建一个脚本来监控目录并记录日志
创建一个脚本文件,例如
monitor_directory.sh
:#!/bin/bash LOG_FILE="/var/log/directory_monitor.log" MONITOR_DIR="/var/log" inotifywait -m -r -e create,delete,modify --format '%w%f %e' "$MONITOR_DIR" | while read FILE EVENT; do echo "$(date '+%Y-%m-%d %H:%M:%S') - $FILE - $EVENT" >> "$LOG_FILE" done
-
赋予脚本执行权限并运行
chmod +x monitor_directory.sh ./monitor_directory.sh
方法二:使用 auditd
auditd
是 Linux 审计守护进程,可以用来监控和记录系统调用和文件系统事件。
-
安装
auditd
sudo yum install audit
-
配置
auditd
规则编辑
/etc/audit/audit.rules
文件,添加以下规则来监控/var/log
目录:-a exit,always -F path=/var/log -F perm=wa -k directory_monitor
这条规则的意思是:监控
/var/log
目录下的所有写操作(perm=wa
),并在每次操作完成后记录日志(-a exit,always
),使用directory_monitor
作为关键字。 -
重启
auditd
服务sudo systemctl restart auditd
-
查看审计日志
审计日志通常位于
/var/log/audit/audit.log
。你可以使用ausearch
和aureport
工具来查询和分析日志。sudo ausearch -k directory_monitor sudo aureport -k directory_monitor
方法三:使用 rsyslog
和自定义脚本
你也可以结合 rsyslog
和自定义脚本来实现日志记录。
-
编辑
rsyslog
配置文件编辑
/etc/rsyslog.conf
或/etc/rsyslog.d/50-default.conf
文件,添加以下内容:if $programname == 'custom_script' then /var/log/custom_script.log & stop
-
创建自定义脚本
创建一个脚本文件,例如
custom_script.sh
:#!/bin/bash LOG_FILE="/var/log/custom_script.log" MONITOR_DIR="/var/log" inotifywait -m -r -e create,delete,modify --format '%w%f %e' "$MONITOR_DIR" | while read FILE EVENT; do logger -t custom_script "$FILE - $EVENT" done
-
赋予脚本执行权限并运行
chmod +x custom_script.sh ./custom_script.sh
通过以上方法,你可以在 CentOS 系统中实现对目录 readdir
操作的日志记录。选择适合你需求的方法进行配置即可。