应使用auditd结合用户/组上下文与文件操作审计,通过-w指定Web目录、-p rwxa捕获读写执行及属性变更、-F auid>=1000过滤普通用户、-F gid限定组,并启用execve系统调用审计以记录完整命令行,配合ausearch与aureport解析用户名和路径,实现可追溯、防抵赖的认证后访问行为监控。

要监控特定高风险用户组(如 dev、webadmin 或临时提权的 sudo 成员)对 Web 目录(如 /var/www/html、/srv/www)的认证后访问行为,不能只依赖 Apache/Nginx 访问日志——那些只记录 HTTP 请求,不体现“谁在系统层面读写文件”。真正可追溯、防抵赖的方式是结合 auditd + 用户/组上下文 + 文件操作审计。
一、明确监控目标:认证访问 ≠ HTTP 请求
“认证访问”在此场景中指:用户已通过 SSH 或本地登录完成身份认证,随后在 shell 中执行了针对 Web 目录的敏感操作,例如:
- 用
vim /var/www/html/index.php修改页面 - 用
cp backup.zip /var/www/html/覆盖上线 - 用
rm -rf /var/www/html/old/删除旧资源 - 用
chown -R www-data:www-data /var/www/html/更改归属
这些操作均绕过 Web 服务进程,属于系统级文件访问,必须由 auditd 捕获。
二、配置精准审计规则(按组+路径)
auditd 本身不直接支持“按组监控目录”,但可通过 -F auid=(审计 UID)+ getent group 组名 提取 UID 列表,再用多条规则覆盖。更实用的是:先锁定组内关键用户,再统一监控路径。
示例(监控 webadmin 组所有成员对 /var/www/html 的读写执行与属性变更):
- 获取组成员 UID:
getent group webadmin | cut -d: -f4 | tr ',' '\n' | xargs -I{} id -u {} 2>/dev/null | sort -u - 为每个 UID 添加规则(或使用通配路径简化):
sudo auditctl -w /var/www/html/ -p rwxa -F auid>=1000 -F auid!=4294967295 -k webadmin_html_access
说明:auid>=1000过滤普通用户(排除系统账户),auid!=4294967295排除未认证会话(如 cron),-p rwxa捕获全部动作 - 若需严格限定仅该组,可配合
-F gid=(需 kernel ≥ 4.15 且 auditd ≥ 3.0):sudo auditctl -w /var/www/html/ -p rwxa -F gid=$(getent group webadmin | cut -d: -f3) -k webadmin_html_gid
三、增强可读性:关联用户身份与操作细节
默认 audit.log 只记 UID/GID,需确保日志含用户名和命令参数:
- 启用 execve 系统调用审计(捕获完整命令行):
sudo auditctl -a always,exit -F arch=b64 -S execve(x86_64)sudo auditctl -a always,exit -F arch=b32 -S execve(兼容 32 位) - 查询时自动解析用户名和路径:
sudo ausearch -k webadmin_html_access --input-logs | aureport -f -i
其中-i参数将 UID/GID 替换为对应用户名/组名,-f显示文件路径
四、日志留存与异常识别建议
Web 目录操作高频但应受控,需区分“运维合法操作”与“可疑行为”:
- 设置日志轮转策略(编辑
/etc/audit/auditd.conf):max_log_file = 20(MB)num_logs = 10(保留 10 个归档)flush = incremental_async(降低 I/O 延迟) - 每日自动筛查高危模式(加入 crontab):
sudo ausearch -k webadmin_html_access -ts yesterday | awk '$5~/^execve$/ && $12~/rm|dd|shred/ {print}' | mail -s "Web dir risky cmd" admin@company.com
——抓取昨日执行了rm、dd等危险命令的记录 - 禁止非必要写入:确认
/var/www/html所属组为www-data或apache,权限设为750,并移除webadmin组对该目录的直接写权限(用 ACL 仅授权特定用户):sudo setfacl -m u:deployer:rwX /var/www/html,避免全组宽泛授权


















