NIS(network information service)网络信息服务介绍

0    22    1

Tags:

👉 本文共约22493个字,系统预计阅读时间或需85分钟。

nis简介

NIS(network information service)网络信息服务,模式是C/S 模式。NIS是集中控制几个系统管理数据库的网络产品。NIS简化了UNIX和LINUX桌面客户的管理工作,客户端利用它可以使用中心服务器的管理文件。桌面系统的用户无需建立他们自己的/etc/passwd。管理员只需要简单的使用维护NIS服务器的文件即可。

Linux系统中用户按地域分两类: 本地用户, 远程用户(NIS,LDAP,AD)

ypbind是定义NIS服务器的客户端进程。一旦确定了服务器位置,客户机绑定到了服务器上,所有客户端的查询都发往NIS服务器。

ypserv是回答客户端查询的服务器进程。

网络信息系统(Network Information System)NIS提供了通用数据库访问设施,可以实现向你的网络上的所有主机分发信息,比如象passwd和groups文件所包含的信息。这使得网络看起来象一个独立系统,在所有的主机上有着相同的帐号。你可以以同样的方式通过NIS向网络上的所有机器同步/etc/hosts中的主机名信息。

NIS是基于RPC的,是由一个服务器、一个客户端库以及几个管理工具组成。起初,NIS被称作黄页(Yellow Pages),或YP,现在仍然使用这个名称来非正式地指这项服务。另一方面,Yellow Pages是英国电信的商标,英国电信一直要求Sun更换这个名字。随着事态的发展,某些名称已与人们分不开了,所以YP一直以与NIS相关命令的前缀形式继续存在着,比如象ypserv、ypbind等等。

今天,几乎所有的UN*X都包括NIS,而且甚至有它的免费实现版本。一个是来自BSD的Net-2发行版,源自于Sun捐赠的公众域参考实现。该版的客户库代码已经存在于GNU的libc中很长时间了,而管理程序只是在最近才由Swen Thümmler [1] 移植到Linux上。在这个参考实现中漏掉了一个NIS服务器程序。Tobias Reber已经编制出了另外一个NIS软件包,其中包括所有的工具和一个服务器;该软件包称作yps。[2]
目前,一个完全重写的称为NYS的NIS代码已由Peter Eriksson [3]编制出来,它支持普通的NIS和Sun的经过许多修正的NIS+。NYS不仅提供了一个NIS工具集和一个服务器,而且还增加了一个全新的库函数集,这个库函数集可能最终会被加入到标准libc中。这包括替换目前使用host.conf的主机名解析的一个新设置方案。

NIS的优点

1.NIS简化了UNIX和linux客户的管理工作,客户端利用它可以使用中心服务器的管理文件。

2.桌面系统的用户无需建立自己的/etc/passwd,他们只简单地使用维护在NIS服务器上的文件即可。

3.系统中一台NIS服务器为多台NIS客户机提供服务时,用户登录系统中的任何一台NIS客户机都会从NIS服务器进行登录认证,这样实现了用户帐号的集中管理。

4.能够很好的与DNS协同工作

域控制器

提到NIS不得不先说明一下WINDOWS2000域控制器,在局域网内有一台WIN2000域控制器,下面有一些机器加入到这个域中,在下的机器登录时,有一个选项是选择登入到本机还是登入到域内,登入本地的密码由本机控制,但是如果登入域内,密码由域控制器负责管理。

LINUX也是操作系统,跟WIN2000没有本质的区别,所以仔细读上段话,就能理解NIS是原理是什么样了,这时出现了一个重要的文件/etc/nsswitch.conf

运行流程

事实上, NIS [1] 的运作流程一点也不困难。一个不是很庞大的网络中,大约会有一部NIS Server ,并且同时有很多部的 NIS Client 。 NIS Server 与 NIS Client 的架构,整体架构有点像底下的图1示:

图1图1

NIS 提供的 /etc/passwd,/etc/group 以及 /etc/hosts 等 ASCII 格式档案的信息, NIS Server 会将前述几个ASCII 档案内容复制成为 DBM 数据库格式的档案,当用户藉由个人计算机联机到 NISClient主机尝试登入时, NIS Client 将会到 NIS Server 去查寻该用户的账号与密码,以做为用户登入验证的依据。

NIS Server 将自己系统内的 /etc/passwd, /etc/group,/etc/hosts 等制作成为 DBM 的数据库格式档案;

NIS Client 若有用户登入的要求时,会前往 NIS Server搜寻数据库里面数据做为验证用。

每次更动 NIS Server 上面的用户数据时,则 NIS Server需要重新制作 DBM 数据库档案!

需要设定的有:NIS Server 端;

NIS Client 端。

RPC

Sun 公司开发的服务器软件NFS,由RPC (Remote Procedure Call)所统一管理。 NIS 也是使用 RPC 来管理。

架构

NIS Server 在整个网域之中,一般比较小型的网域常见的方法。万一,如果网域里面有几乎100 部以上的主机,这个时候,只有一部NIS Server 可能无法提供快速的数据查寻与响应的状态!这时需要 NIS Sever的 master 与 slave 的架构。

slave藉由将来自 master主机的数据加以更新到自己的数据库当中,并且提供与master 相同的查寻功能!这个 NIS 的 master 与 slave 架构则完全相同。NIS Server 的 master 先将自己的账号、密码相关档案制作成为数据库档案(databasefile);NIS Server 的 master 将自己的数据库档案传送到 slave上面;NIS Server 的 slave 接收来自‘信任的 NIS Server master主机’的数据后,更新自己的数据库,使自己的数据库与 master 主机的数据同步;网域当中的所有 NIS Client 查寻 NIS Server 时,会找寻‘最先回应的那一部NIS 主机的数据库内容’。

所以,我们可以知道的是,NIS 的 master 与 slave 架构主要在分散查寻 NIS时候的主机负荷,因此,除非您的网域真的很大,否则是没有必要架设 NIS Slave与 master 的架构的啦!底下我们没有架设 master 与 slave 。只有一部主要的master 而已。

套件安装

NIS是一个客户机/服务器系统,ypbind是定义NIS服务器的客户端进程。一旦确定了服务器位置,客户机绑定到了服务器上,所以客户端的住处查询都发往服务器。ypserv是回答客户端查询的服务器进程。

