NIS服务器用openssl passwd建用户后su登录失败问题咨询
NIS服务器本地su用户失败但客户端登录正常的成因
该问题的核心是NIS服务器本地用户数据读取优先级、密码哈希算法不匹配、密码修改范围不一致三类原因导致,具体拆解如下:
- 名称服务切换配置优先级异常
NIS服务器默认的/etc/nsswitch.conf配置中,passwd、shadow项的读取顺序为files nis,也就是优先读取本地/etc/passwd、/etc/shadow文件,再读取NIS数据库的内容。你创建用户时将加密密码写入了本地shadow文件,后续操作如果没有同步更新本地shadow的密码,就会出现本地和NIS数据库的密码哈希不一致:本地su验证时读取本地旧哈希直接报错,NIS客户端读取NIS数据库的新哈希可正常登录。 - openssl默认加密算法和本地PAM规则不兼容
你执行的openssl passwd '1234'命令默认使用传统的DES加密算法生成哈希,如果你的NIS服务器本地PAM密码校验规则要求使用SHA512、yescrypt等更高安全等级的加密算法,旧的DES哈希会被直接判定为无效格式,触发密码错误提示;而多数NIS客户端为了兼容旧版本服务,默认开放了DES算法的校验支持,因此可以正常验证通过。 - passwd命令默认修改范围未覆盖本地文件
如果你在NIS服务器上配置了passwd命令默认修改NIS数据库的用户密码,执行passwd test1时只会更新NIS映射中的密码哈希,不会同步修改本地/etc/shadow中的对应条目,也会出现本地、NIS端密码不一致的问题。
验证方法
执行以下两条命令对比输出的密码哈希字段,确认是否存在不一致:
grep test1 /etc/shadow ypcat passwd | grep test1
同时查看/etc/nsswitch.conf中passwd配置项的读取顺序,确认是否优先读取本地files。
解决方案
- 若不需要test1用户在NIS服务器本地登录,直接删除
/etc/passwd、/etc/shadow中的test1条目即可,本地su时会自动读取NIS数据库的用户信息完成校验。 - 若需要本地登录,执行
passwd -l test1强制更新本地shadow中的密码哈希,和NIS数据库保持一致即可。
内容的提问来源于stack exchange,提问作者Ian.cheng
相关产品推荐
相关产品推荐

