auditd安装与基本配置
auditd是Linux内核审计子系统的用户空间守护进程,提供系统级安全审计能力。服务器安全加固场景中,auditd能够记录文件访问、系统调用、用户权限变更等关键操作,是合规审计和入侵检测的基础组件。
在CentOS/RHEL系统上安装:
# 安装auditd yum install audit -y # 启动并设置开机自启 systemctl start auditd systemctl enable auditd # 验证auditd状态 systemctl status auditd # 查看内核审计模块是否加载 lsmod | grep audit # 输出应包含: # audit 98304 3 # 表示audit子系统已正常工作auditd的主配置文件位于/etc/audit/auditd.conf,关键参数说明:
# /etc/audit/auditd.conf 核心配置 log_file = /var/log/audit/audit.log log_format = RAW log_group = root priority_boost = 4 disk_full_action = SUSPEND disk_error_action = SUSPEND max_log_file = 100 max_log_file_action = ROTATE num_logs = 10 space_left = 75 space_left_action = EMAIL action_mail_acct = rootadmin@example.com审计规则编写与加载方法
审计规则通过auditctl命令添加,或写入/etc/audit/rules.d/audit.rules文件实现持久化。规则文件修改后需要执行augenrules –load重新加载。
监控关键文件变更的规则配置:
# 监控/etc/passwd文件的写入操作 auditctl -w /etc/passwd -p wa -k identity_changes # 监控/etc/shadow文件 auditctl -w /etc/shadow -p wa -k identity_changes # 监控/etc/sudoers文件 auditctl -w /etc/sudoers -p wa -k privilege_escalation # 监控SSH配置文件 auditctl -w /etc/ssh/sshd_config -p wa -k ssh_config_change # 监控crontab文件变更 auditctl -w /etc/crontab -p wa -k cron_change auditctl -w /var/spool/cron/ -p wa -k cron_change # 监控系统二进制文件篡改 auditctl -w /bin/ -p wa -k binary_tamper auditctl -w /sbin/ -p wa -k binary_tamper auditctl -w /usr/bin/ -p wa -k binary_tamper auditctl -w /usr/sbin/ -p wa -k binary_tamper # 监控用户/组变更 auditctl -w /etc/group -p wa -k identity_changes auditctl -w /etc/gshadow -p wa -k identity_changes规则参数说明:-w指定监控路径,-p指定监控权限(r读取/w写入/a属性变更/x执行),-k设置规则键值用于日志检索。同一key可以关联多条规则,方便后续按事件类型查询。
系统调用级别的审计规则:
# 审计所有execve系统调用(命令执行) auditctl -a always,exit -F arch=b64 -S execve -k cmd_execution # 审计unlink系统调用(文件删除) auditctl -a always,exit -F arch=b64 -S unlink -S unlinkat -k file_delete # 审计chmod/chown系统调用(权限变更) auditctl -a always,exit -F arch=b64 -S chmod -S fchmod -S fchmodat -k perm_change auditctl -a always,exit -F arch=b64 -S chown -S fchown -S fchownat -S lchown -k perm_change # 审计特定UID的socket操作 auditctl -a always,exit -F arch=b64 -S socket -S connect -F auid=1000 -k network_access # 按用户ID过滤,监控uid>=1000的普通用户 auditctl -a always,exit -F arch=b64 -S open -F auid>=1000 -F auid!=4294967295 -k user_file_open安全事件追踪与日志分析
audit日志存储在/var/log/audit/audit.log中,格式为键值对。直接阅读原始日志效率低,通常使用ausearch和aureport工具进行检索分析。
# 搜索identity_changes相关的审计事件 ausearch -k identity_changes # 搜索今天的时间范围内的特权提升事件 ausearch -k privilege_escalation -ts today # 搜索特定用户的操作记录 ausearch -ua 1000 -ts today # 搜索命令执行记录 ausearch -k cmd_execution -ts today | head -50 # 生成审计摘要报告 aureport --summary # 生成事件类型报告 aureport -x --summary # 生成用户登录报告 aureport -l # 生成文件访问报告 aureport -f --summary # 查看失败的系统调用 aureport --failed解析单条审计日志的典型输出:
type=SYSCALL msg=audit(1726012345.678:1234): arch=c000003e syscall=2 success=yes exit=3 a0=7ffd12345678 a1=0 a2=1b6 a3=0 items=1 ppid=1234 pid=5678 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=2 comm="cat" exe="/usr/bin/cat" key="user_file_open"关键字段:auid是审计uid(原始登录用户),uid是当前有效用户,exe是执行程序的完整路径,comm是进程名,key是规则标记的键值。通过auid可以追踪即使用户执行了sudo提权后的原始身份。
auditd性能优化策略
auditd在高负载服务器上可能产生大量日志,影响系统性能。以下优化措施可以平衡审计覆盖度与性能开销:
# 限制审计速率,防止日志洪泛 auditctl -r 100 # 每秒最多记录100条审计事件 # 排除高频率但低价值的审计事件 auditctl -a never,exit -F arch=b64 -S clock_gettime -k time_call auditctl -a never,exit -F arch=b64 -S gettimeofday -k time_call auditctl -a never,exit -F arch=b64 -S stat -k stat_call auditctl -a never,exit -F arch=b64 -S lstat -k stat_call auditctl -a never,exit -F arch=b64 -S fstat -k stat_call # 排除特定进程的审计 auditctl -a never,exit -F arch=b64 -S open -F exe=/usr/sbin/sshd -k ssh_internal日志轮转方面,建议设置max_log_file为256MB,num_logs为20,配合logrotate做压缩归档。对于安全要求高的环境,可以将audit日志实时转发到集中式日志服务器(如rsyslog远程转发或Filebeat采集到ELK),防止攻击者通过删除本地日志掩盖痕迹。