基本上, NIS 建议直接使用原版光盘上面给我们的 RPM 来安装即可。

yp-tools :提供 NIS 相关的查寻指令功能

ypbind :提供 NISClient 端的设定套件

ypserv :提供 NISServer 端的设定套件

portmap :就是 RPM 一定需要的数据啊!

结构

NIS Server 主要以 ypserv 这个套件提供的数据来进行设定,主要内容有:

/etc/ypserv.conf :就是主要的设定档了

/usr/sbin/ypserv :主要的服务(daemon)执行档

/usr/sbin/rpc.yppasswdd:RPC的服务啰!

/usr/sbin/rpc.ypxfrd :同样的, RPC 的服务啰!

/usr/lib/yp/ypinit :建立 NIS 数据库的执行程序

所以,事实上我们最重要的就是设定 ypserv.conf 这个档案而已啦!至于 RPC的设定,就直接启动他即可!另外,还有 yp-tools 会提供的相关数据喔:

/usr/bin/yppasswd :更改你在NIS database (NIS Server 所制作的数据库) 的密码

/usr/bin/ypchsh :同上,但是是更改shell

/usr/bin/ypchfn :同上,但是是更改一些使用者的讯息!

配置客户端

进程ypbind这客户机的NIS域定位服务器,NIS域包括所有NIS服务器和客户机。它与DNS不同,尽管有些管理员将NIS域名等同于DNS的域名。NIS域名只对那NIS服务器和客户机起作用。

有两种方式配置NIS域名:

nisdomainname 定义显示NIS域名

yp.conf文件配置NIS域名。

#nisdomainname gogo

#nisdomainname

gogo

默认地,ypbind使用nisdomainname命令返回NIS域名,向NIS服务器发出请求时在网络内广播该地址。

本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

yp.conf文件

/etc/yp.conf定义了yp.conf配置。如果找不到yp.conf文件,ypconf进程使用nisdomainname 命令返回的NIS域名,广播定位NIS服务器。ypbind将绑定到第一个相应请求的服务器上。

ypserver hostname

domain nisdomain broadcast | server hostname

========

hostname,nisdomain字符为变量。

使用ypserver配置选项为客户机指定服务器。yp.conf文件包括ypserver选项时,客户机使用命令nisdomainname返回的NIS域名,向ypserver命令的hostname字段指定的服务器发出请求。/etc/hosts文件中必须包含该主机IP地址,还记得我说过什么了吗,DNS是取代的HOSTS的,在DNS中设定也是可以的。ypserver选项强制客户机连接到特定的服务器上。

在yp.conf文件中使用domain选项定义了NIS域名,指出客户机是广播定位还是直接向服务器发送请求。

example:

#/etc/yp.conf

#

domain first server jh

=========

first作为域名,jh是这个域的服务器 jh在hosts中必须有相对应的IP地址

或者jh IN A 192.168.1.1还记得这条指令是干什么的吗?

------------------------

创建NIS服务器

安装ypserv

rpm -ivh ypserv*

-----------

NIS服务器提供的数据库,称为NIS映射表.

创建独立服务器

如果用户只有一个NIS域服务器,建立独立服务器,如果用户NIS域中有多个服务器,就需要选择其中一个作为该域的主服务器。其他作为从服务器。

用户可以使用make命令初始化独立服务器,建立NIS映射表,文件/var/yp/Makefile包含了创建数据库的命令。

example:

#nsidomainname first

#cd /var/yp

#make

gamke[1]:Entering directory '/var/yp/terns'

Updateing passd.byname......

Updateing passwd.byuid......

服务器

使用ypinit命令初始化主服务器,常见NIS映射表。默认地.ypinit同make命令给出的操作一样。要创建相对于从服务器的主服务器,用户需要编辑/var/yp/Makefile文件。在Makefile文件中找到NOPUSH设置为NOPUSH=false.

修改后,运行ypinit -m

exmpale:

#nisdomwiname first

#cd /var/yp

#/usr/lib/yp/ypinit m

...........

next host to add:1111.first .my home.c om

next host to add:2222.first .my home. c om

..............

............

..............

is this correct? [y/n]y

..........

.........

updateing passwd.byname.........

.............

..........

...........

服务器配置比主服务器简单。主服务器保存了所有的映射表。从服务器只需知道哪个是主服务器即可。ypinit -s 配置从服务器。

example:

#/usr/lib/yp/ypinit -s salve

salve的IP地址也必须保存在hosts中。

----------

安全性

用户可以在/var/yp/securenets文件中定义服务器的安全性能。

example:

255.255.255.0 192.168.1.0

授权192.168.1.0子网的用户可以访问服务器。

-----------------

ypserv.conf文件

用户必须使用securenets文件,未必用ypserv.conf定义安全性。

语法如下:

host:map:security:[mangle[]]

字段如下

host 授权或禁止访问的计算机,它由地址/掩码对确定.例如 192.168.1.0/255.255.255.0 . *表示所有主机

map 该字段表示访问的NIS映射表项名称。例如:passwd.byuid。*表示映射表 中所有的字段都可用。

security 授权访问类型

none 允许访问,不加强安全性。

port 允许特权端口访问。只接收源端口小于1024的连接。

deny 禁止访问。

des 访问时需要数字加密标准(DES)认证。

[mangle[]] 指定应该在发出响应之前用“X”覆盖掉的字段(不明白)

example:

# Host : MAP : Security : mangle

192.168.1.0/255.255.255.0 : * :none :no

* :* :deny :no

启动服务器

/etc/init.d/ypserv restart

启动NIS客户端

/etc/init.d/ypbind restart

测试NIS

NIS客户端应该绑定到服务器。ypwhich命令可以检测客户端是否正确的连接到服务器。

如果客户机正确的绑定到服务器,用ypcat检测服务器提供的信息。

NIS与DNS是两会事,大家一定要搞清楚。虽然都有可能涉及到域名。但确实是两会事,他们之间会有一些连系。但绝不可以混在一起。切记,切记。

====================================

nsswitch.conf文件

