Linux服务器安全审计的核心是构建覆盖身份、行为、结果的闭环留痕机制。需启用加固auditd、扩展shell命令日志至syslog、集中外发并保护日志、聚焦高风险信号开展日常审计与响应。

Linux服务器安全审计的核心是让所有关键操作“可追溯、可验证、可回溯”。操作留痕不是简单开启日志,而是构建一套覆盖身份、行为、结果的闭环记录机制——谁在什么时间、以什么身份、执行了什么命令、是否成功、影响了哪些文件或配置。
一、启用并加固基础审计服务(auditd)
auditd 是 Linux 内核级审计框架,比 shell 历史记录更底层、更防篡改。默认可能未启用或配置简陋。
- 安装并启动服务:sudo apt install auditd audispd-plugins(Debian/Ubuntu)或 sudo yum install audit(RHEL/CentOS),然后 sudo systemctl enable --now auditd
- 关键配置在 /etc/audit/rules.d/audit.rules,避免直接改 /etc/audit/audit.rules(重启后可能被覆盖)
- 添加规则示例:监控敏感目录变更:-w /etc/passwd -p wa -k identity;记录所有特权命令执行:-a always,exit -F uid!=1000 -F euid=0 -S execve -k privileged_cmd
- 重载规则:sudo augenrules --load,查看实时日志:sudo ausearch -m EXECVE -i | head -20
二、强制记录用户交互式命令(bash/zsh history + syslog)
shell 历史仅保存在用户家目录,易被删除或绕过。需结合系统日志统一落盘,并扩展记录上下文。
- 在 /etc/bash.bashrc 或全局 profile 中设置:
export HISTTIMEFORMAT="%Y/%m/%d %T "
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.info "$(whoami) [$$] $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//") [$RETRN_VAL]"' - 将日志定向到 rsyslog:在 /etc/rsyslog.d/50-shell-commands.conf 添加:
local6.* /var/log/shell-commands.log
然后 sudo systemctl restart rsyslog - 注意:该方式依赖用户使用 bash/zsh 且未禁用 PROMPT_COMMAND,不能替代 auditd,但对运维排查非常直观
三、集中收集与保护日志(防止本地删改)
本地日志可被提权者清除。必须外发至独立日志服务器,并限制本地写权限。
- 配置 rsyslog 转发(TCP 更可靠):
在 /etc/rsyslog.d/20-remote.conf 加:
*.* @@syslog.example.com:514(@@ 表示 TCP) - 锁定关键日志文件:sudo chattr +a /var/log/audit/audit.log(仅追加)
禁止非 root 清空:sudo chmod 600 /var/log/audit/audit.log - 启用日志轮转并压缩旧日志:/etc/logrotate.d/auditd 应包含 create 600 root root 和 sharedscripts
四、日常审计与快速响应要点
日志堆得多不如查得准。聚焦高风险信号,建立最小可行响应流程。
- 高频检查项:
– 异常 sudo 使用(sudo ausearch -m USER_CMD -i | grep -E "(root|wheel)")
– 非法 SSH 登录尝试(grep "Failed password" /var/log/auth.log | tail -20)
– 关键文件被修改(ausearch -m PATH -f /etc/shadow -i) - 设置每日摘要邮件:用 logwatch 或自定义脚本提取 top 10 异常事件,发送给管理员邮箱
- 发现可疑行为后,立即:
– 检查对应用户的登录会话(who -u、last -n 20)
– 临时禁用账户(sudo usermod -L username)
– 保留内存和磁盘快照(如需取证)
不复杂但容易忽略:审计不是一次配置就完事,要定期验证规则是否生效、日志是否持续写入、归档是否完整。每次权限变更、新服务上线、运维流程调整,都应同步更新审计策略。










