关键在于用好create指令,它是控制新日志文件权限、属主和属组的唯一可靠方式;必须显式声明0640 root adm等参数,否则新文件将继承原文件属性,易导致权限不一致或泄露。

关键在于用好 create 指令,它不是可有可无的选项,而是控制新日志文件权限、属主和属组的唯一可靠方式。
create 指令必须显式声明
Logrotate 默认不会自动设置新日志文件的权限。如果不写 create,新文件会继承原文件的属性(比如旧日志是 600,新日志也是 600),但原文件权限可能早已被其他进程或手动操作改过,导致不一致甚至越权。所以不能依赖“默认”。
- 语法格式固定:create
- mode 必须是三位八进制数,如 0640、644、0600,开头的 0 可省略,但建议写全更清晰
- owner 和 group 必须是系统中真实存在的用户和组名,例如 root、www-data、adm、syslog
权限值要按最小权限原则设定
不是所有服务都该用 644。开放读权限给“其他用户”(即 mode 最后一位)容易造成敏感信息泄露,尤其是应用日志里可能含路径、参数、用户行为等。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- Web 服务(如 Nginx)推荐:create 0640 www-data adm —— 允许属主(www-data)读写、属组(adm)只读,其他用户无权限
- 系统级服务(如 rsyslog)常用:create 0640 root syslog 或 create 0640 root adm
- 高敏感服务(如数据库审计日志)建议:create 0600 root root —— 仅属主可读写
注意 create 和 copytruncate 的互斥关系
如果配置了 copytruncate(用于不停服务切日志),那么 create 将被忽略 —— 因为 copytruncate 是先复制再清空原文件,不新建文件。此时新日志仍是原文件本身,权限不会重置。
- 若必须用 copytruncate,应确保原始日志文件权限已正确设置(如启动时由服务自身创建,或通过 systemd tmpfiles.d 预置)
- 更稳妥的做法是改用标准轮转 + postrotate 发送信号重启日志写入(如 kill -USR1 或 -HUP),这样 create 才真正生效
验证和调试不能跳过
配完别急着等 cron 触发,立刻手动测试:
- 运行 logrotate -d /etc/logrotate.d/myapp 查看 debug 输出,确认 create 行是否被识别
- 加 -f -v 强制执行一次:logrotate -f -v /etc/logrotate.d/myapp
- 检查新生成的日志文件:ls -l /var/log/myapp/app.log,确认权限、属主、属组完全匹配 create 设置