nsswitch.conf文件不仅能处理主机表和DNS之间的优先次序,还能处理其它的问题。它为几个不同的系统管理数据库定义来源(多看几篇这句话,“几个不同的系统管理数据库”,可以是DNS,NIS,大家想一想)

由nsswitch.conf控制的数据库

alias EMAIL别名

ehters 用于RARP的以太网地址。

hosts 主机名和IP地址

password 用户帐号信息。

还有许多,没有列出来。

使用不带NIS的nsswitch.conf example:

password: files

shadow: files

...........

hosts: dns files

#这句很重要,dns在先,files在后,这里的files指的是/etc/hosts文件,如果有客户端查询的时候,先找dns,再找files。顺序很重要。

aliases: files

.........

.........

.........

使用带NIS的nsswitch.conf example:

hosts: files nis dns

protocols: nis files

.........

........

........

控制选择过程

nsswitch.conf文件提供了几个可用于查询测试的状态关键字:

success(成功) 查询返回所期望的结果。该状态的缺省的动作是返回结果给提交查询的应用程序(想一下,在我的DNS第二讲,说到解析器,就可以是提交查询的应用程序,不过他是DNS查询是了),然后退出查询过程。

nofound(没有找到) 虽然查询工作正常,但所期望值没有找到。缺省的动作是查询下一行的源。

unavail(不可用) 提交查询的源不可用。例,名称服务器没有运行。

tryagain(重度) 源暂时不可用。缺省的动作是继续向下一个源提交查询。

有两个关键字可以识别缺省的动作:return和continue。return告诉解析器返回值给应用程序并结束查询。continue告诉解析器继续向下一个源提交查询。

状态和动作关键字可以结合起来,加到nsswitch.conf文件的源单中,以控制查询过程何时移到下一个源。

状态检查的语法是:

[ ( ! ? status=action ) + ]

问号(?)代表任何状态值;叹号(!)对状态值取反。!SUCCESS是不成功的意思。方括号"[]"用于包括整个条件语句。圆括号"()"是可选的,只用来包含每个测试条件,可以有多个条件,每个条件用圆括号包含,之间用加号连接。

例如:

[ ( NOFOUND=RETURN ) + ( TRYAGAIN+TRETURN) ]

其实就是C语言中的“与”“或”“非”的关系。

下面是nsswitch.conf中的主机一行:

hosts: dns [ !UNAVAIL=return ] files

说明了UNAVAIL之外的所有状态,解析器应该将返回值给应用程序,然后退出。

只有当DNS名称服务器没有运行的时候,解析器才能向主机表查询。如果有条件语句改变,缺省的动作卞会起作用,UNAVAI的缺省动作是continue。

nsswich.conf文件已经取代了hosts.conf,因为它可以提供更多的资源控制方式。LINUX系统中通常这两个文件都有,但实际上起作用的是nsswitch.conf文件。

理解NIS

NIS在所谓的包含键-值对的maps中保存数据库信息。Maps被存储于运行NIS服务器的中央主机中,从该主机中,客户可以通过各种RPC调用检索信息。最频繁地,maps是存于DBM文件中的。[4]

Maps本身是从主要文本文件(比如/etc/hosts或/etc/passwd)中生成的。对于某些文件,会生成几个maps,每个搜寻键类型对应一个。例如,你可以为主机名和IP地址搜查hosts文件。相应地,从中会生成两个NIS maps,分别称为hosts.byname和hosts.byaddr。表10.1列出了通用maps和它们生成的文件。

Master File Map(s)
/etc/hosts
/etc/networks
/etc/passwd
/etc/group
/etc/services
/etc/rpc
/etc/protocols
/usr/lib/aliases Hosts.byname hosts.byaddr
Networks.byname networks.byaddr
Passwd.byname passwd.byuid
Group.byname group.bygid
Services.byname services.bynumber
Rpc.byname rpc.bynumber
Protocols.byname protocols.bynumber
Mail.aliases

表10.1 一些标准的NIS maps以及相应的文件。

在某些NIS软件包或其它软件中,还有一些你可能会觉得有用的别的文件和maps。这些文件和maps可能含有没在这本书中讨论过的应用程序的信息,比如可能用于某些BOOTP服务器中的bootparams maps,或者在Linux中目前不含有任何函数的文件(就象ethers.byname和ethers.byaddr maps)。
对于某些maps,人们通常使用绰号(nicknames),它们很短因而易于键入。要想获得一个你的NIS工具能够理解的绰号的完整列表,运行下面的命令:

NIS服务器传统地称为ypserv。对于一个中等大小的网络来说,单个服务器通常就足够了;大型的网络可能需要在不同的网段以及不同的机器上运行几个服务器,以减轻服务器机器和路由器的负荷。通过将这些服务器之一作为主服务器(master server),其它的服务器作为次服务器(slave servers),使得这些服务器同步。Maps将只在主服务器上建立。从主服务器上将它们分发到所有次服务器上。
你可能已经注意到,我们一直很含糊地论及“网络”;当然引用这样一个网络的NIS存在着与众不同的概念,也即通过NIS共享它们部分系统配置数据的所有主机的一个集合:NIS域。不幸的是,NIS域与我们在DNS中遇到的域绝对没有一点共同之处。为了在本章中避免含糊不清的情况,我将总是指出我说的哪一类型的域。
NIS域只具有纯粹的管理功能。对于用户来说它们主要是不可见的,除了在域中所有机器之间口令的共享。因此,给NIS域取的名字仅与管理员有关。通常,可以使用任何名字,只要该名字与你的本地网络上的其它NIS域名不同就行。例如,虚拟酿酒厂的管理员可以选择建立两个NIS域,一个是给酿酒厂本身用的,另一个是个葡萄酒厂的,她分别将其命名为brewery和winery。另一个很普遍的方案是简单地用DNS域名也作为NIS的域名。为了设置和显示你的主机的NIS域名,你可以使用dommainname命令。当不加任何参数调用时,它打印出当前NIS域名;如要设置这个域名的话,你必须成为超级用户并键入:

# domainname brewery

