NIS 是个历史悠久的玩意,最开始由Sun 开发出, 最早的名字叫做YellowPage(yp)。后由于商标注册的关系改为NIS。

熟悉Windows的朋友们可以把 NIS 理解为AD的雏形,具备用户集中管理,分发映射文件夹等功能。这套管理工具也由最早的Solaris 迁移到了 Redhat/CentOS 等 *nix 平台。

NIS系统依靠map构成其重要功能。 有用户列表的map,有用户组的map, 有服务的map, 也有映射路径的map。 本文对 映射路径的map做下简单分析。

路径映射最主要的文件是 auto.master,文件中包括了各条分支的路径和映射文件。例如,

/- auto_direct
/home auto.home
 

这是两种不同称呼的路径map, /- 为 direct map /home 为 indirect map。 对已经存在的路径,必须使用 direct map。否则生成映射后该路径会被NIS的map 冲掉(有的情况下是不可恢复的)。比如说 你想在/usr 路径下映射一个路径叫 /usr/ssbin,假如使用 indirect map,可能最后你的 /usr 下就什么都没有了。 

在很多情况(当然有例外,在 CentOS下并不是如此)下 auto.master 里的文件 是不区分 “_” 和 “.” 的。 意思是 auto.direct 和 auto_direct 是同一个对象。

再继续往里看。 auto_direct 对应另外一个类似“路径  目标”这样格式的文件, 例如

/usr/ssbin   nfsrv:/export/sbin_plus

auto.home 也有这么个文件, 例如:  (& 指代 usera)

usera   nfsrv:/export/home/&

Map 定义好了, 下一步是 Makefile 的里的更新。截取了整个文件中和我们讨论有关的条目

.............................A....................................

AUTO_DIRECT   = $(YPSRCDIR)/auto.direct
AUTO_HOME   = $(YPSRCDIR)/auto.home
.............................B....................................
all:    passwd group hosts rpc services auto.direct auto.home
.............................C...................................
auto.home: $(AUTO_HOME) $(YPDIR)/Makefile
        @echo "Updating $@..."
        -@sed -e "/^#/d" -e s/#.*$$// $(AUTO_HOME) | $(DBLOAD) -i $(AUTO_HOME) -o $(YPMAPDIR)/$@ - $@
        -@$(NOPUSH) || $(YPPUSH) -d $(DOMAIN) $@

auto.direct: $(AUTO_DIRECT) $(YPDIR)/Makefile
        @echo "Updating $@..."
        -@sed -e "/^#/d" -e s/#.*$$// $(AUTO_DIRECT) | $(DBLOAD) -i $(AUTO_DIRECT) -o $(YPMAPDIR)/$@ - $@
        -@$(NOPUSH) || $(YPPUSH) -d $(DOMAIN) $@
 

A 段是预定义项, 会被C段引用, 而C段生成的Map名将被 B段引用。 例

AUTO_DIRECT(A) --> $(AUTO_DIRECT) (C),  auto.direct (C)--> auto.direct (B)。