【故障排除】NIS 客户端用户无法登录:ypcat 密码字段显示 !! 的排查与修复
1. 问题背景
在我们的 Linux 集群中使用了 NIS(Network Information Service)来集中管理用户账户。最近在 NIS Server 端新创建了几个用户,但在重置密码并推送到客户端后,发现部分用户在 NIS 客户端无法正常登录。
2. 故障现象
在 NIS 客户端(例如 cn2_25g)尝试切换或登录新用户时失败。为了排查,我们在客户端执行了 ypcat passwd 查看 NIS 同步过来的密码映射表,发现正常用户和异常用户的密码字段存在明显差异:
# 正常可以登录的用户 (felix_li),密码字段是一段正常的加密哈希值
felix_li:$6$9D65zHJUC...:1167:1006::/home/rhome/felix_li:/bin/bash
# 无法登录的用户 (dirk_weng, yang_luo),密码字段显示为 !!
dirk_weng:!!:1111:1001::/home/rhome/dirk_weng:/bin/bash
yang_luo:!!:1116:1001::/home/rhome/yang_luo:/bin/bash
3. 排查过程
3.1 检查服务端的 Shadow 文件
既然客户端显示 !!,我们回到 NIS Server 服务端检查 /etc/shadow 文件,确认用户的实际状态:
[root@azalea ~]# grep -E "dirk_weng|yang_luo" /etc/shadow
dirk_weng:!!:19312:0:99999:7:::
yang_luo:!!:19360:0:99999:7:::
分析: 在 Linux 中,/etc/shadow 第二个字段的 !! 表示该账户处于未设置密码且被锁定的状态。NIS 会忠实地将这个锁定状态同步给所有客户端,导致客户端拒绝这些用户的登录请求。
3.2 尝试解锁账号(踩坑点)
最初的思路是既然账号被锁定了,那就用 passwd -u 命令解锁:
[root@azalea ~]# passwd -u dirk_weng
Unlocking password for user dirk_weng.
passwd: Warning: unlocked password would be empty.
passwd: Unsafe operation (use -f to force)
报错原因: 系统拒绝了解锁操作。因为这两个账户在创建后从未设置过任何密码,如果直接解锁,将导致账户变成“空密码状态”,这在 Linux 安全机制中属于高危操作(Unsafe operation)。
4. 根本原因
在 NIS 环境下,新建用户后如果没有立即设置有效的初始密码,/etc/shadow 中就会以 !! 占位。此时如果直接执行 cd /var/yp && make,NIS 就会把这个“无密码且锁定”的状态打包推送到客户端。客户端读取不到有效的密码哈希(如 $6$...),自然无法完成身份验证。
5. 解决方案
不要尝试强行解锁空密码账号,正确的做法是直接在 NIS Server 上为用户设置新密码,生成哈希值覆盖掉 !!,然后重新同步。
步骤 1:在 NIS Server 上为用户设置有效密码
使用 passwd 命令为异常用户设置密码。设置密码的动作会自动解除 !! 的锁定状态并写入加密哈希。
# 交互式设置密码
[root@azalea ~]# passwd dirk_weng
步骤 2:重新编译并推送 NIS 数据库
密码更新在本地 /etc/shadow 生效后,必须手动触发 NIS 的更新:
[root@azalea ~]# cd /var/yp
[root@azalea yp]# make
步骤 3:在客户端验证同步结果
回到 NIS 客户端,再次查看映射表:
[root@cn2_25g ~]# ypcat passwd | grep dirk_weng
dirk_weng:$6$xxxxxxxxxxxx...:1111:1001::/home/rhome/dirk_weng:/bin/bash
此时密码字段已经从 !! 变成了正常的哈希字符串 $6$...,用户可以正常登录,故障解除。
6. 经验总结与最佳实践
- 规范新建用户流程: 在 NIS Server 端使用
useradd创建新用户后,务必立即使用passwd命令设置初始密码,然后再执行/var/yp/make进行同步。 - 善用
ypcat排查: 遇到 NIS 客户端认证问题时,ypcat passwd是最直观的排查工具,能瞬间判断是网络同步问题、映射配置问题,还是服务端的密码源文件本身就有异常。
浙公网安备 33010602011771号