NIS域决定了一个应用程序将查询哪个NIS服务器。例如,在葡萄酒厂(Winery)的主机上的login程序(当然)将只向葡萄酒厂的NIS服务器(或者是它们其中之一,如果存在多个服务器的话)查询用户的口令信息;而酿酒厂主机上的应用程序将只查询酿酒厂的服务器。
现在还有一个疑点要解决,也即一个客户如何知道要连接到哪一台服务器上去。最简单的途径是有一个配置文件,它给出了要在其上查找服务器的主机名。然而,这个办法非常不灵活,因为它不允许客户依据这些服务器存在与否使用不同的服务器(当然是指从同一个域)。因此,传统的NIS实现依赖于一个称作ypbind的特殊后台程序在它们的NIS域中来侦测一个适当的NIS服务器。在能够执行任何NIS查询之前,任何应用程序首先要从ypbind找出要使用哪个服务器。
ypbind通过向本地IP网络广播来探测服务器;第一个响应的服务器假设基本上是最快的一个并将用于随后的NIS查询。在某个间隔时间过去以后,或者如果服务器不工作了,ypbind将再次探测运行着的服务器。
现在,关于动态绑定的争论点是你很少需要它,并且它会带来安全方面的问题:ypbind盲目地相信任何应答者,而这个应答者可能会是一个谦逊的NIS服务器也可能是一个怀有恶意的入侵者。不用说如果你在NIS上管理你的口令数据库的话,这将变成特别麻烦的事。为了防范这个问题,NYS缺省地不使用ypbind,而是从一个配置文件中取得服务器的主机名。

NIS与NIS+

NIS和NIS+除了在名字上和有共同的目标以外,很少有相同之处。NIS+是用一个完全不同的方法构成的。它使用一个类似于DNS的分级名字空间,而不是一个平面的名字空间和松散脱节的NIS域。它使用一个由行和列组成的所谓的表(tables)而不是maps,在NIS+数据库中表的每一行表示一个对象,而列表示NIS+所知所关心的对象的那些属性。一个给定的NIS+域的每个表由那些它们的父域组成。另外,表中的一个条目可以包含到另一个表的链接。这些特性使得用许多方法构造信息成为可能。
传统的NIS的RPC版本号是2,而NIS+的是版本3。
NIS+至今似乎还没有被广泛地使用,而且我实际上对它也知道不多。(唔,几乎一窍不通)。由于这个原因,这里我们将不涉及它了。如果你对它感兴趣并想多学一点的话,请参阅Sun的NIS+管理手册([NISPlus])。

客户边的NIS

如果你熟悉编制或移植网络应用程序的话,你将会注意到上面所列出的许多NIS maps与C库中的库函数相对应。例如,要获得passwd信息,你通常使用getpwnam(3)和getpwuid(3)函数,它们分别返回与给定的用户名或数值用户id相对应的帐号信息。在通常的环境下,这些函数将在标准文件(比如/etc/passwd)中执行请求的查找。
然而,这些函数的基于NIS(NIS-aware)的实现将更改这种行为,并且会启用一个RPC调用让NIS服务器查询用户名或id。对于应用程序来说这个操作是完全透明的。这个函数可以将NIS map“附加”或“替换”掉原始的文件。当然,这并没有对文件进行实际的修改,它只是让应用程序看上去好象该文件已经被替换或附加上去了。
对于传统的NIS实现来讲,对于那些maps替换掉以及那些被添加到原始信息中,曾有某些惯例。有些maps(比如passwd maps)需要对passwd文件进行杂凑地修改,当做错时,就会打开安全方面的缺口。为了避免这个缺陷,NYS常规的配置方案,该方案确定了一个特定的客户函数集是否使用原始文件、NIS、NIS+,并且以什么次序使用。这将在本章后续小节中加以讨论。

运行一个NIS服务器

在这么多理论方面的喋喋不休之后,现在开始动手做实际的配置工作。在本节中,我们将讨论NIS服务器的配置。如果在你的网络上已经有一个NIS服务器在运行,你就不必设置你自己的服务器了;在这种情况下,你可以安全地跳过本节。
注意,如果你只是准备对服务器做试验,请确信你没有设置一个已经在你网络上使用的NIS域名。因为这会使整个网络服务瘫痪并使得许多人不高兴和恼怒。
对于Linux目前有两个现存的免费NIS服务器,一个包含在Tobias Reber的yps软件包中,另一个在Peter Eriksson的ypserv软件包中。至于你运行哪一个是无关紧要的,也不管你使用NYS还是目前在libc中的标准NIS客户代码。在写作本书时,yps中的NIS次服务器处理的代码似乎更完善一些。所以如果你要涉及到次要服务器的话,yps可能是一个更好的选择。
当在/usr/sbin中安装好服务器程序(ypserv)以后,你应该建立一个目录,用于存放你的服务器分发的map文件。当为brewery域设置好一个NIS域时,maps将存于/var/yp/brewery中。服务器通过检测是否存在一个map目录来确定它是否在为一个特定的NIS域服务。如果你对某些NIS域禁用了服务,请确信同时也删除那个目录。
Maps通常储存于DBM文件中以加速查询。它们是用一个称为makedbm(对于Tobias的服务器)或dbmload(对于Peter的服务器)的程序从主文件中创建的。它们是不可互换的。将主文件转换成dbmload可分析的形式通常需要一些awk或sed技巧,这对于录入有些乏味并且难于记忆。因此,Perter Eriksson的ypserv软件包含有一个Makefile(称为ypMakefile),它将为你做所有这些工作。你应该将它作为Makefile安装在你的map目录中,并且编辑它,以反映你要分发的maps。在文件的头部,你会发现all目标,它列出了ypserv将要提供的服务。缺省地,该行看上去象这样:

all: ethers hosts networks protocols rpc services passwd group netid

例如,如果你不想生成ethers.byname和ethers.byaddr maps,只须简单地从这条规则中去掉ethers先决条件。为了测试你的设置,开始只使用一二个maps,比如services.* maps,就已经足够了。
在map的目录里,在编辑好Makefile以后,键入“make”。这将自动地生成并安装maps。你必须确信每当你改变了主文件之后,一定要更新maps,否则所做的改变对网络仍然是不可见的。
下一节解释如何配置NIS客户代码。如果你的安装设置不工作的话,你应该查出有没有任何请求到达你的服务器。如果你对NYS服务器指定-D命令行标志,它将在控制台上打印出有关所有进入的NIS查询的调试信息,并且返回结果。这些将给你一个提示来确定问题到底出在哪里。Tobias的服务器没有这个选项。

