关于本系列
典型的UNIX®管理员经常使用一系列重要的实用程序,技巧和系统,以协助管理过程。 有一些关键实用程序,命令行链和脚本可用来简化不同的过程。 这些工具中的一部分随操作系统一起提供,但是大多数技巧来自多年的经验以及减轻系统管理员生活的渴望。 本系列的重点是从各种不同UNIX环境中的可用工具中获取最大收益,包括简化异构环境中管理的方法。
了解NIS
网络信息系统(NIS)是一个联网的数据库,可用于存储需要在多台计算机之间共享的系统文件。 您可以在图1中看到NIS系统的基本结构。
图1. NIS系统的基本结构
NIS主文件包含所有信息的主副本。 NIS从属服务器可以下载(或发送)此信息的副本,并且所有NIS服务器(无论是主服务器还是从属服务器)都侦听来自客户端的请求,以在NIS数据库中查找信息。 只有NIS主服务器才能更新数据库;只有NIS主服务器才能更新数据库。 尽管从站共享信息,但它们仅共享从NIS主站发送给他们(或下载)的信息。 当NIS客户端要解析特定信息时,它们会联系NIS从属服务器或NIS主服务器。
对于NIS设置中应具有的服务器数量没有任何规则,但是传统上每个子网至少要有一个NIS服务器(例如254台主机)。 NIS系统不是特别有效,因为不缓存有关客户端的信息。 这意味着通常会从文件中查找数据的所有操作都必须通过NIS请求信息。 这包括明显的情况,例如在登录期间查找密码信息,以及更简单的操作(例如获取涉及列出文件/目录所有权信息的文件列表),这些必须在用户数据库中查找。
数据共享和NIS映射
数据本身存储在一系列NIS映射中,并且这些映射是在NIS主机上基于通常由主机使用的相同文件构建的。 NIS的主要作用是作为信息的数据库共享机制,例如用户/密码数据库(/ etc / passwd和/ etc / shadow)和主机文件(/ etc / hosts),尽管它可以用于共享通常位于/ etc中的以下任何文件之一:
- auto.home或auto_home
- auto.master或auto_master
- 引导参数
- 醚
- 组
- 主机
- ipnodes
- 网络组
- 网络掩码
- 网路
- 密码
- 协议
- rpc
- 服务
- 阴影
例如,如果您使用主机数据库中的主机文件作为地图源来共享主机地图,则可以将NIS客户端配置为使用NIS数据库中的信息来查找主机信息,以代替其自身的本地/ etc。 / hosts文件。
可以使用NIS代替域名系统(DNS)来获取主机信息。 NIS的真正好处是它可以在网络内共享和交换其他信息,尤其是密码和网络文件系统(NFS)自动安装程序信息。
主机仅在一个方向上为这些数据库提供所有信息。 从属服务器无法更新从主控服务器复制的信息,除非登录和密码数据存在特殊情况。 为了使用户能够更改其密码,可以使用特殊的password命令来更新服务器密码信息,然后将其传播到域中的所有从属服务器。
域名是信息共享的关键部分,因为它提供了将NIS映射分组在一起的关键身份信息。 您可以将NIS客户端配置为使用特定的NIS域,并且该域将客户端计算机,主机和数据库标识为共享相同的信息。
设置域名
NIS域名与DNS域名无关,并且与DNS协议无关。 您的NIS和DNS域可以相同或不同,并且不会影响系统的工作方式。 通常,NIS域旨在保存有关给定网络甚至部门唯一的少量机器的信息,而DNS是用于管理和确定分层域结构中主机IP地址的大型分布式系统。跨多个网络。
您可以使用domainname
命令设置域名:
$ domainname mynisdomain
请注意,域应为单个单词; DNS不需要使用分层格式。
您可以通过将域名放入/ etc / defaultdomain文件(Solaris),编辑/etc/rc.nfs文件(AIX®)以及编辑/etc/rc.config中的NIS_DOMAIN值来永久设置域。 .d / namesrvrs文件(HP-UX),或/etc/yp.conf或/etc/conf.d/域名文件(Linux®)。
设置NIS源数据
要在主服务器上设置NIS,有两个阶段:
- 初始化NIS数据库。
- 启动NIS服务。
您创建的数据库将基于您已经在服务器上配置的现有信息。 但是,您不想使用这些文件的原始版本。 这是因为您不想在每次要更新信息时都修改主服务器的数据文件。 您需要改为使用这些文件的副本,并在每次要将信息分发给从站时更新该副本。
最简单的方法是将源文件(从先前给出的列表中)复制到新目录,例如/ etc / nisdata或/ var / nisdata。 您在此目录中复制的文件构成了NIS共享信息的基础。
复制文件后,最好对NIS源文件和它们所基于的原始文件上的信息进行一些更改。 首先,您要避免发生更改时必须更改特定于主机的文件和NIS主文件(毕竟,这是将信息迁移到NIS的原因之一)。 通过确保不重复信息,可以简化数据的长期管理。
理想情况下,NIS源文件应包含要共享的信息,而原始文件应包含主主机唯一的信息,或者在NIS故障时需要的信息。 例如,您可能在/ etc / hosts中包含关键主机记录,并通过NIS共享信息,以便NIS故障不会影响主机名查找。 但是NFS自动安装程序映射(auto.home)可能仅通过NIS可用。
无论您决定如何划分信息,都必须对/ etc / passwd文件的副本进行一次更改; 删除根帐户。 如果将root帐户保留在NIS源文件中,则所有通过NIS共享信息的计算机都使用相同的root passwd和定义。 如果您知道根密码,这将使整个网络面临潜在的安全风险。
在要在许多不同的UNIX / Linux主机之间共享NIS信息的异构环境中,还应该修剪任何系统级用户信息的/ etc / passwd文件。 例如,用户sys,adm,新闻,邮件,uucp; 所有这些在不同系统上可能具有不同的数字用户ID和角色,因此将无法通过NIS共享统一数据。
在某些您还共享/ etc / aliases(或/ etc / mail / aliases)邮件别名数据库以与Sendmail一起使用的系统上,您可能无法将文件复制到另一个位置,因为该位置在Sendmail中是硬连线的工具。 更高版本的Sendmail使您可以设置此文件的位置,并且不会遇到相同的问题。
建立NIS地图
现在您已经有了用于构建信息的源文件,您需要使用数据初始化NIS映射。 为此,您需要在/ var / yp中配置Makefile来构建地图,然后运行make生成地图信息。
用于构建地图的Makefile是标准的Makefile, 清单1中详细介绍了Solaris主机上文件的前几行。
清单1. Makefile
#
# Copyright 1996-2003 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
#pragma ident "@(#)Makefile 1.31 03/04/16 SMI"
#
#----
#
# Set the following variable to "-b" to have NIS servers use the domain name
# resolver for hosts not in the current domain.
#B=-b
B=
DIR =/etc
#
# If the ipnodes (IPv6 hosts file) lives in a directory other than
# /etc/inet, then you'll need to change the following line.
#
INETDIR=/etc/inet
#
# If the audit_user, auth_attr, exec_attr, prof_attr files
# live in a directory other than /etc/security, then you'll
# need to change the following line.
#
RBACDIR=/etc/security
#
# If the passwd, shadow and/or adjunct files used by rpc.yppasswdd
# live in directory other than /etc then you'll need to change the
# following line.
# DO NOT indent the line, however, since /etc/init.d/yp attempts
# to find it with grep "^PWDIR" ...
#
PWDIR =/etc
DOM = `domainname`
NOPUSH = ""
ALIASES = /etc/mail/aliases
YPDIR=/usr/lib/netsvc/yp
SBINDIR=/usr/sbin
YPDBDIR=/var/yp
YPPUSH=$(YPDIR)/yppush
MAKEDBM=$(SBINDIR)/makedbm
MULTI=$(YPDIR)/multi
REVNETGROUP=$(SBINDIR)/revnetgroup
STDETHERS=$(YPDIR)/stdethers
STDHOSTS=$(YPDIR)/stdhosts
MKNETID=$(SBINDIR)/mknetid
MKALIAS=$(YPDIR)/mkalias
CHKPIPE= || ( echo "NIS make terminated:" $@ 1>&2; kill -TERM 0 )
k:
@if [ ! $(NOPUSH) ]; then $(MAKE) $(MFLAGS) -k all; \
else $(MAKE) $(MFLAGS) -k all NOPUSH=$(NOPUSH);fi
all: passwd group hosts ipnodes ethers networks rpc services protocols \
netgroup bootparams aliases publickey netid netmasks c2secure \
timezone auto.master auto.home ageing \
auth.attr exec.attr prof.attr user.attr audit.user
您可能需要编辑Makefile的以下元素:
- NIS映射-要生成的映射列表。 它包含在“ all:”行中-编辑内容以匹配您要创建的地图。
-
DIR
变量-保存主要源数据文件的位置。 -
PWDIR
变量-保存/ etc / passwd文件(或其副本)的位置。 -
DOM
变量-指定域的名称。 如果您已经使用domainname
命令设置了domainname
,则可以保留指定的值,该值将运行domainname
命令来确定您设置的域名。
现在您可以构建NIS映射了。 您可以使用Makefile或ypinit
命令以两种方式执行此ypinit
。
要使用Makefile方法,请在/ var / yp目录中运行make来构建地图:
$ make
对于ypinit
方法,使用-m
命令行选项运行ypinit
; 系统将提示您输入要配置的所有YP服务器(主服务器和从服务器)的名称,然后将构建映射(请参见清单2 )。
清单2. ypinit
方法
$ ypinit -m
In order for NIS to operate successfully, we have to construct a list of
the NIS servers. Please continue to add the names for YP servers in
order of preference, one per line. When you are done with the list,
type a <control D>
or a return on a line by itself.
next host to add: ultra3
next host to add: ^D
The current list of yp servers looks like this:
ultra3
Is this correct? [y/n: y] y
Installing the YP database will require that you answer a few questions.
Questions will all be asked at the beginning of the procedure.
Do you want this procedure to quit on non-fatal errors? [y/n: n]
OK, please remember to go back and redo manually whatever fails. If you
don't, some part of the system (perhaps the yp itself) won't work.
The yp domain directory is /var/yp/mcslp
There will be no further questions. The remainder of the
procedure should take 5 to 10 minutes.
Building /var/yp/mcslp/ypservers...
Running /var/yp /Makefile...
updated hosts
ultra3 has been set up as a yp master server without any errors.
If there are running slave yp servers, run yppush now for any data bases
which have been changed. If there are no running slaves, run ypinit on
those hosts which are to be slave servers.
当数据转换为NIS映射时,根据信息的使用方式,源数据将组织为许多不同的映射。 例如,/ etc / passwd文件生成两个映射:passwd.byname和passwd.byuid,这两个映射可基于用户名查找登录名,而passwd.byuid则使用唯一的用户ID号进行查找。 对于主机,生成的映射是hosts.byname和hosts.byaddr,分别是通过主机名和IP地址进行查找的。
文件已创建。 现在,您只需要启动NIS服务器,即可共享数据库。
启动主服务器
ypserv
命令启动NIS服务器进程,该进程侦听来自NIS客户端的查询。 要启动NIS服务,请运行以下命令:
$ ypserv
客户端现在应该能够查询NIS数据库以获取信息。
您应确保NIS进程自动启动。 在大多数SVR4主机(Solaris,AIX,HP-UX)上,通常存在一个文件,例如/etc/init.d/nis.server或/sbin/init.d/nis.server,您可以将其链接到该文件。启动脚本,以确保服务器已启动。
在NIS主服务器上,您可能还想启动用于运行和支持NIS服务的其他守护程序之一。 ypxfrd守护程序提供了用于在从属服务器和主NIS服务器之间同步NIS映射的传输服务。 不必使用它,但是在地图很大的网络中,它可以显着提高传输和同步过程的性能。
更新的守护程序提供了一种通过网络更新NIS源文件的安全方法。 它不是必需的,但是如果您希望能够远程更新NIS信息,则可能很有用。
yppasswdd守护程序侦听更改用户密码的请求并相应地更新文件。 处理完更新后,会将更改“推送”到NIS从属服务器,以便密码几乎立即对用户有效。 您需要调整此守护程序的配置,以便它正确更新NIS源文件,而不是主服务器的/ etc / passwd文件。 如果您在/ var / yp中配置了Makefile,则通常可以设置正确的信息。 这在不同的UNIX版本上有所不同,但是,对于大多数情况,这只是执行守护程序时更改命令行的一种情况。 例如,您将在AIX上执行的命令更改为:
rpc.yppasswdd -a -f DIR/passwd
DIR是NIS数据文件所在的目录。
在Linux下,使用-D
选项指定目录:
rpc.yppasswdd -DDIR
在HP-UX上,编辑/etc/rc.config.d/namesrvrs文件中的YPPASSWDD_OPTIONS变量,以指向正确的目录和文件。
配置NIS从站
理想情况下,在将其转换为NIS从属服务器之前,应该已经将NIS从属服务器配置为NIS客户端。 这是因为从属服务器必须能够查找并联系主服务器以获取数据库,才能在服务之前创建NIS映射的副本。
要设置NIS从站,请按照下列步骤操作:
- 设置域名:
$ domainname nisdomain
- 运行
ypinit
,指定主服务器的主机名:$ ypinit -s masterserver
启动NIS服务器和NIS客户端(请参见清单3 ):
清单3.启动NIS服务器和NIS客户端
$ /etc/init.d/nis.server start
$ /etc/init.d/nis.client start
NIS从站自动向NIS主站注册,以便更新由主站自动发送到从站。
配置NIS客户端
每台要查询NIS映射的计算机都必须配置为连接到NIS服务器。 您可以使用ypinit
或手动两种方式进行操作。 要使用ypinit
,请运行以下命令:
$ ypinit -c
系统将要求您指定要使用的NIS服务器的名称。
确保启动客户端服务,并在启动时使用/etc/init.d/nis.client或类似脚本配置服务。
要手动执行该过程,您可以对ypbind守护程序使用广播选项,ypbind守护程序为本地请求提供服务,并将其发送到NIS服务器。 要使用此方法,请首先设置域名:
$ domainname nisdomain
然后启动NIS守护程序:
$ ypbind -broadcast
要确认您的机器已正确配置为访问远程地图,请使用yppoll
命令测试地图的可用性。 例如,使用以下命令检查passwd.byname映射是否存在:
$ yppoll passwd.byname
要查看地图数据,请使用ypcat
(请参见清单4 )。
清单4.使用ypcat查看地图数据
$ ypcat passwd.byname
nobody:*:65534:65534:nobody:/:/bin/false
现在您已经有了地图,您应该将系统配置为在查找信息时使用地图。
与其他解决方案集成
/etc/nsswitch.conf文件告诉系统应在哪里查找特定信息,例如主机名和登录信息。 您可以使用此文件来控制检查数据库的顺序(或优先级)以及如何处理故障。
清单5中显示了该文件的示例。
清单5。
passwd: files
shadow: files
group: files
hosts: files dns
networks: files dns
services: db files
protocols: db files
rpc: db files
ethers: db files
netmasks: files
netgroup: files
bootparams: files
automount: files
aliases: files
第一列是数据库;第二列是数据库。 后续条目按顺序列出了应用于查找信息的源。
例如,passwd数据库正在使用“文件”(换句话说,/ etc / passwd)来解析登录名和用户ID信息。 但是,主机数据库先使用本地文件,然后再询问DNS系统。
要配置NIS,请将单词nis添加到搜索的数据库列表中。 该顺序很重要,因此请先检查NIS,然后再使用本地文件。 对于登录/密码查找,应该设置以下内容,如清单6所示。
清单6.设置查找
passwd: nis files
shadow: nis files
group: nis files
您也可以更具体地说明成功或失败时的处理方法。 例如,以上配置告诉系统查找NIS,如果未找到结果,则使用文件。 但是,查找可能已失败,因为NIS系统存在技术故障,而不是信息不在NIS映射中。
您可能希望主机名查找默认情况下使用NIS,而不是自动解析,而仅在NIS故障时使用文件。 可以在每个数据库之后使用[STATUS = ACTION]
格式,其中STATUS是以下之一: success, notfound, unavail, tryagain
,而ACTION是return或success, notfound, unavail, tryagain
之一。
ACTION定义了发生特定状态时应发生的情况。 return选项指示解析过程应返回而不处理任何其他数据库条目。 继续表示应使用下一个数据库。
STATUS值的定义如下:
-
success
-未发生错误,并且找到了所请求的条目。 默认操作是返回。 -
notfound
-没有出现错误,并没有发现所请求的条目。 默认操作是继续。 -
unavail
-数据库永久不可用。 默认操作是继续。 -
tryagain
数据库暂时不可用,您可以重试。 默认操作是继续。
例如,要配置上面概述的系统,其中仅系统故障会导致故障转移到本地文件,您可以使用以下内容,如清单7所示。
清单7.配置系统
hosts: nis [NOTFOUND=return][UNAVAIL=continue] files
但是,在配置登录信息选项时应小心。 如果您不通过NIS共享您的root用户和密码(以及其他系统用户),那么您不应配置找不到匹配“ return”的失败。 像这样设置配置可以防止不在NIS中的用户(包括root用户)登录。
保持数据库最新
为了使NIS正常工作,必须更新数据库。 仅更新文件是不够的,您必须重新创建NIS映射,如果使用从属服务器,则将NIS主映射推入或重新加载到从属。
最简单的方法是在主服务器上使用Makefile(请参见清单8 )。
清单8.在主服务器上使用Makefile
$ cd /var/yp
$ make
这将重新创建映射,并将映射更改推送到从属服务器。
摘要
NIS系统实质上是通过网络接口公开现有的基于文件的数据,从而提供了共享登录名,密码,主机和其他信息的最简单方法之一。
NIS映射以NIS域名为中心,NIS域名是网络组中所有主机的唯一标识符。 使用此域标记信息,然后共享。 设置NIS也很简单,只需几个命令即可设置主服务器,从属服务器或NIS客户端。
翻译自: https://www.ibm.com/developerworks/aix/library/au-satnis/index.html