直接监控/root目录非授权进入行为需配置auditd永久规则,捕获openat、statx、getdents64等系统调用,结合权限加固、日志保护与结构化报告实现内核级可追溯审计。

直接监控 /root 目录的非授权进入行为,核心是捕获“访问尝试”而非仅“内容读取”。Auditd 本身不记录“cd /root”这类 shell 内置命令,但能精准捕获所有实际触发的系统调用——比如 openat()、statx()、getdents64()(即列出目录内容)等。只要用户试图进入或探测 /root,这些底层操作就会被审计框架捕获。
一、配置永久性审计规则,聚焦关键访问动作
非授权进入的本质,是普通用户对 /root 执行了本不应有的访问类系统调用。应监控以下三类动作:
-
属性读取:如
stat、lstat,用于判断目录是否存在或检查权限 -
内容列举:如
getdents或getdents64,对应ls /root或cd /root && ls -
路径打开:如
openat(AT_FDCWD, "/root", ...),是进入目录或访问其下文件的第一步
将以下规则写入 /etc/audit/rules.d/root-access.rules:
-a always,exit -F dir=/root -F perm=r -F key=root_access -a always,exit -F dir=/root -F perm=x -F key=root_access -a always,exit -F arch=b64 -S openat,statx,getdents64 -F dir=/root -F key=root_access -a always,exit -F arch=b32 -S openat,stat, getdents -F dir=/root -F key=root_access
然后加载规则:sudo augenrules --load 或 sudo systemctl restart auditd。
二、验证规则是否生效并排除误报
普通用户(如 testuser)执行以下命令会触发审计事件:
-
ls /root(触发getdents64和statx) -
stat /root(触发statx) -
cd /root 2>/dev/null || echo "failed"(即使失败,openat仍可能被调用)
用以下命令实时观察是否捕获到事件:
sudo ausearch -k root_access -m SYSCALL --start recent | aureport -f -i
若无输出,检查:ls -ld /root 是否确为 drwx------(700);确认当前用户不是 root 或在 root 组中;确保未启用 SELinux 的宽松策略干扰审计。
三、生成可读性强的审计报告
单纯查看原始日志难以定位异常。推荐组合使用 ausearch 与 aureport 输出结构化摘要:
- 按用户统计访问次数:
sudo ausearch -k root_access --start today | aureport -u -i - 列出全部访问详情(含时间、UID、进程名、命令行):
sudo ausearch -k root_access --start this-week -i | grep -E "(uid=|comm=|exe=|cmdline=)" - 导出为 CSV 供进一步分析:
sudo ausearch -k root_access --start today -i --csv > /tmp/root_access_report.csv
注意:-i 参数会自动解析 UID/GID 为用户名、路径为可读名,是生成报告的关键开关。
四、增强可信度:防止日志被篡改或绕过
审计日志本身必须受保护,否则攻击者可清除痕迹:
- 确保
/var/log/audit/权限为drwx------,属主 root:root - 在
/etc/audit/auditd.conf中设置:max_log_file = 10、num_logs = 5、max_log_file_action = rotate - 启用日志完整性校验(可选):
sudo auditctl -e 2(锁定审计配置,需重启后生效) - 考虑将审计日志转发至远程 syslog 服务器,实现物理隔离
这样,任何对 /root 的试探行为都会留下不可抵赖的内核级证据,配合定期报告,就能有效识别和响应非授权进入企图。











