文档目录

问题说明

GuestTools 同步主机名时会改写 /etc/hosts。已确认的实现通过创建 /etc/hosts.tmp 再 rename 替换原文件;进程 umask=077 时新文件权限成为 0600,原文件 mode 未被保留。

现象

  • 通过第三方接口从模板创建云主机并同步主机名后,/etc/hosts 从 0644 变为 0600。
  • 页面创建的对照 VM 可能仍为 0644,因为未触发同一 hostname 同步路径。
  • 普通用户或非 root 服务可能无法读取 /etc/hosts。

适用环境

ZSphere 4.10.19、CentOS 7 已验证。其他 Linux/版本只有命中同一调用路径和证据时才能引用。

可能原因

先确认权限变化及发生时间,再核对 hostname 同步/GuestTools 日志。属主、ACL、xattr、SELinux 上下文仅是需要评估的风险,未采集证据时不能说已经变化。

问题定性

  • 类型:产品 Bug。
  • 已知问题:是;客户 TIC-6130 已 Closed/Done,产品 Bug ZSV-12764 截至 2026-08-06 仍 Open/P2。
  • 根因:write_hosts_file() 创建新临时 inode后替换原文件,未保留原 mode;umask 077 使新文件为 0600。
  • 已确认影响:普通用户/非 root 进程读取权限。属主、ACL、xattr、SELinux 变化属于待验证扩大影响。
  • 置信度:高。

排查步骤

检查一:读取当前文件元数据

  • 只读命令:
  stat -c 'mode=%a owner=%U:%G inode=%i mtime=%y file=%n' /etc/hosts
  getfacl -p /etc/hosts 2>/dev/null
  ls -lZ /etc/hosts 2>/dev/null
  • mode=600:确认现象,继续对齐 hostname 同步时间。
  • mode=644/640等客户基线值:当前未复现,需旧日志或审计证据,不能定性。
  • ACL/SELinux异常:记录为独立影响,不能仅由 mode 推断。

检查二:核对触发路径

  • 检查目的:确认权限变化与主机名同步相关,而非安全加固脚本。
  • 只读命令:
  hostnamectl status
  journalctl --since '-2 hours' | grep -Ei 'hostname|guesttools|zs-tools|hosts'
  • /etc/hosts mtime 与主机名同步/创建时间一致:支持命中 ZSV-12764。
  • 同时存在安全加固、配置管理或自定义脚本改写:存在竞争写入,需审计后再定根因。

检查三:确认业务影响

  • 只读命令:
  getent hosts "$(hostname)"
  namei -l /etc/hosts
  • root 正常但普通业务用户解析/读取失败:与 0600 影响一致。
  • 名称解析正常:不代表权限没有问题,仍需按安全基线评估。

处理建议

Note:

本节操作须由具备权限的管理员人工执行。

先用 stat/getfacl/ls -Z 记录原始元数据。客户确认标准为 root:root 0644 后,由管理员执行权限恢复;若属主、ACL或 SELinux 上下文也异常,按客户基线分别恢复。修改后用普通业务账号验证读取和名称解析。回退依据是操作前保存的元数据,禁止不核对基线就统一覆盖。

长期方案

跟踪 ZSV-12764:使用唯一临时文件,写入后保留原 mode、uid/gid、ACL/xattr/SELinux context,原子替换并覆盖 umask、并发、只读/immutable等测试。

补充信息

升级人工条件

  • 文件有自定义属主、ACL、SELinux标签或 immutable 属性。
  • 生产应用已经出现解析/启动异常。
  • 权限恢复后再次被改写。
  • 需要确认修复版本或临时补丁。

需要收集的信息

ZSphere/GuestTools/OS版本、创建方式、hostname同步时间、三组只读输出、GuestTools日志、安全加固/配置管理清单。

相关问题

修改 Linux 云主机主机名后,/etc/hosts 权限变为 0600 | 故障排查 · KB | ZStack 资源中心