logrotate 本身不支持加密,需通过轮转→压缩+gpg加密→安全归档三步实现;必须禁用内置 compress,所有操作在 postrotate 中完成并严格校验返回值,gpg 使用免密密钥且环境可靠,加密后日志须异地归档、校验并定期演练解密还原。

Logrotate 本身不支持加密,所谓“自动化加密存储与备份”需分三步实现:轮转 → 压缩+GPG加密 → 安全归档。关键在于把加密逻辑严格放在 postrotate 段,并确保整个链路无交互、可验证、权限可控。
正确配置 logrotate 轮转与禁用默认压缩
必须关闭 logrotate 内置的 compress,否则会和手动加密流程冲突(比如先生成 .log.1.gz,你再对它加密,路径和时序就乱了)。同时启用 nocompress 和 delaycompress 可保留一份未压缩的 .1 文件用于调试,但正式环境建议直接跳过这一步,避免冗余副本。
- 在配置中明确写
nocompress,不依赖全局设置 - 确认 auditd 或其他日志服务没开启自身压缩(如
max_log_file_action = rotate+compress),否则会出现双重处理 - 轮转后的真实目标文件是
/var/log/audit/audit.log.1,不是audit.log—— 后者仍是活跃日志
在 postrotate 中串起压缩、加密与清理
所有操作必须在 postrotate ... endscript 内完成,且使用 set -e 或显式检查命令返回值,任一环节失败就中断,防止日志裸奔。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 先用
gzip -c流式压缩,避免生成中间 .gz 文件 - 管道传给
gpg --batch --yes --encrypt --recipient 'key-id',输出加密后文件(如.log.1.gz.gpg) - 成功后再
rm /var/log/audit/audit.log.1,不留明文残留 - 推荐加
|| exit 1到每条关键命令后,让 logrotate 记录错误并停止后续动作
GPG 环境与密钥必须可靠可用
logrotate 默认以 root 身份运行,但 GPG 若找不到密钥,往往静默失败。不能依赖交互式密码短语,必须使用免密密钥。
- 密钥应导入
/root/.gnupg,并通过gpg --homedir /root/.gnupg --list-keys验证 UID 匹配--recipient - 设置
GPG_TTY=$(tty)防止因终端变量缺失导致加密卡住 - 避免用带密码的私钥;如强需求,需配置
gpg-agent+--pinentry-mode loopback,但运维成本陡增 - 测试时可用
logrotate -f -v /etc/logrotate.d/audit强制执行并观察输出
加密后日志的安全归档与验证
加密只是第一步,真正安全还需异地存储与可用性保障。
- 用
rsync -avz --remove-source-files将*.gpg文件推送到备份服务器,实现增量归档 - 归档前生成校验值:
sha256sum *.gpg > checksums.sha256,连同加密日志一起传输 - 定期执行解密+校验还原演练:
gpg --decrypt file.gpg | sha256sum对比原始 checksum - 备份目录权限设为
700,GPG 文件属主为 root,禁止组和其他用户读取










