baominmin
(kunlun_Baominmin)
2026 年9 月 17 日 04:06
1
问题现象
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 ...
初步分析
错误来源 :logrotate 安全策略——日志父目录 world-writable 或非 root 组可写时拒绝轮转。
涉事目录 :/dev/shm/log(openUBMC V3 内存日志目录,tmpfs),存放 net_stream.log(event_policy 告警上报失败记录)、hw_stream.log(hwproxy 硬件通信错误流)、mc_stream.log(mc 框架启动流)。
对比佐证 :《journal 日志详解》文档中 /var/log/journalctl.log 的轮转配置(/etc/logrotate.d/frame)已正确包含 su root root ,无此问题。stream 日志的 logrotate 配置疑似遗漏该指令。
根因链 :/dev/shm/log 目录创建时权限宽松 → stream 日志 logrotate 配置缺 su root root → logrotate 检查父目录权限判定 insecure → 拒绝轮转并打印 error 刷屏。
求助点
/dev/shm/log 目录 world-writable 是预期配置还是缺陷?
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 相关的配置片段 ,或直接查看 hwproxy、event_policy 组件的安装脚本中是否包含 /etc/logrotate.d/ 下的配置文件。
五、建议修复方向
补充 su root root 指令 :在 stream 日志(net/hw/mc_stream.log)的 logrotate 配置中增加 su root root,与 frame 配置保持一致性。
收紧目录权限 :将 /dev/shm/log 目录权限从 world-writable 调整为更严格的值(如 750),从源头避免安全隐患。
增加 lastaction 加固 :参考 /var/log/journalctl.log 的处理方式,在轮转后通过 lastaction 执行 chmod 0400 等权限收紧操作,防止新归档日志权限过宽。
代码仓排查 :围绕 event_policy、hwproxy、mc 三个组件及 /etc/logrotate.d/ 目录检索配置归属,确认补充修复的落点。
baominmin
(kunlun_Baominmin)
2026 年9 月 17 日 07:13
3