BMC串口存在周期性 `error: skipping` 日志刷屏

问题现象

Kunpeng950,BMC 630基线版本
串口控制台存在周期性 error: skipping 日志刷屏,必现。日志时间跨度 2026-08-26 17:31 ~ 2026-08-27 04:27,跨多次 BMC 启动均复现。

刷屏日志


error: skipping "/dev/shm/log/net_stream.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation.

error: skipping "/dev/shm/log/hw_stream.log" because parent directory has insecure permissions ...

error: skipping "/dev/shm/log/mc_stream.log" because parent directory has insecure permissions ...

  • 全日志共 600 次(net/hw/mc 各约 200 次)

  • 每次 logrotate 定时触发(约 6 分钟)打印 3 行

  • 约 20 小时内 200 组,与日志时间跨度吻合

初步分析

  1. 错误来源:logrotate 安全策略——日志父目录 world-writable 或非 root 组可写时拒绝轮转。

  2. 涉事目录/dev/shm/log(openUBMC V3 内存日志目录,tmpfs),存放 net_stream.log(event_policy 告警上报失败记录)、hw_stream.log(hwproxy 硬件通信错误流)、mc_stream.log(mc 框架启动流)。

  3. 对比佐证:《journal 日志详解》文档中 /var/log/journalctl.log 的轮转配置(/etc/logrotate.d/frame已正确包含 su root root,无此问题。stream 日志的 logrotate 配置疑似遗漏该指令。

  4. 根因链/dev/shm/log 目录创建时权限宽松 → stream 日志 logrotate 配置缺 su root root → logrotate 检查父目录权限判定 insecure → 拒绝轮转并打印 error 刷屏。

求助点

  1. /dev/shm/log 目录 world-writable 是预期配置还是缺陷?
  2. stream 日志(net/hw/mc_stream.log)的 logrotate 配置文件在哪个组件仓维护?是否有同行遇到相同问题?

答案内容由AI生成,仅供参考:

BMC串口周期性 error: skipping 日志刷屏问题分析

一、问题背景确认

问题描述的日志刷屏现象与logrotate的安全策略直接相关。日志每 6 分钟触发一次(这与知识库中记录的一致,即 logrotate 每 6 分钟检查一次日志轮转),每次打印 3 行 error: skipping,共 200 组(600 行),与日志时间跨度(约 20 小时)吻合,说明该问题必现且持续

二、根因链解读

您整理的根因链是成立的:

/dev/shm/log 目录创建时权限宽松 → stream 日志 logrotate 配置缺 su root root → logrotate 检查父目录权限判定 insecure → 拒绝轮转并打印 error 刷屏。

logrotate 对日志父目录的安全检查逻辑是:若目录 world-writable非 root 组可写,则判定为不安全(insecure),拒绝执行轮转并输出 error: skipping 告警。

三、对比佐证

知识库中恰好记载了正确的配置反例:《journal日志详解》中 /var/log/journalctl.log 的轮转配置(/etc/logrotate.d/frame已正确包含 su root root 指令,因此该日志不会出现此问题。同时,历史归档文件 /var/log/journalctl.log.1 ~ .4 通过 lastaction 中的 chmod 0400 命令被设置为仅所有者可读,权限严格。

这进一步印证:stream 日志的 logrotate 配置确实遗漏了 su 指令,是配置缺陷而非设计预期。

四、针对求助点的分析

求助点 1:/dev/shm/log 目录 world-writable 是预期还是缺陷?

从知识库信息来看,无法认定 world-writable 为预期配置。知识库中仅明确指出 logrotate.status 文件 world-readable 属于安全风险(logrotate.status file is world-readable, posing a security risk),同样涉及权限过宽问题。/dev/shm/log 作为内存日志目录(tmpfs),其权限设置应由创建该目录的组件或脚本决定。若目录权限过宽(world-writable),且轮转配置未通过 su 指令指定属主,则必然触发 logrotate 的安全拒绝机制。建议将目录权限收紧至 750/640 等级(知识库记载 etc/logrotate.d 目录权限为 750、frame 配置文件权限为 640),并配合 su root root 指令。

求助点 2:stream 日志的 logrotate 配置在哪个组件仓维护?

知识库未直接标识 net/hw/mc_stream.log 日志的 logrotate 配置所属组件仓。但可推断:这三类日志分别由 event_policy(net_stream)、hwproxy(hw_stream)、mc 框架(mc_stream)产生,其轮转配置很可能随对应组件或系统级日志轮转配置(/etc/logrotate.d/ 目录)一并维护。知识库确认 etc/logrotate.d 目录是 logrotate 配置文件的存放位置(包含 nginx 和 frame)。建议在 openUBMC 社区代码中搜索 logrotate.d 目录下与 stream 相关的配置片段,或直接查看 hwproxyevent_policy 组件的安装脚本中是否包含 /etc/logrotate.d/ 下的配置文件。

五、建议修复方向

  1. 补充 su root root 指令:在 stream 日志(net/hw/mc_stream.log)的 logrotate 配置中增加 su root root,与 frame 配置保持一致性。
  2. 收紧目录权限:将 /dev/shm/log 目录权限从 world-writable 调整为更严格的值(如 750),从源头避免安全隐患。
  3. 增加 lastaction 加固:参考 /var/log/journalctl.log 的处理方式,在轮转后通过 lastaction 执行 chmod 0400 等权限收紧操作,防止新归档日志权限过宽。
  4. 代码仓排查:围绕 event_policyhwproxymc 三个组件及 /etc/logrotate.d/ 目录检索配置归属,确认补充修复的落点。

KL 2280 V3(2026-8-26 17_31_42).txt (1.6 MB)