logrotate 配置主文件为 /etc/logrotate.conf,通过 include /etc/logrotate.d/ 加载片段;修改后无需重启,用 logrotate -d 或 -f 验证;audit.log 和 auth.log 轮转需配 maxsize、compress、delaycompress 及 postrotate 发 sighup 通知服务,避免丢日志;selinux 上下文错误或权限不足会导致静默失败。

logrotate 配置文件写在哪、怎么加载
logrotate 不是服务,没有 daemon,靠 cron 每天调用一次 /usr/sbin/logrotate 执行。配置主入口通常是 /etc/logrotate.conf,它会通过 include /etc/logrotate.d/ 加载所有放在该目录下的片段文件——安全日志(比如 /var/log/audit/audit.log 或 /var/log/auth.log)的规则就该放在这里,而不是硬塞进主配置。
修改后无需重启任何服务,但要验证语法是否正确:logrotate -d /etc/logrotate.conf(调试模式,不实际轮转,只打印执行逻辑)logrotate -f /etc/logrotate.d/my-secure-logs(强制立即运行某一段配置,适合测试)
audit.log 和 auth.log 的轮转策略差异
两者来源不同:audit.log 来自 Linux auditd 子系统,auth.log 来自 syslog/rsyslog;前者默认不启用 logrotate,后者通常已有预置规则(如 Ubuntu 的 /etc/logrotate.d/rsyslog),但常忽略压缩或保留周期,容易撑爆磁盘。
典型安全日志轮转应关注三点:
• rotate:保留多少份归档(建议 12–24,别设 0)
• maxsize:单文件超多大就触发轮转(比 daily 更可靠,防突发攻击日志暴涨)
• compress + delaycompress:压缩节省空间,但延迟压缩可确保 auditd 还在写旧日志时不被锁住
示例(存为 /etc/logrotate.d/auditd):
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
/var/log/audit/audit.log {
daily
maxsize 50M
rotate 12
compress
delaycompress
missingok
notifempty
create 0600 root root
sharedscripts
postrotate
/bin/systemctl kill --signal=SIGHUP auditd 2>/dev/null || true
endscript
}
为什么轮转后 auditd 还往旧文件写?
auditd 是长期运行进程,不会自动感知文件被 mv 或删。若没在 postrotate 里发信号重载,它会继续往已被重命名的旧路径写(导致新日志丢失、旧归档持续增长)。
必须用 postrotate 通知 auditd:
• 多数发行版用 systemctl kill --signal=SIGHUP auditd
• RHEL/CentOS 7 以前可能需 /sbin/service auditd reload
• 切勿用 restart,会中断审计流,丢失中间事件
同理,rsyslog 用户应发 SIGHUP 给 rsyslogd,而非重启服务。
权限和 SELinux 导致轮转失败的静默表现
常见现象:logrotate 命令执行无报错,但日志没轮转、没压缩、甚至 create 权限没生效。排查重点:
• create 指定的用户/组必须真实存在,且 logrotate 进程有权限创建该路径下的文件(/var/log/audit/ 默认仅 root 可写)
• SELinux 启用时,logrotate 的上下文可能无权操作 audit 日志目录,需确认:ls -Z /var/log/audit/,正常应为 system_u:object_r:auditd_log_t:s0;若不是,用 restorecon -Rv /var/log/audit 修复
• missingok 必须加上,否则 auditd 未启动时 logrotate 报错退出,影响其他日志轮转
最稳妥做法:所有安全日志轮转配置都以 root 身份运行(默认如此),不加 su 指令;若非要用普通用户,得同步配好 sudo 权限和 SELinux 策略,得不偿失。
真正麻烦的不是写错一行配置,而是 auditd 或 rsyslog 在轮转间隙丢日志、或者因 SELinux 上下文错乱导致某次轮转静默失败,等磁盘告警才发觉——这类问题不会报错,只会沉默地填满根分区。