使用NYS设置一个NIS客户

在本章的余下部分,我们将讨论NIS客户的配置。
你的第一步应该是告知NYS对于NIS服务使用哪个服务器,并在/etc/yp.conf配置文件中设置好。对于在葡萄酒厂(Winery)网络上一台主机上的简单样本文件看上去象这样:

# yp.conf – YP configuration for NYS library.
#
domainname winery
server vbardolino

第一条语句告诉所有NIS客户,他们属于winery NIS域。如果你省略这一行,NYS将使用你通过domainname命令指派给你系统的域名。server语句指定所使用的NIS服务器。当然,与vbardolino相应的IP地址必须在hosts文件中设置;另外,你也可以在server语句中使用IP地址本身。
在上面所示的表单中,server命令告诉NYS使用指定的服务器而不管目前的NIS域是什么。然而,如果你频繁地在不同的NIS域中移动你的机器的话,你可能想要在yp.conf文件中保存几个域的信息。你可以通过在server语句中增加NIS域名获得几个NIS域的服务器的信息。例如,你可以为一个便携机改变上面样本文件成这样:

# yp.conf – YP configuration for NYS library
#
server vbardolino winery
server vstout brewery

这允许你在系统引导时通过domainname命令设置期望的NIS域来在两个域的任何一个域中使用便携机。
在创建了这个基本的配置文件并确信它是可读的以后,你应该运行的第一次测试来检查你是否能连接到你的服务器上。确信选择你的服务器分发的任何map,如hosts.byname,并试着使用ypcat工具来检索它。ypcat,就象所有其它的NIS管理工具一样,应该存在于/usr/sbin中。

# ypcat hosts.byname
191.72.2.2 vbeaujolais vbeaujolais.linus.lxnet.org
191.72.2.3 vbardolino vbardolino.linus.lxnet.org
191.72.1.1 vlager vlager.linus.lxnet.org
191.72.2.1 vlager vlager.linus.lxnet.org
191.72.1.2 vstout vstout.linus.lxnet.org
191.72.1.3 vale vale.linus.lxnet.org
191.72.2.4 vchianti vchianti.linus.lxnet.org

你所得到的输出应该与上面显示的相象。如果你得到了一条错误信息指出“Can’t bind to server which serves domain”或者某些类似的信息,那么或者是你设置的NIS域名在yp.conf中没有匹配的服务器,或者是由于某些原因服务器找不到。在后一种情况下,请确信ping到那个主机产生正确的结果,并且它确实正在运行一个NIS服务器。你可以使用rpcinfo来验证后者,它将生成以下输出:

# rpcinfo –u serverhost ypserv
program 100004 version 2 ready and waiting

选择正确的maps

在确信能够与NIS服务器联系之后,你必须决定要用NIS maps替换或添加哪个配置文件。一般地,你将会对主机和口令查找函数使用NIS maps。前者对于没有使用BIND时特别有用。后者允许所有用户在NIS域的任何系统上登录进他们的帐号;这通常要求通过NFS在所有的主机之间共享一个中央/home目录。这将在10.7节中详细讨论。其它的maps,如同services.byname,并没有如此有戏剧性的效能,但能为你省去某些编辑工作如果你安装了任何网络应用程序而该应用程序使用了一个不在标准services文件中的服务名。
通常,对于一个查找函数何时使用本地文件、何时询问NIS服务器,你会想有某些自由的选择。NYS允许你配置函数访问这些服务的顺序。这是通过/etc/nsswitch.conf文件来控制的,该文件名是指名称服务交换(Name Service Switch),当然其并不限制于名称服务。对于NYS支持的任何数据查找函数,它都包含指定所用服务的一行。
服务的正确顺序是与数据的类型有关的。并无必要让services.byname的map一定要含有与本地services文件中不同的条目;它可以包含更多的条目。所以,一个好的选择可以是首先查询本地文件,并且只有当服务名称没有找到时才查找NIS。另一方面,主机名信息可能会非常频繁地改变,所以DNS或NIS服务器应该总是有非常正确的信息,而本地的hosts文件只作为在DNS和NIS不可用时的一个备份而已。在这种情况下,你可能想最后查询本地文件。
下面的例子显示出了如何以上面描述的方式配置gethostbyname(2)、gethostbyaddr(2)和getservbyname(2)函数。它们将依次试用列出的服务;如果一个查找成功,结果就返回,否则试用下一个服务。

# small sample /etc/nsswitch.conf
#
hosts: nis dns files
services: files nis

可以在nsswitch.conf文件中有一个条目的完整服务的列表如下面所示。实际被查询的maps、文件、服务器和对象依赖于条目名。

nisplus或nis+
对这个域使用NIS+服务器。服务器的位置从/etc/nis.conf文件中获得。

nis 使用这个域的当前NIS服务器。被查询的服务器的位置在yp.conf文件中设置,见前节所示。对于hosts条目,要查询hosts.byname和hosts.byaddr maps。

dns 使用DNS名字服务器。这个服务类型只对hosts条目有用。要被检索的名字服务器仍然由标准resolv.conf文件确定。

files 使用本地文件,比如对于hosts条目使用/etc/hosts文件。

dbm 从位于/var/dbm内的DBM文件中查找信息。文件所使用的名字与NIS map相对应。

目前,NYS支持下面这些nsswitch.conf条目:hosts、networks、passwd、group、shadow、gshadow、services、protocols、rpc和ethers。以后还会增加更多的条目。
图10.1显示了一个更完整的例子,它引入了nsswitch.conf的另一个特性:hosts条目中的[NOTFOUND=return]关键字通知NYS,如果在NIS或DNS数据库中没有找到所要的项就返回。也即,只有在向NIS和DNS服务器的呼叫由于某些其它原因失败时,NYS才将继续搜寻本地文件。因此,本地文件只在启动引导期间使用并且当NIS服务器关闭时起一个备份的作用。

# /etc/nsswitch.conf
#
hosts: nis dns [NOTFOUND=return] files
networks: nis [NOTFOUND=return] files

