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同步,请勿在站点侧修改)