Linux服务器日志审计应通过 auditd 这类内核级审计服务实现不可篡改记录,全面覆盖用户登录、命令执行、敏感文件访问等关键操作,并结合权限管控、日志轮转和异地备份机制,满足安全审计与合规要求。

Linux 服务器访问日志审计,并不是简单“写几行日志”就能解决的问题,它本质上是一套可落地的安全审计体系:通过配置系统服务、制定审计规则、持续采集并分析日志,最终将关键访问行为完整保留下来。通俗来说,核心目标就是搞清楚:是谁、在什么时间、从哪台主机、访问了哪些资源(如文件、命令、服务)、执行了什么操作(读/写/执行/登录等);同时还必须保证这些审计记录不可被随意篡改,并且具备完整的追溯能力。
明确审计对象和关键日志源
首先要明确 Linux 服务器日志审计到底审什么,再去匹配对应的日志来源:
- 用户登录与认证行为:查看
/var/log/auth.log(Debian/Ubuntu)或/var/log/secure(RHEL/CentOS),这里会记录 SSH 登录、sudo 提权、密码验证失败等安全事件; - 命令执行痕迹:默认的
HISTFILE不能跨用户追踪,也容易被清空,审计价值有限;要想可靠记录命令执行,必须依赖auditd捕获execve系统调用,真实记录每一次bash、ls、curl等命令操作; - 敏感文件访问:例如
/etc/passwd、/etc/shadow、/root/.ssh/等关键路径,可通过auditd -w规则监控其读、写、执行等访问行为; - 网络服务访问:Web 服务通常查看
/var/log/apache2/access.log或/var/log/nginx/access.log;数据库服务可检查/var/log/mysql/error.log,或按需启用通用查询日志; - 内核级事件:如 SELinux 拒绝、内核模块加载、权限变更等,通常统一记录在
/var/log/audit/audit.log中,这是 Linux 审计日志里最权威、最关键的来源。
用 auditd 做可靠的行为捕获
仅依赖应用层日志(如 auth.log)并不足够——这类日志可能被拥有 root 权限的用户删除或修改;而 auditd 直接挂钩内核,具备更强的防篡改能力,是 Linux 服务器访问审计的核心基础:
- 确保服务已启动并设置开机自启:
systemctl enable --now auditd; - 添加永久规则(写入
/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; - 加载规则:
augenrules --load(不要使用auditctl -a临时添加,否则系统重启后会失效); - 验证规则是否生效:
ausearch -k cmd_exec -ts recent | head -5,执行几个测试命令后,正常情况下应能查询到相关记录。
日常查看与快速排查方法
日常审计和故障排查时,不建议直接翻看原始日志文件,使用专用工具提取信息会更高效:
- 查看某个用户最近执行过的全部命令:
ausearch -ui 1001 -m execve | aureport -f -i(其中 1001 为 UID); - 查看是谁修改过 /etc/passwd:
ausearch -k passwd_mod | aureport -f -i; - 排查指定时间段内的失败登录:
ausearch -m a vc -ts 2026-07-29 00:00:00 -te 2026-07-29 23:59:59 | grep denied; - 生成每日审计摘要报告:
aureport -ts yesterday -te today --summary,可以快速看出登录次数、命令执行量以及文件访问异常情况。
保障日志可用性与合规底线
审计日志本身也必须被严格保护,否则日志审计就失去了意义:
- 限制访问权限:
chmod 600 /var/log/audit/audit.log*,仅允许 root 读取和写入; - 配置自动轮转:在
/etc/logrotate.d/auditd中设置maxsize 50M、rotate 12,避免日志持续增长导致磁盘被占满; - 异地备份:每天对
/var/log/audit/目录进行压缩归档,并同步到独立的安全存储环境; - 禁用历史命令覆盖:
echo "export HISTCONTROL=ignoredups:ignorespace" >> /etc/profile,再配合 auditd 使用,可形成更完整的双重操作记录。
