跳转至

SOP — 清除存储服务端本地镜像账户条目(消除身份源双轨)

  • 主题目录:remove_local_mirror_20261012/
  • 执行日期:2026-10-12
  • 类型:C 类变更(服务端账户条目清理,两台)
  • 关联:ldap_client_20261012/SOP.md(sssd 接入,本次为其收尾);fix-lustre-write-perm/SOP.md(条目来源)

1. 背景

2026-10-06 为解除「普通用户写 Lustre 被拒」,在存储服务端 .21/.22 的 /etc/{passwd,group,shadow,gshadow} 各补了一组本地镜像条目(rain01:2001、design:2000), 绕过 l_getidentity 身份解析失败(详见 fix-lustre-write-perm/SOP.md)。

2026-10-12 两台服务端已接入 sssd(ldap_client_20261012/SOP.md),但为双轨: nsswitch 仍是 files sss,默认 getent 先命中本地镜像条目,本地条目与 LDAP 并存,存在 UID/GID 漂移隐患。 本次清除本地镜像条目,使服务端身份源单一为 LDAP。

2. 目标

项 可验证状态
验收 .21/.22 的本地 rain01/design 条目被删除,getent passwd 2001 返回 LDAP 值(gecos rain01、shell /bin/csh)
回归 客户端 .18 以 rain01 真实写入 /mnt/lustre/scratch/tmp 成功(两次)
旁证 MDS .21 近 10 分钟 l_getidentity 报错为 0
幂等 复跑删除命令零变更

3. 前置条件

条件 检查方法 本次实测
root 免密可达 .21/.22 remote_exec.py --hosts 192.168.31.21,22 ✅
sssd 已接入且能解析 2001/2000 getent -s sss passwd 2001 ✅ 返回 LDAP 值
无在跑作业 squeue -h ✅ count=0
无其它本地用户以 gid 2000 为主组 awk -F: '$4==2000{print $1}' /etc/passwd ✅ 仅 rain01
sudoers 无 design 引用 grep -rn design /etc/sudoers* ✅ 无

4. 影响范围

项 内容
主机 192.168.31.21(MGS/MDS)、192.168.31.22(OSS)
组件 /etc/{passwd,group,shadow,gshadow}
停服 否。不改 Lustre 配置、不重启服务、不重挂载
窗口 无;单次执行 < 5 s
在跑业务 变更前 squeue 为空;服务端不跑作业
风险耦合 删除后服务端非 root 身份唯一取自 sssd,sssd 故障将导致写 Lustre 被拒(见第 8 章)

5. 分步操作

实现体:无(一次性手工变更,两台)。

步骤 1:备份(高危前置)

mkdir -p /var/backups/lustre-ins
for f in passwd group shadow gshadow; do
  cp -a "/etc/$f" "/var/backups/lustre-ins/$f.bak.$(date +%Y%m%d-%H%M%S)"
done

本次备份时间戳:20261012-010046。

步骤 2:删除本地镜像条目(幂等,grep 前置判空)

坑:sed -i 在 GNU sed 下保留原文件权限与属主,SELinux 为 Disabled,不影响 NSS 读取。

# 只在条目存在时删除;重复执行零变更
grep -q '^rain01:' /etc/passwd  && sed -i '/^rain01:/d' /etc/passwd
grep -q '^rain01:' /etc/shadow  && sed -i '/^rain01:/d' /etc/shadow
grep -q '^design:' /etc/group   && sed -i '/^design:/d' /etc/group
grep -q '^design:' /etc/gshadow && sed -i '/^design:/d' /etc/gshadow

预期:执行后 grep -c '^rain01:' /etc/passwd = 0、grep -c '^design:' /etc/group = 0。

步骤 3:验证

见第 6 章。

6. 验证

# ① 服务端解析走 LDAP(两台)
getent passwd 2001     # 期望 rain01:*:2001:2000:rain01:/home/rain01:/bin/csh
getent group  2000     # 期望 design:*:2000:

# ② 客户端真实写入(.18,两次;第二次即回归)
su -s /bin/bash rain01 -c 'touch /mnt/lustre/scratch/tmp/.probe_v && echo OK && rm -f /mnt/lustre/scratch/tmp/.probe_v'

# ③ MDS 旁证
journalctl --since '-10min' | grep -c l_getidentity      # 期望 0
验证项 结果(2026-10-12)
本地条目删除 .21/.22 均 v_local_pw=0、v_local_grp=0
getent passwd 2001 两台返回 LDAP 值(gecos rain01、shell /bin/csh)
客户端 .18 真实写入 OK(文件属主 rain01:design)
MDS l_getidentity 报错 0
幂等复跑 NOCHANGE

7. 回滚

备份位置:192.168.31.21:/var/backups/lustre-ins/、192.168.31.22:/var/backups/lustre-ins/ (文件名 passwd.bak.20261012-010046 等)。台账见本目录 backup/README.md。

# 回滚触发条件(任一即回滚):① 客户端写入验证不通过;② MDS 出现新的身份解析报错;③ 影响在跑作业
TS=20261012-010046
for f in passwd group shadow gshadow; do
  [ -f "/var/backups/lustre-ins/$f.bak.$TS" ] && cp -a "/var/backups/lustre-ins/$f.bak.$TS" "/etc/$f"
done
getent passwd 2001    # 期望恢复为本地镜像条目(gecos 含 "mirror of client LDAP")

回滚后验证:getent passwd 2001 返回本地镜像条目即回滚成功。回滚不需重启 Lustre。

8. 风险说明

风险 等级 缓解
服务端身份源单一为 sssd,sssd 故障则非 root 写 Lustre 被拒 中 已实测 sssd active+enabled;故障时可临时恢复本地条目(第 7 章)或重启 sssd
本地组 design 被删除影响其它引用 低 已核 sudoers 无引用、无其它本地用户以 gid 2000 为主组
与未来 LDAP 用户 uid 冲突 低 条目为删除方向,不新增占用

未做且不应做的动作:未改 sssd 配置、未改 Lustre 配置、未改目录权限、未重挂载。

附录:交付物与证据

  • 本目录:SOP.md、backup/README.md
  • 上游变更:ldap_client_20261012/SOP.md(sssd 接入)、fix-lustre-write-perm/SOP.md(条目来源)

来源:/home/rain/Documents/lustre_ins/remove_local_mirror_20261012/SOP.md | 最后更新:2026-10-12 01:02(由 build/sync.py 同步,请勿在站点侧修改)