services: files nis
protocols: files nis
rpc: files nis

图10.1 nsswitch.conf样本文件。

使用passwd和group Maps

NIS的一个主要应用是在一个NIS域中的所有主机上同步用户以及帐目信息。关于这方面,你通常只保存了一个小的本地/etc/passwd文件,对于这个文件,从NIS maps获得的站点范围的信息被添加了进去。然而,只是简单地在nsswitch.conf中为这个服务启用NIS查找还不很够。
当引用NIS描述的口令信息时,你必须首先确信在你本地passwd文件中任何用户的数值用户id与NIS服务器的用户id匹配。同样对于其它目的你也会需要这样的,比如从你的网络中其它主机上加载NFS卷时。
如果/etc/passwd或/etc/group中的任何数值id与maps中的相偏离,你必须为属于那个用户的所有文件调整文件的所有权。首先你必须将passwd和group中的uid和gid改成一个新值;然后找出属于刚改变的用户的所有文件,最后改变这些文件的所有权。假设news曾有一个id为9,而okir有一个id为103,它们将被改成其它值;那么你可以发出以下的命令:

# find / -uid 9 –print >/tmp/uid.9
# find / -uid 103 –print >/tmp/uid.103
# cat /tmp/uid.9 | xargs chown news
# cat /tmp/uid.103 | xargs chown okir

必须针对新安装的passwd文件执行这些命令,并且在改变任何文件的所有权之前收集所有文件的名字,这点很重要。为了更新文件的组所有权,你将使用一个类似的命令。
在做完这些工作之后,你系统上的数值uid和gid将与你的NIS域中所有其它主机上的相匹配。下一步将是在nsswitch.conf中增加配置行,它为用户和组信息启用NIS查找:

# /etc/nsswitch.conf – passwd and group treatment
passwd: nis files
group: nis files

这使得在一个用户试图登录时,login命令和所有其它类似命令首先查询NIS maps,如果这个查找失败时,再返回使用本地文件。一般来讲,你将从你的本地文件中删除所有的用户,而只留下root和象mail一样的通用帐目。这是因为某些至关重要的系统任务可能需要将uid映射到用户名上或者反之。例如,管理用的cron作业可能会执行su命令来临时变成news,或者UUCP子系统可能要邮寄一个状态报告。如果news和uucp在本地passwd文件中没有条目了,那么在NIS不能使用期间这些作业将糟糕地失败。
这里有两个大告戒:一方面,上面所描述的设置在这里只适应于没有使用影子(shadow)口令的登录状况,象那些包括在util-linux软件包中的。与NIS一起使用影子口令的复杂问题将在下面论及。另一方面,登录命令并不是仅有的访问passwd文件的命令—请看许多人几乎一直使用的ls命令。每当进行一次长列表时,ls将显示一个文件的用户和组的宿主的符号名;也即,对于它遇到的每个uid和gid,它就要查询NIS服务器一次。如果你的本地网络受到阻塞时将严重地拖延进行的工作,或者更糟糕的是,当NIS服务器不在同一个物理网络上时,数据报还必须通过路由器传输。
事情还没结束。想象以下如果一个用户想要更改她的口令时会发生什么情况。通常,她会执行passwd,它将读入新的口令并更新本地passwd文件。对于NIS来说,这是不可能的,因为这个文件已不再存在于本地了,但是每当用户想要改变他们的口令时就让他们登录进NIS也不是个选择。因此,NIS提供了一个对passwd的混入替换称为yppasswd,它用来在目前的NIS中做类似的工作。为了改变服务器主机上的口令,它通过RPC联系那个主机上的yppasswdd后台程序,并向它提供更新过的口令信息。通常,你通过象这样做在常规程序上安装yppasswd:

# cd /bin
# mv passwd passwd.old
# ln yppasswd passwd

与此同时你必须在服务器上安装rpc.yppasswdd并从rc.inet2中启动它。这将对你的用户有效地隐藏NIS所带来的任何扭曲。

使用支持影子(shadow)的NIS

至今还没有对使用影子登录程序组的站点的NIS支持。John F. Haugh,影子程序组的作者,最近往comp.sources.misc发布了一个受GNU库的GPL保护的影子库函数的一个版本。它对NIS已经有了一些支持,但还不完整,并且这些函数还没有加入到标准C库中。另一方面来讲,通过NIS之类公布来自于/etc/shadow中的信息是与shadow组件的目的相违背的。
尽管NYS口令查找函数不使用shadow.byname map或任何这类map,NYS还是支持透明地使用一个本地/etc/shadow文件的。当getpwnam的NYS实现被调用来查找与给定的登录名相关的信息时,nsswitch.conf中的passwd条目所指定的设施被检索。nis服务将简单地在NIS服务器的passwd.byname map中查找这个名字。而files服务将检查/etc/shadow是否存在,并且如果存在的话,就试着打开它。如果不存在的话,或者如果用户没有root特权的话,它就返回到只在/etc/passwd中查找用户信息的传统的处理方法中。然而,如果shadow文件存在,并且能被打开的话,NYS将从shadow中抽取用户的口令。getpwuid 函数也是这样实现的。在这种方式下,用NYS编译的执行文件将透明地处理本地影子组件的安装。

10.9 使用传统的NIS代码
如果你使用目前在标准C库中的客户代码的话,那么配置一个NIS客户就稍微有些不同。一方面,它使用一个ypbind后台程序(daemon)来广播查询运行着的服务器而不是从一个配置文件中取得(服务器)信息的。因此,你必须确信在启动期间开始运行ypbind。它必须在NIS域已被设置好并且RPC portmapper已启动后才被调用。此时,上面所示的调用ypcat进行对服务器测试才能工作。
最近,有许多有关NIS出错报告(bug reports),出错信息说“clntudp_create: RPC: portmapper failure – RPC: unable to receive”。这是由于对ypbind与库函数有关绑定信息的通信(沟通)方式的不兼容的改动。取得最新有关NIS工具的最新源程序并重新编译之可以解决这个问题。[5]
同样,传统的NIS确定是否要和如何将NIS信息与本地文件中的信息合并的方法与NYS中所使用的方法是有偏差的。例如,为了使用NIS口令maps,你必须在/etc/passwd map中包含下列行:

