auditd可通过监控/proc/sys/路径写操作并补充关键系统调用,全面记录sysctl参数修改行为。具体包括:1. 添加-w /proc/sys/ -p wa -k sysctl_write规则;2. 补充sysctl、write族及ioctl等系统调用监控;3. 使用ausearch -k sysctl_write分析日志;需注意不记录写入值本身且容器环境下依赖宿主auditd可见性。

要让 auditd 记录所有对内核 sysctl 参数的修改行为(如通过 sysctl -w、写入 /proc/sys/ 下文件、或加载模块触发参数变更),核心思路是:监控所有可能修改 sysctl 的系统调用路径,尤其是对 /proc/sys/ 目录下文件的写操作,以及关键系统调用如 sysctl()(已废弃但部分旧程序仍用)、write()、pwrite64()、ioctl()(某些 netns 或模块相关设置)等。
1. 监控 /proc/sys/ 下所有写操作(最有效且覆盖最广)
/proc/sys/ 是 sysctl 参数在用户空间的主要接口。几乎所有方式(sysctl -w net.ipv4.ip_forward=1、echo 1 > /proc/sys/net/ipv4/ip_forward、甚至某些 systemd-sysctl 或 Ansible 模块)最终都会触发对该路径下文件的写入。auditd 可通过路径监控精准捕获。
- 添加规则到
/etc/audit/rules.d/sysctl.rules:
说明:
-w 表示监控路径;
-p wa 表示监控“写(w)”和“属性更改(a)”,后者可捕获 chmod/chown 等可能影响后续写入权限的操作;
-k sysctl_write 是自定义键名,便于后续过滤和审计报告。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 重载规则:
sudo augenrules --load或sudo systemctl restart auditd - 验证是否生效:
sudo auditctl -l | grep sysctl_write应看到对应规则
2. 补充监控关键系统调用(增强兼容性)
虽然绝大多数修改走 /proc/sys/,但极少数场景(如内核模块初始化时调用 register_sysctl_table() 并设初值、或某些容器运行时通过 ioctl 设置网络命名空间参数)可能绕过 procfs。建议补充以下调用监控:
- 监控
sysctl系统调用(仅 x86_64 上存在,且已被弃用,但保留以防旧二进制):
-a always,exit -F arch=b64 -S sysctl -k sysctl_syscall - 监控对
/proc/sys/目录本身的 openat + write 类操作(更底层):
-a always,exit -F arch=b64 -S write,writev,pwrite64 -F path=/proc/sys/ -k sysctl_write_low - (可选)监控
ioctl调用中与网络命名空间或模块相关的请求码(需结合具体场景,一般非必需)
3. 查看与分析日志
日志默认记录在 /var/log/audit/audit.log。使用 ausearch 提取 sysctl 相关事件:
- 查所有 sysctl 写操作:
sudo ausearch -k sysctl_write - 查详细上下文(含命令行、UID、进程名):
sudo ausearch -k sysctl_write --raw | aureport -f -i - 实时观察:
sudo tail -f /var/log/audit/audit.log | grep --line-buffered "sysctl_write"
典型日志条目会包含:exe="/usr/sbin/sysctl" 或 exe="/bin/bash",comm="sysctl",path="/proc/sys/net/ipv4/ip_forward",a0="..."(写入内容的地址,需结合 strace 或 ausearch --interpret 辅助分析),以及 uid、pid、ppid 等关键字段。
4. 注意事项与限制
-
/proc/sys/是虚拟文件系统,auditd 的路径监控依赖于内核的 inotify 或 fanotify 支持,现代主流发行版(RHEL/CentOS 7+, Ubuntu 16.04+)均支持,无需额外配置 - 规则中使用
-w /proc/sys/会递归监控其所有子目录(如/proc/sys/net/、/proc/sys/vm/),无需逐个添加 - auditd 不记录写入的具体值(例如
echo 1还是echo 0),只记录“有写操作”。若需值内容,需配合syslog或应用层日志(如systemd-sysctl自带日志)交叉分析 - 容器环境(如 Docker/Podman)中,若容器以
--privileged或挂载了/proc/sys,宿主 auditd 仍能捕获(因底层仍是宿主内核的 procfs 操作);但若使用 user namespace 或 unshare 隔离较深,需确认 auditd 是否在对应 PID 命名空间中运行(通常宿主 auditd 可见所有)










