要追踪特定用户对数据库配置文件的读取行为,核心是使用auditd通过-w监控目标路径、-p ra捕获读和属性访问、-F auid=UID锁定原始登录用户,并将规则写入/etc/audit/rules.d/后执行augenrules --load持久化,再用ausearch -k key -i检索日志。

要追踪特定用户对数据库配置文件的读取行为,核心是让 auditd 精确捕获该用户调用 openat、open 或 access 等系统调用时访问目标配置路径的动作,并关联其真实 UID(或 auid,即登录会话原始 UID)。
关键不在“谁打开了文件”,而在“谁以哪个身份发起的访问”——因为普通用户可能通过 sudo、su 或 shell 脚本间接操作,auid 才能锁定初始登录者。
明确监控目标文件路径
常见数据库配置位置包括:
- MySQL/MariaDB:
/etc/my.cnf、/etc/mysql/my.cnf、/etc/mysql/conf.d/下的.cnf文件 - PostgreSQL:
/var/lib/pgsql/data/postgresql.conf、/var/lib/pgsql/data/pg_hba.conf - Redis:
/etc/redis/redis.conf - MongoDB:
/etc/mongod.conf
先确认实际路径,避免规则失效。例如:
ls -l /etc/my.cnf /etc/mysql/my.cnf 2>/dev/null | head -1
添加带用户标识的审计规则
使用 auditctl 添加实时规则(临时生效),或写入 /etc/audit/rules.d/dbconf.rules(永久生效):
# 监控所有对 /etc/my.cnf 的读取(r)和属性访问(a),按原始登录用户(auid)过滤 sudo auditctl -w /etc/my.cnf -p ra -F auid=1001 -k db_conf_read # 若需监控整个 conf.d 目录(注意:-w 不递归,仅监控目录本身事件;但 open 操作仍会被捕获) sudo auditctl -w /etc/mysql/conf.d/ -p ra -F auid=1001 -k db_conf_read # 更通用:监控任意用户读取任何 .cnf 文件(需配合 -F path 后缀匹配,但 auditd 不支持通配符路径,建议用脚本生成规则) # 推荐做法:只监控明确已知的关键配置文件,减少日志噪音
⚠️ 注意:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
auid=1001是目标用户的 登录会话 UID(非当前 euid 或 uid),可用id -u username查看,也可用ausearch --loginuid 1001验证历史会话。 -
-p ra表示监控「读」和「属性读取」(如stat、access),覆盖cat、grep、vim -R、mysql --defaults-file等常见读取方式。 - 不加
-F auid=...会导致所有用户操作混在一起,失去“特定用户”意义。
实时验证与检索日志
执行一次测试读取(如 sudo -u targetuser cat /etc/my.cnf),然后立即检索:
# 查看最近 5 分钟内匹配 key 的记录 sudo ausearch -k db_conf_read --start recent --raw | aureport -f -i # 或直接解析为可读格式(含命令、路径、用户、时间) sudo ausearch -k db_conf_read --start recent -i # 精确过滤某用户 auid 的全部相关事件(不依赖 key) sudo ausearch --loginuid 1001 -m open,openat,access -i | grep -E '(/etc/my\.cnf|conf\.d)'
输出中重点关注字段:
-
auid:原始登录用户(不可伪造) -
uid:当前进程有效用户(可能为 root) -
exe:执行的程序(如/usr/bin/cat) -
path:被访问的文件路径 -
comm:命令名(如cat)
让规则持久化并防止绕过
将上述 auditctl 命令写入 /etc/audit/rules.d/dbconf.rules,然后重启服务:
echo "-w /etc/my.cnf -p ra -F auid=1001 -k db_conf_read" | sudo tee /etc/audit/rules.d/dbconf.rules sudo augenrules --load # 或 systemctl restart auditd
✅ 补充建议:
- 避免监控
/proc/self/fd/或/dev/fd/等伪路径——它们无法被-w捕获,但execve规则可补位;如有高敏感场景,额外加 execve 规则:sudo auditctl -a always,exit -F arch=b64 -S execve -F auid=1001 -F exe=/usr/bin/cat -k db_conf_cat
- 定期用
sudo auditctl -s检查规则是否加载成功,sudo aureport -st查看统计摘要。 - 日志默认存于
/var/log/audit/audit.log,确保磁盘空间充足,建议配合logrotate归档。
这样配置后,只要该用户以任意方式(交互式、脚本、sudo)读取指定配置文件,都会留下带上下文的完整审计痕迹。

