+:*:O:O:::

这标记出口令查找函数“插入”NIS maps的地方。往/etc/group中插入类似的一行(去掉最后两个冒号)会对group. maps做出同样的事。为了使用NIS分发的hosts. maps,只要改动host.conf文件中的order一行。例如,如果你要使用NIS、DNS以及/etc/hosts文件(以这个顺序),你必须将这行改成

order yp bind hosts

目前,传统的NIS实现不支持任何其它的maps。

应用场景

在一个大型的网域当中,如果有多部 Linux 主机,万一要每部主机都需要设定相同的账号与密码时,如果能够有一部账号主控服务器来管理网域中所有主机的账号, 当其他的主机有用户登入的需求时,才到这部主控服务器上面要求相关的账号、密码等用户信息, 如此一来,如果想要增加、修改、删除用户数据,只要到这部主控服务器上面处理即可, 这样就能够降低重复设定使用者账号的步骤了。

一般一个稍微大点儿的环境中,我们 NIS 的组成有:一台 NIS Master Server、一台或者多台 NIS Slave Server、多台 NIS Client。这样组成了一个稍微“冗余”的结构,可以避免核心的 NIS Master 故障后,整个网络无法进行登录。

NIS的基本目标

1.NIS的基本目标是实现各种用户、主机、网络、服务、和协议的管理。NIS并没有取代DNS的功能,他的主机寻址和识别仍需要通过DNS来实现。

2.NIS提供的网络功能要比DNS多-----NIS的命名空间可以实现共享网络信息的集中存储,从而实现对大型网络实行更有效的管。NIS的实现主要围绕者映射的思想-----映射通常是一个由两列数据组成的数据库,其中一列是主键,可以用他来提取相关数据。这种关联的特点使得对组、邮件、口令。以及以太网信息的存储和提取,在一些小型网络环境可以变化的很快;但是对一些大型网络来讲,这些信息的管理将变得非常困难。相比之下,NIS的信息存储采用一种标的形式,这些表是由系统定义的,他们存储着诸如服务器地址、时区和网络信息服务等信息。NIS服务器提供的信息不仅仅限于用户账号信息,数据库中还包括以下几类信息

1.用户账号信息,用于取代linux中的passwd文件和shadow文件的作用

2.组账号信息,包括组账号等,用于取代linux主机中group文件的作用

3.IP地址与主机名称对应记录信息,用于取代linux主机中的hosts文件的作用。

NIS工作流程

img

NIS服务的应用结构分为NIS服务端NIS客户端两种角色,NIS服务端集中维护用户的帐号信息(数据库)供NIS客户机进行查询,用户登录任何一台NIS客户端设备都会从NIS服务端进行登录认证,可实现用户帐号的集中管理。

  1. Nis Master先将帐号密码相关文件制作成数据库文件
  2. 若有帐号密码变动时,需要重新制作数据库文件并重新同步Master/Slave
  3. NIS client 若有登入需求时,会先查询其本机的 /etc/passwd, /etc/shadow 等档案
  4. 若在 NIS Client 本机找不到相关的账号数据,才开始向整个 NIS 网域的主机广播查询
  5. 每部 NIS server (不论 master/slave) 都可以响应,基本上是『先响应者优先』

NIS的配置

具体步骤

1.配置NIS服务器

yum install ypserver yp-tools ypbind portmap -y

软件包说明

1.ypserver:NIS服务的主程序包

2.yp-tools:提供NIS客户端是指功能的软件包;

3.ypbind:提供NIS客户端查询指令功能的软件包;

4.portmap:提供RPC连接、启动RPC必须的软件包。

2.相关文件说明

/etc/ypserver.conf是NIS的主配置文件

格式如下

Host :domain :map : security

Host:指定客户端;可以指定IP或是一个网段

domain:设置NIS域名。在同一个NIS域中,客户端可以从NIS服务器上查询用户名和密码,从NIS服务器可以与主NIS服务器同步数据库内容

Map:设置可用数据库名称,可以用“*”代替所有数据库。

security:安全性设置,主要有none、port、deny三种参数设置。

none:没有任何安全限制,可以连接NIS服务器;

port:只允许小于1024以下的端口连接NIS服务器;

deny:拒绝来连接NIS服务器。

现在先配置/etc/ypserv.conf

127.0.0.1/255.0.0.0:::none

192.168.100.0/255.255.255.0:::none

::*:deny

再改vim /etc/hosts文件

如果没有DNS服务器支持的情况下,则NIS服务器的hosts文件需要每一台NIS客户机的主机记录。

/etc/netgroup文件设置信任的主机或网段。

格式如下

host,user,domain

默认此文件不存在,所有的主机、帐号和域名都允许。

/etc/yp/Makefile是与建立数据库有关的配置文件。

3.设置NIS主机名

vim /etc/sysconfig/network

添加一行NIS域名

nisdomainname 域名

chkconfig ypserv on

4.添加监听域

编辑/var/yp/securenets,默认没有该文件需要手工创建。添加一条监听域。

255.255.255.0 192.168.100.0

chkconfig ypserv on

chkconfig yppasswd on(此服务允许NIS用户可以在客户端修改密码)

service ypserv start/restart

/usr/lib64/yp/ypinit -m (在NIS初始化数据库时会uid大于等于500的用户作为NIS用户)

最后重启ypserv和yppasswd

注:每次更改数据内容后,都需要使用/usr/lib/yp/ypinit -m 重新创建数据库并重启ypserv和yppasswd,否则添加新数据库将无法生效。

NIS客户端配置

1.安装软件包

yum install ypbind rpcbind

2.使用图形化工具配置NIS客户端

system-config-authentication

在验证配置窗口中,用户账号数据库选择“NIS”,填入相应的NIS信息,单机“应用”按钮。

查看使用端口

rpcinfo -p

关闭selinux

(一)NIS Master服务端配置

1、安装软件包

2、设置NIS域名

NIS是会通过域名来分辨不同账号的密码数据,因此必须要在服务器与客户端都指定相同的NIS域名

1)永久生效

3、设置域名解析

