首页 / 帮助文档 / CentOS安全中安装audit监控sshd_config修改

CentOS安全中安装audit监控sshd_config修改

在CentOS服务器运维中,sshd_config文件是SSH服务的核心配置文件,任何未经授权的修改都可能导致严重的安全隐患。直接动手部署audit审计规则,是锁定该文件变更记录最有效的手段。你需要做的不是空谈理论,而是立刻在终端执行命令,让系统内核级的auditd守护进程盯死这个文件。下面我会详细拆解从安装到验证的完整流程,确保你能一次性配置成功。

确认auditd服务状态并完成安装

多数CentOS 7/8/9的最小化安装并未包含auditd,你首先需要检查并安装。执行rpm -q audit可以快速查看包是否存在。如果未安装,直接用yum install audit -y搞定,系统会自动拉取audit和audit-libs两个核心包。安装完成后,务必执行systemctl enable auditd && systemctl start auditd,让服务开机自启并立刻运行。这一步经常被忽略,导致规则在重启后失效,所以一定要确认systemctl status auditd显示为active (running)状态。

理解audit规则的核心逻辑

audit的规则体系基于系统调用拦截,你需要告诉内核“监控哪个文件、监控什么操作、记录哪些信息”。对于sshd_config,我们关注的是写入操作和属性变更,这对应系统调用中的open、write、chmod、chown等。规则中的-w参数表示监控文件,-p参数定义权限掩码,其中w代表写入,a代表属性变更,x代表执行。组合使用-p wa就能覆盖绝大多数修改场景。每条规则还需要一个唯一的key标识,方便后续用ausearch工具快速过滤日志。

编写精准的审计规则

直接上规则,不要犹豫。在/etc/audit/rules.d/目录下创建一个新文件,比如sshd.rules,内容如下:

# 监控sshd_config主配置文件的所有写入和属性修改
-w /etc/ssh/sshd_config -p wa -k sshd_config_change

# 监控sshd_config所在目录的删除和重命名操作,防止文件被整体替换
-w /etc/ssh/ -p wa -k sshd_dir_change

第一条规则锁定文件本身,第二条规则监控整个/etc/ssh/目录,因为攻击者可能通过删除后重建、重命名等方式绕过单文件监控。两条规则配合使用,形成完整防线。保存文件后,执行augenrules --load加载规则,然后运行auditctl -l查看当前生效的规则列表,确认两条规则都已出现。

验证规则是否生效

规则加载后必须进行实际测试,否则你无法确定配置是否真正起作用。用echo "# test" >> /etc/ssh/sshd_config模拟一次追加写入,然后执行ausearch -k sshd_config_change -i查看审计日志。你应该能看到包含进程ID、用户ID、时间戳、执行的命令等详细信息的记录。特别注意uid字段,它能告诉你是谁执行了修改操作。如果日志为空,检查auditd服务状态和规则语法,常见错误包括路径拼写错误、权限掩码遗漏等。

深入解读审计日志字段

一条典型的审计日志包含十几个字段,你需要重点关注几个关键项:type=SYSCALL表示这是一个系统调用事件;arch字段记录CPU架构;syscall标识具体的系统调用号,比如open对应257;success=yes/no表示操作是否成功;auid是审计用户ID,即使通过sudo提权,这个值仍指向原始登录用户;exe是执行修改操作的程序路径,比如/usr/bin/vim或/usr/bin/nano。理解这些字段后,你就能从日志中还原出完整的操作链,快速定位是误操作还是恶意行为。

配置审计日志的轮转与保护

审计日志会快速增长,如果不加控制,可能撑满/var/log/audit/分区导致系统异常。编辑/etc/audit/auditd.conf,设置num_logs=5和max_log_file=50,表示保留5个日志文件,每个最大50MB。同时将max_log_file_action设为ROTATE,确保日志自动轮转。更关键的是,需要防止攻击者在入侵后清除审计日志。用chattr +a /var/log/audit/audit.log给日志文件添加只追加属性,这样即使root用户也无法直接删除或清空日志内容,只能追加写入。

结合rsyslog实现远程日志转发

单机日志的安全性有限,专业的做法是将审计日志实时转发到远程日志服务器。在/etc/rsyslog.conf中添加模块加载配置:

module(load="imfile")
input(type="imfile" File="/var/log/audit/audit.log" Tag="audit_sshd" Severity="info" Facility="local6")
local6.* @@remote-log-server:514

这样配置后,所有匹配sshd_config_change和sshd_dir_change的审计事件都会同步发送到远程服务器。即使本机日志被篡改,远程副本仍然保留完整证据。记得在远程服务器上配置相应的接收规则,并确保网络端口畅通。

设置实时告警联动

被动记录还不够,你需要主动告警。安装audispd-plugins包后,可以在/etc/audisp/plugins.d/目录下配置邮件或脚本告警。创建一个简单的告警脚本/usr/local/bin/audit_alert.sh:

#!/bin/bash
echo "sshd_config modified at $(date) by user $(ausearch -k sshd_config_change --format text | grep uid)" | mail -s "ALERT: sshd_config changed" admin@example.com

然后在/etc/audisp/audispd.conf中配置dispatcher指向该脚本。这样一旦检测到sshd_config变更,管理员邮箱会立即收到告警。对于生产环境,建议对接企业微信、钉钉或Slack的Webhook接口,实现秒级通知。

处理误报与日常维护

正常的运维操作也会触发审计告警,比如通过自动化工具批量更新配置。你需要建立一套白名单机制,在审计规则中使用条件过滤。例如,如果已知Ansible通过特定用户执行,可以在规则中排除该用户:

-a always,exit -F arch=b64 -S open -F path=/etc/ssh/sshd_config -F auid!=ansible -k sshd_config_change

这种精细化的规则编写需要你对系统调用和过滤表达式有深入理解,但能显著降低告警噪音。定期执行aureport --summary查看审计事件统计,分析异常模式,持续优化规则集。

扩展到其他关键配置文件

掌握了sshd_config的监控方法后,你应该立即将同样的策略应用到其他敏感文件:/etc/passwd、/etc/shadow、/etc/sudoers、/etc/crontab等。可以创建一套统一的审计规则集,用不同的key区分不同文件,比如passwd_change、sudoers_change。这样在排查安全事件时,能通过key快速定位到具体被修改的文件类型。建议将所有规则集中放在/etc/audit/rules.d/security.rules文件中,便于版本管理和批量部署。

性能影响与优化建议

审计规则会增加内核开销,但在现代服务器上,针对少量关键文件的监控几乎不会产生可感知的性能影响。如果你需要监控大量文件或目录,建议使用auditctl的-D选项先删除所有规则,再逐条加载,避免规则冲突。同时监控auditd进程的CPU和内存占用,正常情况下应低于1%。如果发现性能异常,检查是否存在规则递归监控或日志写入阻塞等问题,必要时调整auditd的flush参数为INCREMENTAL,降低磁盘同步频率。

合规性要求的满足

如果你所在的组织需要满足等保2.0、ISO 27001或PCI DSS等合规标准,对关键配置文件的审计监控是必选项。审计日志需要至少保留180天,并且具备防篡改和不可否认性。通过上述配置,你不仅能满足合规检查要求,还能在安全事件发生后提供完整的溯源证据链。建议定期导出审计日志并离线归档,使用sha256sum生成校验值,确保日志的完整性和可验证性。