系统日志文件轮转策略及审计数据防删除加固

陌雪姑娘_2309

陌雪姑娘_2309

2026-03-23

284人浏览

原创

logrotate 中 rotate 与 maxage 是交集关系而非互斥,需同时配置以兼顾数量与时间约束;auditd 轮转后须用 postrotate 发送 sighup 或重载规则,避免日志丢失;归档文件可用 chattr +i 锁定防误删,但不可作用于当前写入文件;需检查 auditd 空间阈值及 selinux 上下文防止静默降级。

系统日志文件轮转策略及审计数据防删除加固

logrotate 配置里 rotate 和 maxage 冲突怎么办

两者都控制日志保留,但逻辑不同:rotate 数日志文件个数,maxage 数文件修改时间。如果设了 rotate 5 但某文件已超 maxage 30 天,logrotate 仍会删它——不是“保留最新 5 个”,而是“保留个数 ≤5 且年龄 ≤30 天”的交集。

常见错误现象:logrotate 突然多删几个文件,或该删的旧文件还在;查 /var/lib/logrotate/status 会发现时间戳和预期不符。

  • 优先用 maxage 控制审计类日志生命周期,比如合规要求“至少保留 90 天”,就设 maxage 90,再配 rotate 100 防磁盘打满
  • 避免只设 rotate 不设 maxage:系统重装、时间回拨、日志写入中断都会让文件年龄失真
  • dateext 必须开,否则 maxage 对不带日期后缀的文件(如 audit.log)无效——它只认 audit.log-20240501 这种格式

auditd 日志被 logrotate 删掉后 auditd 不写新文件

auditd 默认不监听 SIGHUP,轮转后若没显式通知,它继续往已被 rename 的旧文件句柄写,导致新日志丢失、磁盘空间不释放。

使用场景:审计日志必须连续不可断,尤其在等保/等保2.0 要求下,中断即算违规。

  • 在 logrotate 配置块里加 postrotate 段,调用 systemctl kill --signal=SIGHUP auditd 或 augenrules --load(后者更稳妥,会重载规则并刷新日志路径)
  • 别用 killall auditd && systemctl start auditd:重启有窗口期,期间 syscall 事件全丢
  • 验证是否生效:轮转后立刻 ls -l /var/log/audit/ 看新文件创建时间,再 ausearch -m avc -ts recent 确认有新记录

防止运维误删 /var/log/audit/ 下的文件

Linux 文件系统级防护比权限掩码更可靠——chattr +a 只允许追加,+i 完全禁止修改,但 auditd 进程需有 CAP_LINUX_IMMUTABLE 才能绕过 +i,普通用户删不动,root 也得先 chattr -i 才行,留痕清晰。

性能影响几乎为零,但要注意:+i 后连 auditd 自己都不能 truncate 或覆盖写,所以只能对归档完成的旧文件(如 audit.log-20240401)加,不能加在当前正在写的 audit.log 上。

  • 轮转完成后自动加锁:logrotate 的 lastaction 块里加 chattr +i /var/log/audit/audit.log-$(date -d 'yesterday' +\%Y\%m\%d) 2>/dev/null
  • 检查是否生效:lsattr /var/log/audit/,看到 ----i--------- 表示已锁定
  • 别给整个 /var/log/audit/ 目录加 +i:auditd 启动时要创建新文件,会失败

auditd 自身配置遗漏导致日志写入失败却无报错

auditd 默认把日志写到 /var/log/audit/audit.log,但如果磁盘满、目录不存在、SELinux 上下文不对,它可能静默降级到 syslog,而 syslog 默认不存 audit 事件——结果就是“以为在记,其实没记”。

最容易被忽略的是 space_left 和 admin_space_left 参数:它们不触发错误,只发警告,且默认值极低(space_left 75 表示剩余空间 space_left_action 执行才动作。

  • 编辑 /etc/audit/auditd.conf,确认 log_file 路径存在且 auditd 有写权限:ls -ld /var/log/audit/ 应显示 drwxr-x--- root root
  • 设 space_left 200(单位 MB)、admin_space_left 50,space_left_action email 并配好 admin_email,避免磁盘满后 auditd 自动 halt
  • SELinux 下必须确保上下文正确:restorecon -Rv /var/log/audit/,否则 auditd 因 denied 写入失败却不报错

事情说清了就结束。真正难的不是配参数,是让所有环节——auditd、logrotate、文件系统属性、SELinux——彼此不拆台。漏掉任意一环,审计数据就可能在你没察觉时断掉或被删。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Linux 新手先学哪些命令
Linux 新手先学哪些命令

Linux新手命令专题汇集终端基础、文件目录操作、文本查看、软件安装和权限管理等入门文章,帮助按实际任务练习常用命令并建立命令行操作习惯。

2026.10.15

0

20

MySQL 忘记密码怎么办
MySQL 忘记密码怎么办

MySQL忘记密码专题汇集不同版本与系统下的root密码重置方法,覆盖MySQL 5.7、8.0、Mac、Linux及本地集成环境,并提示恢复权限与重新登录的检查步骤。

2026.10.15

0

18

Vue.js 中 ref 和 reactive 的区别
Vue.js 中 ref 和 reactive 的区别

Vue.js中ref和reactive的区别专题汇集两种响应式API的定义、访问方式、对象解构、侦听与性能取舍等文章,帮助结合实际状态类型选择合适写法。

2026.10.15

0

20

VS Code 怎么配置开发环境
VS Code 怎么配置开发环境

VS Code开发环境专题汇集编辑器安装、语言扩展、编译器、解释器、终端和调试配置文章,覆盖Java、Python、C++和PHP等常见语言的入门设置。

2026.10.15

0

18

C++ 开发环境怎么搭建
C++ 开发环境怎么搭建

C++开发环境专题汇集Windows、Linux下的编译器与IDE安装配置教程,涵盖GCC、Clang、Visual Studio、CLion和VS Code,以及编译运行首个程序的步骤。

2026.10.15

0

19

Python 虚拟环境是什么
Python 虚拟环境是什么

Python虚拟环境专题介绍项目依赖隔离的作用,汇集venv与uv创建、激活、退出及解释器切换的相关文章,并覆盖Windows、Linux和VS Code中的常见配置问题。

2026.10.15

0

15

Python 怎么安装并配置环境变量
Python 怎么安装并配置环境变量

Python安装与环境变量配置专题汇集Windows、macOS和Linux的安装步骤、PATH设置、pip配置及常见报错排查文章,帮助完成解释器安装并验证命令行可以正常运行。

2026.10.15

0

15

PHP 连接 MySQL 失败怎么办
PHP 连接 MySQL 失败怎么办

PHP连接MySQL失败专题汇集PDO与MySQLi扩展配置、账号权限、主机端口、套接字和认证方式等排查文章,覆盖连接报错、密码变更与容器环境配置,帮助按错误提示定位原因并修复。

2026.10.15

0

18

PHP 表单提交后如何获取数据
PHP 表单提交后如何获取数据

PHP表单提交后如何获取数据专题汇集HTML表单提交、GET与POST接收、$_POST和$_GET读取、跨文件传值、单选与下拉字段获取,以及空值和接收失败排查等文章,帮助新手完成从提交到处理的完整流程。

2026.10.15

0

20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.7万人学习