/etc/hosts文件:记录IP地址主机对应关系,如果没有DNS系统,则NIS服务器的hosts文件需要每一台NIS客户端的主机记录。

img

img

4、设置client访问NIS服务器的权限

  • /etc/ypserv.conf可以配置访问NIS服务器的权限
  • ypserv.conf文件是逐行解释执行,所以要注意设置顺序
参数 格式为:
Host指定客户端,可以指定具体IP地址,也可以挃定一个网段
Domain设置NIS域名,这里的NIS域名和DNS中的域名并没有关系。
Map设置可用数据库名称,可以用“*”代替所有数据库
Security安全性设置。主要有none、port和deny三种参数设置。
none没有任何安全限制,可以连接NIS服务器。
port只允许小于1024以下的端口连接NIS服务器。
deny拒绝连接NIS服务器。

例如:允许所有内网客户端可以连接NIS服务器,除此之外的客户端都拒绝连接。

img

5、修改Makefile

img

  • 如果是一主多从,修改/var/yp/MakefileNOPUSH=false。表示同步到从服务器
  • 如果只有一台服务端服务器,确认/var/yp/MakefileNOPUSH=true,默认NOPUSH=true

6、配置push到从服务器——一主多从模式需配置

/var/yp/ypservers中加入从服务器的hostname

img

7、 启动服务,建立NIS数据库

1)启动服务

  • yppasswdd.service:与 NIS 客户端有关,允许用户可以在客户端修改服务器上的密码

2)创建数据库

img

3)查看数据库

img

4)检查服务

(二)NIS Slave服务端配置

  • 一般只有在大型环境中,才会配置NIS 服务端为一主多从的架构

1、安装软件包——同master

2、设置NIS域名——同master

NIS是会通过域名来分辨不同账号的密码数据,因此必须要在服务器与客户端都指定相同的NIS域名

3、设置域名解析——同master

/etc/hosts文件:记录IP地址主机对应关系,如果没有DNS系统,则NIS服务器的hosts文件需要每一台NIS客户端的主机记录。

img

4、设置client访问NIS服务器的权限——同master

  • /etc/ypserv.conf可以配置访问NIS服务器的权限
  • ypserv.conf文件是逐行解释执行,所以要注意设置顺序
参数 格式为:
Host指定客户端,可以指定具体IP地址,也可以挃定一个网段
Domain设置NIS域名,这里的NIS域名和DNS中的域名并没有关系。
Map设置可用数据库名称,可以用“*”代替所有数据库
Security安全性设置。主要有none、port和deny三种参数设置。
none没有任何安全限制,可以连接NIS服务器。
port只允许小于1024以下的端口连接NIS服务器。
deny拒绝连接NIS服务器。

例如:允许所有内网客户端可以连接NIS服务器,除此之外的客户端都拒绝连接。

img

5、确认Makefile

确认/var/yp/MakefileNOPUSH=true,默认为 true。表示不同步到从服务器,在从服务器中应当设置为true

6、 启动服务,建立NIS数据库

1)启动服务

  • yppasswdd.service:与 NIS 客户端有关,允许用户可以在客户端修改服务器上的密码

2)创建数据库

3)查看数据库

4)检查服务

(三)NIS客户端配置

方式一:手动修改

1、安装软件包

2、设置域名解析

/etc/hosts文件:记录IP地址主机对应关系,如果没有DNS系统,则NIS服务器的hosts文件需要每一台NIS客户端的主机记录。

img

3、设置NIS域名

NIS是会通过域名来分辨不同账号的密码数据,因此必须要在服务器与客户端都指定相同的NIS域名

4、加入建立好的NIS域

修改/etc/yp.conf,加入NIS域

  • 如果没有配置过域名解析,可以用IP代替HOSTNAME

img

5、配置nsswitch.conf

img

6、启动服务

方式二:工具修改(推荐)

  • 安装软件包

使用系统提供的工具setup来设定,工具修改的内容就是方式一中对应的内容

根据图所示,选择Authentication configuration --> User NIS --> 输入NIS域名和Server的IP,完成以后如果立马跳回到Choose a Tool说明设置成功

  • 如果/etc/hosts中配置了域名,在 输入NIS域名和Server的IP可以用域名代替IP

img

img

img

img

测试

1、客户端指向NIS Maser服务端

  • 在Master服务端修改用户和密码信息
  • 手动更新数据库:cd /var/yp && make

2、客户端指向NIS Slave服务器——一主多从模式

  • 在Master服务端修改用户和密码信息
  • 手动更新Master服务端数据库:cd /var/yp && make
  • 在Slave服务端要先同步Master:/usr/lib/yp/ypinit -s <master_hostname>
  • 在Slave服务端更新数据库:cd /var/yp && make

删除和创建用户

必须在nis服务端中操作新用户的添加!!!

NIS命令

  • yp-tools软件包中自带一些测试工具

1、yptest

测试数据库内容等所有与NIS相关的信息

  • img

2、ypwhich

ypwhich命令主要测试NIS客户端与服务器之间通信使用的是哪些数据库文件

  • 只使用ypwhich命令只显示NIS主机名
  • ypwhich -x则显示NIS客户端与服务器通信使用了哪些数据库文件

img

3、ypcat

ypcat命令可以查看NIS服务器上使用者帐号及密码信息,也可以查看NIS服务器上的/etc/hosts文件记录哪些主机信息

img

4、yppasswd

客户端可以使用yppasswd命令修改帐号和密码(修改其他用户密码的时候要求输入root密码)

img

修改密码时报错:

(1)yppasswd:yppasswdd not running on NIS master host

在服务器上运行该命令正常。

这是因为客户端不能解析到NIS服务器的IP地址,只要你在客户端的 /etc/hosts文件里面添加IP对应关系即可。

(2)yppasswd:yppasswdd not running on NIS master host ("hostname").

这时候你ping下hostname看解析的为多少,如果为127.0.0.1的话,那就赶紧在/etc/hosts中加入IP hostname,如果解析正常,自然不会报错了。

参考

https://www.cnblogs.com/linagcheng/p/16195927.html

https://docs.oracle.com/cd/E19683-01/817-4843/6mkbebda4/index.html

https://www.jb51.net/article/231830.htm

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

2 × 4 =

 

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部