在Linux环境中搭建高可用的系统安全审计体系,核心目标是确保审计服务持续运行、审计日志完整不丢失,即使单个节点出现故障也能自动切换,维持审计能力不中断。整体方案通常采用auditd作为审计守护进程,结合Pacemaker和Corosync构建高可用集群,同时配合共享存储或日志同步机制保障审计数据的一致性。

核心组件说明
整个高可用审计方案涉及以下关键组件:
- auditd:Linux系统自带的审计守护进程,负责收集系统调用、文件访问、用户操作等审计事件,写入本地审计日志。
- Pacemaker:集群资源管理器,负责监控审计服务状态,当主节点故障时自动将服务切换到备用节点。
- Corosync:集群通信引擎,负责集群节点之间的心跳检测和状态同步。
- 共享存储/NFS:用于存储审计日志,确保主备节点都能访问到完整的审计数据,避免日志分散在不同节点。
前置环境准备
假设我们有两个节点,主机名分别为node1和node2,系统为CentOS 7及以上版本,需要先完成以下准备工作:
- 两个节点配置静态IP,确保网络互通,配置好hosts解析:
# 两个节点都执行 cat >> /etc/hosts << EOF 192.168.0.10 node1 192.168.0.11 node2 EOF
- 关闭防火墙和SELinux,或者配置对应的放行规则:
# 两个节点都执行 systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
- 配置两个节点之间的SSH免密登录,方便后续操作:
# node1执行 ssh-keygen -t rsa -P "" ssh-copy-id node2 # node2执行 ssh-keygen -t rsa -P "" ssh-copy-id node1
安装依赖组件
在两个节点上分别安装auditd、Pacemaker、Corosync以及相关的管理工具:
# 两个节点都执行 yum install -y audit audispd-plugins pacemaker corosync pcs fence-agents-all
安装完成后启动pcs服务并设置开机自启:
# 两个节点都执行 systemctl start pcsd systemctl enable pcsd
配置高可用集群
设置hacluster用户密码
pcs默认使用hacluster用户管理集群,需要为两个节点的该用户设置相同密码:
# 两个节点都执行 passwd hacluster # 输入自定义密码,比如Abc123456
认证集群节点
在node1上执行节点认证:
pcs cluster auth node1 node2 -u hacluster -p Abc123456 --force
创建集群
在node1上创建名为audit_cluster的集群:
pcs cluster setup --name audit_cluster node1 node2
启动集群
启动集群并设置为开机自启:
pcs cluster start --all pcs cluster enable --all
检查集群状态
执行以下命令查看集群是否正常:
pcs status # 正常输出中应看到两个节点都处于online状态
配置共享存储
为了避免审计日志分散,我们使用NFS作为共享存储,假设有一台NFS服务器192.168.0.100,共享目录为/data/audit_logs:
安装NFS客户端
在两个节点上安装NFS客户端工具:
# 两个节点都执行 yum install -y nfs-utils
创建本地挂载目录
两个节点都创建审计日志挂载目录:
# 两个节点都执行 mkdir -p /var/log/audit_shared
配置挂载资源
在集群中添加NFS挂载资源:
pcs resource create audit_nfs ocf:heartbeat:Filesystem device=192.168.0.100:/data/audit_logs directory=/var/log/audit_shared fstype=nfs op monitor interval=30s op start timeout=60s op stop timeout=60s
配置auditd服务
修改auditd配置
编辑/etc/audit/auditd.conf,修改日志存储路径为共享目录:
# 两个节点都执行 sed -i 's|log_file = /var/log/audit/audit.log|log_file = /var/log/audit_shared/audit.log|g' /etc/audit/auditd.conf # 调整日志滚动策略,避免单个日志文件过大 sed -i 's|max_log_file = 8|max_log_file = 100|g' /etc/audit/auditd.conf sed -i 's|num_logs = 5|num_logs = 10|g' /etc/audit/auditd.conf
配置审计规则
编辑/etc/audit/rules.d/audit.rules,添加需要审计的规则,比如审计用户登录、文件修改、特权命令执行等:
# 两个节点都执行 cat > /etc/audit/rules.d/audit.rules << EOF # 删除原有规则 -D # 缓冲区大小 -b 8192 # 审计用户登录相关事件 -w /var/log/lastlog -p wa -k logins -w /var/run/faillock -p wa -k logins # 审计敏感文件修改 -w /etc/passwd -p wa -k identity -w /etc/group -p wa -k identity -w /etc/shadow -p wa -k identity # 审计特权命令执行 -a always,exit -F arch=b64 -S execve -F euid=0 -k privileged -a always,exit -F arch=b32 -S execve -F euid=0 -k privileged # 设置不可变,避免规则被随意修改 -e 2 EOF
重启auditd服务
重新加载审计规则并重启服务:
# 两个节点都执行 augenrules --load systemctl restart auditd
将auditd加入集群管理
在集群中创建auditd服务资源,并和NFS挂载资源绑定,确保NFS挂载成功后再启动auditd:
# 创建auditd资源 pcs resource create audit_service systemd:auditd op monitor interval=30s # 创建资源组,将NFS和auditd加入同一个组,确保启动顺序和故障切换一致 pcs resource group add audit_group audit_nfs audit_service # 设置资源组优先在node1上启动 pcs constraint location add prefer_node1 audit_group 100 node1
验证高可用效果
检查资源运行状态
执行以下命令查看资源是否正常:
pcs status resources # 应看到audit_group组中的两个资源都在node1上运行
模拟主节点故障
在node1上执行重启或者关闭auditd服务,观察资源是否自动切换到node2:
# 在node1上执行 systemctl stop auditd # 等待30秒后查看集群状态 pcs status # 应看到audit_group组已经切换到node2上运行
检查审计日志
在node2上查看共享目录中的审计日志,确认日志正常写入:
ls -lh /var/log/audit_shared/ # 应看到audit.log文件存在且大小在增长
日常运维注意事项
- 定期检查集群状态,确保两个节点心跳正常,资源运行在预期节点。
- 定期备份共享存储中的审计日志,避免存储满导致审计服务异常。
- 修改审计规则时,需要同时在两个节点修改,并且重新加载规则,确保主备节点规则一致。
- 如果NFS服务器故障,需要及时修复,避免审计日志无法写入导致服务异常。
常见问题排查
- 如果资源无法启动,使用
journalctl -u auditd查看auditd服务日志,排查配置错误。 - 如果集群节点离线,检查Corosync服务状态,以及节点之间的网络连通性。
- 如果审计日志没有写入共享目录,检查NFS挂载状态,执行
mount | grep audit_shared确认挂载是否正常。