Linux 服务器访问日志审计如何写

作者:袖梨 2026-08-11

Linux服务器日志审计需通过auditd内核级服务实现不可篡改记录,覆盖登录、命令执行、敏感文件访问等行为,并配合权限控制、日志轮转与异地备份保障合规性。

Linux 服务器访问日志审计不是“写”出来的,而是通过配置系统服务、定义监控规则、收集分析日志来实现的。核心目标是:谁、在什么时间、从哪台机器、访问了哪些资源(如文件、命令、服务)、做了什么操作(读/写/执行/登录等),且所有记录不可篡改、可追溯。

明确审计对象和关键日志源

先搞清你要审什么,再找对应日志:

  1. 用户登录与认证行为:看 /var/log/auth.log(Debian/Ubuntu)或 /var/log/secure(RHEL/CentOS),记录SSH登录、sudo操作、密码失败等;
  2. 命令执行痕迹:默认HISTFILE不跨用户、易被清除,不可靠;必须依赖auditd捕获execve系统调用,真实记录每个bashlscurl等命令;
  3. 敏感文件访问:比如/etc/passwd/etc/shadow/root/.ssh/,用auditd -w规则监控读写执行;
  4. 网络服务访问:Web服务查/var/log/apache2/access.log/var/log/nginx/access.log;数据库查/var/log/mysql/error.log或启用通用查询日志;
  5. 内核级事件:SELinux拒绝、模块加载、权限变更等,统一由/var/log/audit/audit.log记录,这是最权威的源头。

用 auditd 做可靠的行为捕获

仅靠应用日志(如auth.log)不够——它可被普通root删改;auditd直接挂钩内核,防篡改,才是审计基石:

  1. 确保服务运行:systemctl enable --now auditd
  2. 添加永久规则(写入/etc/audit/rules.d/cmd.rules):

    -a always,exit -F arch=b64 -S execve -k cmd_exec

    -w /etc/passwd -p wa -k passwd_mod

  3. 加载规则:augenrules --load(不要用auditctl -a临时加,重启即失效);
  4. 验证是否生效:ausearch -k cmd_exec -ts recent | head -5,执行几个命令后应能查到记录。

日常查看与快速排查方法

不用翻原始日志文件,用专用工具高效提取信息:

  1. 查某用户最近所有命令:ausearch -ui 1001 -m execve | aureport -f -i(1001是UID);
  2. 查谁修改过/etc/passwd:ausearch -k passwd_mod | aureport -f -i
  3. 查特定时间段失败登录:ausearch -m avc -ts 2026-07-29 00:00:00 -te 2026-07-29 23:59:59 | grep denied
  4. 生成每日摘要报告:aureport -ts yesterday -te today --summary,一眼看出登录数、命令数、文件访问异常量。

保障日志可用性与合规底线

审计日志本身必须受保护,否则等于没审:

  1. 限制访问权限:chmod 600 /var/log/audit/audit.log*,只允许root读写;
  2. 配置自动轮转:/etc/logrotate.d/auditd中设maxsize 50Mrotate 12,避免撑爆磁盘;
  3. 异地备份:每天压缩归档/var/log/audit/目录并同步到独立安全存储;
  4. 禁用历史命令覆盖:echo "export HISTCONTROL=ignoredups:ignorespace" >> /etc/profile,配合auditd形成双重记录。

相关文章

精彩推荐