在 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
操作的日志记录。选择适合你需求的方法进行配置即可。