先用 nisdomainname 确认域名非空且客户端服务器一致;再用 rpcinfo -u localhost ypserv 验证服务注册;最后用 ypwhich -x 检查映射关系,三步定位nis核心依赖状态。

怎么确认 NIS 域名和服务器角色是否设对
NIS 能不能跑起来,第一步不是改配置,而是明确「谁是服务器、谁是客户端、域名叫啥」。很多问题其实卡在 nisdomainname 输出为空,或者客户端和服务端域名不一致。
-
nisdomainname命令必须返回非空值;没输出就说明系统没设域,得用sudo nisdomainname example.org临时设置,并写入/etc/defaultdomain持久化 - 服务器和所有客户端的域名必须完全一致(大小写敏感、无空格),否则
yppasswd、ypwhich全部失效 - 用
domainname(等价于nisdomainname)检查,别只信配置文件里写了就完事——内核态域名才是 runtime 实际生效的
ypserv 启动失败常见原因和对应检查项
ypserv 启动即退出或日志报 can't bind to udp port,基本不是配置语法错,而是权限、端口或依赖没到位。
- 必须以 root 运行;systemd 下检查
sudo systemctl status ypserv,重点看Active:状态和最后一行日志 - 默认监听 UDP/TCP 111(rpcbind)和 1024+ 高端口;如果系统开了 firewalld,要放行
rpc-bind服务,或临时关掉防火墙验证 -
/var/yp/Makefile必须存在且可读,且其中YPSRVD_OPTS不要硬编码错误路径;常见坑是复制了旧版 Makefile 却漏改YPDBDIR - 首次运行前必须执行
sudo /var/yp/Makefile(或sudo make -C /var/yp),否则/var/yp/example.org/下没passwd.byname等 db 文件,ypserv会静默拒绝请求
客户端连不上服务器:ypbind 总是 timeout
ypbind 卡在 trying 192.168.1.100 然后超时,不代表网络不通,更可能是 RPC 注册、域名或协议层没对齐。
- 先确认服务器上
rpcinfo -u localhost ypserv有响应;没输出说明ypserv没成功注册到 rpcbind - 客户端启动
ypbind前,确保rpcbind已运行(sudo systemctl start rpcbind),且没被 systemd socket 激活机制干扰 - 不要依赖广播发现;显式指定服务器用
sudo ypbind -s 192.168.1.100,并检查/var/yp/binding/example.org是否生成了正确的server文件 - IPv6 开启时,
ypbind可能优先走 IPv6 地址却连不上;加-4强制 IPv4:sudo ypbind -4 -s 192.168.1.100
密码同步失败:yppasswd 提示 "Can't change password on server"
这个错误不是权限问题,而是 NIS 密码更新流程本身依赖多个服务协同,任一环断开都会挂在这里。
-
yppasswd修改的是服务器上的/etc/passwd和/etc/shadow,所以必须确保服务器上ypserv+yppasswdd都在运行(后者常被忽略) -
yppasswdd默认监听本地回环;客户端调用时,服务器需能反向解析自己的主机名到 127.0.0.1(检查/etc/hosts中是否有127.0.0.1 servername) - 修改后必须触发 map 重建:服务器上手动跑一次
sudo make -C /var/yp,否则客户端仍查到旧密码 hash - 注意
yppasswd不支持 PAM 或 LDAP 用户,只处理本地账号;若用户来自其他源,它根本不会出现在passwd.byname里
rpcinfo 和 ypwhich -x 这两个诊断命令——它们比看日志更快定位到底卡在哪一层。










