本节包含以下信息:
通过使用 ypcat、ypwhich 和 ypmatch 命令,用户随时可以从映射中获取有关映射的信息。在下面的示例中,mapname 同时指映射的正式名称和昵称(如果有)。
要列出映射中的所有值,请键入以下命令。
% ypcat mapname |
要同时列出映射中的关键字和值(如果有),请键入以下命令。
% ypcat -k mapname |
要列出所有映射昵称,请键入以下任何命令。
% ypcat -x % ypmatch -x % ypwhich -x |
要列出所有可用映射及其主服务器,请键入以下命令。
% ypwhich -m |
要列出特定映射的主服务器,请键入以下命令。
% ypwhich -m mapname |
要以映射中的项匹配关键字,请键入以下命令。
% ypmatch key mapname |
如果要查找的项不是映射中的关键字,请键入以下命令。
% ypcat mapname | grep item |
其中,item 是要搜索的信息。要获取有关其他域的信息,请使用这些命令的 -d domainname 选项。
如果请求缺省域之外的域信息的计算机没有到被请求域的绑定,ypbind 将 在 /var/yp/binding/domainname/ypservers 文件中查找该域的服务器列表。如果此文件不存在,该命令将对服务器发出 RPC 广播。在此情况下,被请求域必须具有一台位于请求计算机所在子网的服务器。
要更改所选映射的主服务器,必须先在新 NIS 主服务器上生成该映射。由于旧的主服务器名称以关键字-值对的形式出现在现有映射中(此对由 makedbm 自动插入),因此将该映射复制到新的主服务器或使用 ypxfr 将副本传送到新的主服务器是不够的。必须将该关键字与新主服务器名重新关联。如果映射具有 ASCII 源文件,则应将此文件复制到新的主服务器。
在新的主服务器上,成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见System Administration Guide: Security Services中的“Using Role-Based Access Control (Tasks)”。
更改目录。
newmaster# cd /var/yp |
Makefile 必须具有新映射的项,才能指定要进行的映射。否则,请使用名为 sites.byname 的映射立即编辑 Makefile。
要更新映射或重新进行映射,请键入以下命令。
newmaster# make sites.byname |
如果旧的主服务器仍为 NIS 服务器,请远程登录 (rlogin) 到旧的主服务器并编辑 Makefile。确保注释掉 Makefile 中创建 sites.byname 的部分,使其不再被创建。
如果 sites.byname 只作为 ndbm 文件存在,请在新的主服务器上重新创建它,方法是从任何 NIS 服务器上反汇编副本,然后通过 makedbm 运行反汇编的版本。
newmaster# cd /var/yp newmaster# ypcat sites.byname | makedbm -domain/sites.byname |
在新的主服务器上创建映射后,必须向其他从属服务器发送新映射的副本。不要使用 yppush,因为其他从属服务器将试图从旧的主服务器(而不是新的主服务器)中获取新副本。解决此问题的典型方法是从新的主服务器向旧的主服务器传送映射副本。为此,请在旧的主服务器上成为超级用户或承担等效角色,并键入以下命令。
oldmaster# /usr/lib/netsvc/yp/ypxfr -h newmaster sites.byname |
现在,可以安全运行 yppush。其余所有的从属服务器仍认为旧的主服务器是当前的主服务器,并将尝试从旧的主服务器中获取最新版本的映射。当客户机执行此操作时,它们将获取新映射,该映射会将新的主服务器指定为当前主服务器。
NIS 可以智能解析设置文件。尽管这样可以简化 NIS 管理,但它使 NIS 的行为对设置和配置文件中的更改更敏感。
进行以下任何一项修改时,请使用本节中的过程。
添加或删除 /etc/resolv.conf,以允许或拒绝 DNS 转发
添加或删除 $PWDIR/security/passwd.adjunct,以允许或拒绝 C2 安全($PWDIR
在 /var/yp/Makefile 中定义)
更改 NIS 映射或映射源文件时,无需停止并启动 NIS。
请牢记以下几点。
从 NIS 主服务器中删除映射或源文件不会自动导致从从属服务器中执行对应的删除。必须手动删除从属服务器中的映射和源文件。
新映射不会自动推送到现有的从属服务器。必须从从属服务器中运行 ypxfr。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见System Administration Guide: Security Services中的“Using Role-Based Access Control (Tasks)”。
停止 NIS 服务器。
# svcadm disable network/nis/server |
对文件进行必要的更改。
启动 NIS 服务器。
# svcadm enable network/nis/server |
可以修改 /var/yp 中缺省提供的 Makefile,以满足您的需要。可以添加或删除映射,还可以更改一些目录的名称。
请保留原始的 Makefile 的未修改副本,以供将来参考。
要添加新的 NIS 映射,必须将该映射的 ndbm 文件副本放入域中每台 NIS 服务器上的 /var/yp/domainname 目录中。通常由 Makefile 执行此操作。在决定将哪台 NIS 服务器用作映射的主服务器之后,请修改主服务器上的 Makefile,以便您可以方便地重新生成映射。可将不同服务器用作不同映射的主服务器,但在大多数情况下,这会导致管理上的混乱。请尽量只将一台服务器设置为所有映射的主服务器。
通常,会将人工可读的文本文件通过 awk、sed 或 grep 过滤,以使其适合输入到 makedbm。有关示例,请参阅缺省的 Makefile。有关 make 命令的一般信息,请参见 make(1S)。
在决定如何创建 make 可识别的相关性时,请使用 Makefile 中已经存在的机制。请注意,make 对于相关性规则中的行首是否存在制表符非常敏感。缺少制表符会使本来格式正确的项无效。
向 Makefile 中添加项涉及以下步骤。
向 all 规则中添加数据库名称
编写 time 规则
为该数据库添加规则
例如,为使 Makefile 可以处理自动挂载程序输入文件,必须将 auto_direct.time 和 auto_home.time 映射添加到 NIS 数据库。
要将这些映射添加到 NIS 数据库,需要修改 Makefile。
通过更改等号 (=) 右侧的值可以更改在 Makefile 顶部定义的变量设置。例如,如果不想使用 /etc 中的文件作为映射的输入,而想使用另一个目录(如 /var/etc/domainname)中的文件,则应将 DIR
由 DIR=/etc 更改为 DIR=/var/etc/domainname。还应将 PWDIR 由 PWDIR=/etc 更改为 PWDIR=/var/etc/domainname。
包括以下变量。
DIR= 包含除 passwd 和 shadow 之外的所有 NIS 输入文件的目录。缺省值为 /etc。由于使用主服务器上 /etc 目录中的文件作为 NIS 输入文件并不是一种很好的做法,因此应更改此值。
PWDIR= 包含 passwd 和 shadow NIS 输入文件的目录。由于使用主服务器上 /etc 目录中的文件作为 NIS 输入文件并不是一种很好的做法,因此应更改此值。
DOM= NIS 域名。DOM 的缺省值使用 domainname 命令来设置。但是,大多数 NIS 命令都使用当前计算机的域,该域在计算机的 /etc/defaultdomain 文件中设置。
以下过程介绍如何在 Makefile 中添加和删除数据库。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见System Administration Guide: Security Services中的“Using Role-Based Access Control (Tasks)”。
通过添加要添加的数据库的名称来修改以单词 all 开头的行:
all: passwd group hosts ethers networks rpc services protocols \ netgroup bootparams aliases netid netmasks \ auto_direct auto_home auto_direct.time auto_home.time |
各项的顺序不相关,但连续行开头的空白空间必须为制表符,而不是空格。
在 Makefile 结尾添加以下行:
auto_direct: auto_direct.time auto_home: auto_home.time |
在该文件中间添加 auto_direct.time 项。
auto_direct.time: $(DIR)/auto_direct @(while read L; do echo $$L; done < $(DIR)/auto_direct $(CHKPIPE)) | \ (sed -e "/^#/d" -e "s/#.*$$//" -e "/^ *$$/d" $(CHKPIPE)) | \ $(MAKEDBM) - $(YPDBDIR)/$(DOM)/auto_direct; @touch auto_direct.time; @echo "updated auto_direct"; @if [ ! $(NOPUSH) ]; then $(YPPUSH) auto_direct; fi @if [ ! $(NOPUSH) ]; then echo "pushed auto_direct"; fi |
其中,
CHKPIPE 确保在将结果传输给后面的命令之前管道符号 (|) 左侧的操作已成功完成。如果管道左侧的运算未成功完成,该进程将中止,并显示 NIS make terminated 消息。
NOPUSH 阻止 makefile 调用 yppush,以使其不能向从属服务器传送新映射。如果未设置 NOPUSH,则会自动完成推送。
开头的 while 循环旨在消除输入文件中的所有反斜杠扩展行。sed 脚本可消除注释和空行。
对于其他所有自动挂载程序映射(如 auto_home)或其他任何非缺省映射,应执行相同的过程。
运行 make。
# make mapname |
其中,mapname 是要创建的映射的名称。
如果不希望 Makefile 为特定数据库生成映射,请按如下方式编辑 Makefile。