免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1879 | 回复: 0
打印 上一主题 下一主题

Nis on solaris10 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-11-04 16:58 |只看该作者 |倒序浏览
Nis on solaris10

描述NIS基础
配置名称服务交换文件(就是nsswitch.conf了)
描述NIS安全性
配置NIS域
构建定制的NIS映射
NIS排故
********
NIS基础
********
NIS是一个集中存放UNIX系统管理文件的仓库。优点有两条:集中管理文件,当网络增长时有较好的扩展性。
NIS按命名管理域进行组织。一个域中有一个NIS主控,零个或多个从属服务器和一个或多个客户。
NIS存储主机名,IP地址,用户,网络及网络服务的信息。这些被称为NIS的名字空间。
NIS映射可以替代或与UNIX系统上存在的配置文件一道工作。
NIS映射位于/var/yp/domainname目录中,每个映射都有两个文件(.pag and .dir)
映射内容和排序关键字:
每个映射都包括key和value对。key表示在map中查询的内容,value表示返回的结果。映射基于不同的key来进行排序。
例如:/var/yp/d_name/hosts.byaddr.pag和/var/yp/d_name/hosts.byname.pag的内容是一样的,但是前者按IP地址排序,后者按主机名排序。
NIS映射的语法是:
map.key.pag 和 map.key.dir
map是映射的基名字,如hosts,passwd等。
key是排序关键字,如byname,byaddr等。
pag 映射数据。
dir pag文件的索引,pag较大时有用。
读取映射的命令:
ypcat [ -k ] mname
mname是映射的名字或别名。
# ypcat hosts
localhost 127.0.0.1 localhost
sysprint 192.168.30.70 sysprint
sys44 192.168.30.44 sys44 loghost
sys43 192.168.30.43 sys43
sys42 192.168.30.42 sys42
sys41 192.168.30.41 sys41
ypmatch [ -k ] value mname 显示匹配的内容:
# ypmatch sys44 hosts
sys44: 192.168.30.44 sys44 loghost
# ypmatch usera passwd
usera: usera:LojyTdiQev5i2:3001:10::/export/home/usera:/bin/ksh
如果现在试一下:
# ypmatch root /etc/passwd
ypmatch: the domainname hasn’t been set on this machine.
出错了吧,下面我们来看NIS域的内容。
********
NIS域
********
NIS域就是NIS所管理的资源的一个逻辑单位,通过NIS域把网络中的主机,用户等资源分成不同的管理单元。NIS并不使用层次域。
NIS主控服务器
包含用于构建NIS映射的最初的ASCII文件。包含由ASCII文件生成的NIS映射,为整个域提供单点控制。
NIS从属服务器
不包含ASCII文件,包含来自NIS主控服务器的映射拷贝,NIS映射信息的备份数据库,提供冗余,提供负载平衡。
NIS客户
不包含ASCII文件,不包含NIS映射,从主控服务器或从属服务器获得NIS映射信息,当前服务器坏掉时动态绑定到其它服务器,所有适用的系统都支持NIS。
NIS环境中的所有主机都是NIS客户,可以同时做客户和服务器。
********
NIS进程
********
The ypserv daemon
运行在主控和从属服务器上,回应来自客户的ypbind请求,回应客户信息请求。
The ypbind daemon
运行在所有的客户机系统上,产生最初的客户机到服务器的绑定请求,在/var/yp/binding/domainname目录中存储绑定信息,服务器故障时自动重新绑定到其它服务器,在库调用级别请求NIS映射信息。
The rpc.yppasswdd daemon
允许用户改变他们的密码,更新主控上面的passwd和shadow文件,更新NIS密码映射,复制密码映射到从属服务器。
The ypxfrd daemon
只运行在NIS主控上面,响应从属服务器上发出的ypxfr请求,高速传输NIS映射。
The rpc.ypupdated daemon
只运行在NIS主控上面,按照/var/yp/updaters文件中的配置更新NIS映射。
****************
配置名称服务交换
****************
/etc/nsswitch.nis文件可以作为参考
passwd: files nis
group: files nis
# consult /etc "files" only if nis is down.
hosts: nis [NOTFOUND=return] files
ipnodes: files
networks: nis [NOTFOUND=return] files
protocols: nis [NOTFOUND=return] files
rpc: nis [NOTFOUND=return] files
ethers: nis [NOTFOUND=return] files
netmasks: nis [NOTFOUND=return] files
bootparams: nis [NOTFOUND=return] files
publickey: nis [NOTFOUND=return] files
netgroup: nis
automount: files nis
aliases: files nis
………
nsswitch.conf中最常用的三个搜索顺序是:
搜索文件然后NIS;
搜索NIS然后文件;
转发来自NIS的主机查询请求到DNS。
例如:先文件后NIS:
passwd: files nis
group: files nis
automount: files nis
aliases: files nis
services: files nis
auth_attr: files nis
prof_attr: files nis
project: files nis
先NIS后文件:
hosts: nis [NOTFOUND=return] files
networks: nis [NOTFOUND=return] files
protocols: nis [NOTFOUND=return] files
rpc: nis [NOTFOUND=return] files
ethers: nis [NOTFOUND=return] files
netmasks: nis [NOTFOUND=return] files
bootparams: nis [NOTFOUND=return] files
publickey: nis [NOTFOUND=return] files
其中[NOTFOUND=return]表示如果NIS不响应请求或NIS服务失效,则继续查询文件,但是如果NIS回应“no such entry”,则直接返回,不查找文件。
如果主机记录在NIS中找不到则查找DNS:
hosts: nis dns
****************
NIS安全性
****************
NIS在提供便利的同时也许会带来安全漏洞,可以使用securenets文件来限制访问,或者使用passwd.adjunct文件限制对密码信息的访问。
securenets文件:
/var/yp/securenets如果存在,则服务器只响应来自该文件内部的主机的请求,该文件中必须包含服务器自身:
host 127.0.0.1
下面是一个例子:
host 127.0.0.1
255.255.255.0 150.10.1.0
host 13.13.14.1
host 13.13.14.2
修改了/var/yp/securenets文件后,必须重新启动ypserv和ypxfrd守护进程:
# /usr/lib/netsvc/yp/ypstop
# /usr/lib/netsvc/yp/ypstart
passwd.adjunct文件:
该文件防止非授权用户查看加密的密码。加密的密码是放在/etc/shadow文件中的,但是在缺省的NIS配置中,加密的密码是显示在passwd映射中的。
下面的输出显示了这两种情况的不同:
# cat /etc/passwd |grep usera
usera:x:3001:10::/export/home/usera:/bin/ksh
# ypmatch -k usera passwd
usera: usera:LojyTdiQev5i2:3001:10::/export/home/usera:/bin/ksh
配置passwd.adjunct之后,原来的加密的密码被“##用户名”所代替:
# ypmatch -k usera passwd
usera: usera:##usera:3001:10::/export/home/usera:/bin/ksh
启用passwd.adjunct文件的方法:
按照sunsolve.sun.com站点上的步骤配置C2安全性特性。
****************
配置NIS域
****************
为了安全起见,NIS映射的源文件不应该放在/etc目录下,修改/var/yp/Makefile可以实现这一目的:
将DIR=/etc改为DIR=/your-choice
将PWDIR=/etc改为DIR=/your-choice
例如我们可以把hosts,passwd,shadow等文件复制到/etc/yp_dir。
生成NIS映射:
/usr/sbin/ypinit是NIS配置脚本,它读取/var/yp/Makefile文件以获取源文件位置,然后调用make程序将ASCII源文件转换为NIS映射。
/var/yp目录包含以域名为名建立的子目录,在/var/yp/binding/domainname目录包含ypservers,其中存储NIS主控服务器和从属服务器。
在/usr/lib/netsvc/yp目录中包含ypstop和ypstart命令,用来停止和启动NIS服务。
转换ASCII源文件为NIS映射需要使用ypinit命令:
# /usr/sbin/ypinit –m
****************
配置NIS主控服务器
****************
1,决定哪台机器做NIS服务器(主和辅)
2,复制/etc/nsswitch.nis为/etc/nsswitch.conf文件,做必要的修改。
3,选择一个NIS域名,通常在32个字符以内。
4,设置域名,例如:
# domainname classroom.central.sun.com
5,创建/etc/defaultdomain文件。
6,如果以下文件不存在,用touch命令创建空白文件:/etc/ethers,
/etc/bootparams, /etc/locale, /etc/timezone, /etc/netgroup,
and /etc/netmasks,少了文件会报错。
7,如果需要NIS服务器支持JumpStart服务器,需要更新/var/yp/Makefile文件。
8,建立/etc/locale文件,为每个域指定locale,例如:
classroom.central.sun.com en_US
9,使用ypinit命令初始化主控服务器:
# ypinit -m
期间会要求输入从属服务器,输入完成后用Control-D退出,还有一个问题是遇到错误是否退出。
# 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
or a return on a line by itself.
next host to add: server1
next host to add:  
The current list of yp servers looks like this:
server1
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] 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.
… …
成功之后会显示:
hostname has been set up as a yp master server without any errors.
10,启动NIS守护进程:
# /usr/lib/netsvc/yp/ypstart
测试NIS服务:
1,显示NIS映射数据库命令ypcat:
$ ypcat hosts
192.168.30.30 instructor instructor1
127.0.0.1 localhost loghost
192.168.30.45 sys45
192.168.30.44 sys44
192.168.30.43 sys43
192.168.30.42 sys42
192.168.30.41 sys41
...
2,显示NIS映射数据库条目命令ypmatch:
# ypmatch sys41 localhost hosts
192.168.30.41 sys41
127.0.0.1 localhost loghost
# ypmatch user5 passwd
user5:.dJJ.oofIqCLs:4005:10::/export/home/user5:/bin/ksh
3,显示主控服务器命令ypwhich:
$ ypwhich
sys44
ypwhich –m可以显示所有数据库的主控服务器的名字
$ ypwhich -m
...
timezone.byname sys44
netmasks.byaddr sys44
netid.byname sys44
bootparams sys44
netgroup.byhost sys44
netgroup.byuser sys44
netgroup sys44
...
****************
配置NIS客户端
****************
1,复制/etc/nsswitch.nis为/etc/nsswitch.conf,做必要修改。
2,编辑/etc/hosts,确保NIS主控和从属服务器包括在其中。
3,设置域名:
# domainname domainname
4,编辑/etc/defaultdomain文件。
5,将NIS客户端设置为NIS客户端,使用命令:
# ypinit –c
按提示输入NIS主控和从属服务器,Control+D结束。
6,启动NIS:
# /usr/lib/netsvc/yp/ypstart
7,测试:
# ypwhich –m
****************
配置NIS从属服务器
****************
1,复制/etc/nsswitch.nis为/etc/nsswitch.conf,做必要修改。
2,编辑/etc/hosts,确保NIS主控和从属服务器包括在其中。
3,设置域名:
# domainname domainname
4,编辑/etc/defaultdomain文件。
5,将NIS客户端设置为NIS客户端,使用命令:
# ypinit –c
6,在NIS主控上,确保ypserv进程在运行:
# ps -ef | grep ypserv
如果没有运行,用下面的命令启动NIS服务:
# /usr/lib/netsvc/yp/ypstart
7,在NIS从属服务器上启动ypbind进程:
# /usr/lib/netsvc/yp/ypstart
8,将系统初始化为从属服务器:
# ypinit -s master 其中master为主控服务器的名字。
9,再次执行ypstart命令启动ypserv进程:
# /usr/lib/netsvc/yp/ypstart
10,测试NIS的功能:
# ypwhich –m
****************
更新NIS映射
****************
1,更新ASCII源文件。
2,改变到/var/yp目录。
3,执行make工具:
# /usr/ccs/bin/make
更新NIS密码映射:
只需要主控服务器上启动rpc.yppasswdd守护进程就可以了:
# /usr/lib/netsvc/yp/rpc.yppasswdd /$PWDIR/passwd -m passwd
当用户改变他们的NIS密码时,进程自动更新密码文件和密码映射,并复制到从属服务器。
可以在客户机上进行测试:
$ passwd
Changing NIS password for user1 on server1.
Old password:
New password:
Retype new password:
NIS entry changed on server1
最后一行是成功更改密码的提示信息。
更新NIS从属服务器映射:
以timezone映射为例:
1,在NIS主控上编辑源文件:
# vi /etc/timezone
2,重新make并传送NIS映射到从属服务器:
# cd /var/yp; /usr/ccs/bin/make
3,如果失败,可以从NIS从属服务器pull timezone映射:
# /usr/lib/netsvc/yp/ypxfr timezone.byname
4,也可以使用下面的命令一次pull所有的映射:
# ypinit -s nis_master
也可借助于crontab定期执行复制脚本,使从属服务器与主控服务器保持同步,在/usr/lib/netsvc/yp目录中有一些模板脚本。下面看一个复制密码的例子ypxfr_1perhour,它应该每小时运行一次:
#! /bin/sh
#
# Copyr 1990 Sun Microsystems, Inc.
#ident "@(#)ypxfr_1perhour.sh 1.2 00/05/01 SMI"
#
# ypxfr_1perhour.sh - Do hourly NIS map check/updates
#
PATH=/bin:/usr/bin:/usr/lib/netsvc/yp:$PATH
export PATH
# set -xv
ypxfr passwd.byname
ypxfr passwd.byuid
下面另一个例子ypxfr_1perday,每天运行一次:
#! /bin/sh
#
# Copyr 1990 Sun Microsystems, Inc.
#ident "@(#)ypxfr_1perday.sh 1.2 00/05/01 SMI"
#
# ypxfr_1perday.sh - Do daily NIS map check/updates
#
PATH=/bin:/usr/bin:/usr/lib/netsvc/yp:$PATH
export PATH
# set -xv
ypxfr group.byname
ypxfr group.bygid
ypxfr protocols.byname
ypxfr protocols.bynumber
ypxfr networks.byname
ypxfr networks.byaddr
ypxfr services.byname
ypxfr ypservers
还有一个每天运行两次的:
#! /bin/sh
#
# Copyr 1990 Sun Microsystems, Inc.
#ident "@(#)ypxfr_2perday.sh 1.2 00/05/01 SMI"
#
# ypxfr_2perday.sh - Do twice-daily NIS map check/updates
#
PATH=/bin:/usr/bin:/usr/lib/netsvc/yp:$PATH
export PATH
# set -xv
ypxfr hosts.byname
ypxfr hosts.byaddr
ypxfr ethers.byaddr
ypxfr ethers.byname
ypxfr netgroup
ypxfr netgroup.byuser
ypxfr netgroup.byhost
ypxfr mail.aliases
****************
构建定制的NIS映射
****************
使用make工具可以定制NIS映射,make工具有三个功能:
1,程序员构建程序;
2,管理员构建NIS映射;
3,集中构建定制的NIS映射。
构建目标:
make从Makefile文件中接受指令,Makefile中包括变量定义(称为宏),目标和关联。在Makefile的前部定义宏,引用宏和引用变量差不多,名字前面加“$”
make构建目标,目标需要关联,关联描述的就是目标与目标之间的依赖关系。这种关系可以有很深的嵌套,从而实现复杂的层次化代码结构。构建NIS映射时,保持目标和关联的关系是最基本的。
编辑NIS Makefile文件
该文件位于/var/yp目录中,由四个部分组成:
第一部分包含宏定义,第二部分包含第一个目标:all,第三部分定义最终的目标和关联,第四部分包含用于关联的条目。
第一部分的宏定义:
#B=-b
B=
DIR =/etc
INETDIR=/etc/inet
RBACDIR=/etc/security
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
第二部分包含第一个目标:all
all: passwd group hosts ipnodes ethers networks rpc services protocols \
netgroup bootparams aliases publickey netid netmasks c2secure \
timezone auto.master auto.home \
auth.attr exec.attr prof.attr user.attr audit.user
all这一目标包括了很多关联,正是因为这种关联关系,所以我们只需一条命令就可以构建整个NIS映射集:
# cd /var/yp; /usr/ccs/bin/make
下面我们加入一个新的关联auto.direct到刚才的all目标中:
all: passwd group hosts ipnodes ethers networks rpc services protocols \
netgroup bootparams aliases publickey netid netmasks c2secure \
timezone auto.master auto.home auto.direct (新加的)\
auth.attr exec.attr prof.attr user.attr audit.user
在第四节中,和这些关联有关的条目是:
passwd: passwd.time
group: group.time
project: project.time
hosts: hosts.time
ipnodes: ipnodes.time
ethers: ethers.time
networks: networks.time
rpc: rpc.time
services: services.time
protocols: protocols.time
netgroup: netgroup.time
bootparams: bootparams.time
aliases: aliases.time
publickey: publickey.time
netid: netid.time
passwd.adjunct: passwd.adjunct.time
group.adjunct: group.adjunct.time
netmasks: netmasks.time
timezone: timezone.time
auto.master: auto.master.time
auto.home: auto.home.time
auth.attr:auth.attr.time
exec.attr:exec.attr.time
prof.attr:prof.attr.time
user.attr:user.attr.time
audit.user:audit.user.time
$(DIR)/netid:
$(DIR)/timezone:
$(DIR)/auto_master:
$(DIR)/auto_home:
$(PWDIR)/shadow:
$(DIR)/auth_attr:
$(DIR)/exec_attr:
$(DIR)/prof_attr:
$(DIR)/user_attr:
$(DIR)/audit_user:
我们可以为auto_direct添加以下内容:
...
auto.master: auto.master.time
auto.home: auto.home.time
auto.direct: auto.direct.time (新加的)
auth.attr:auth.attr.time
exec.attr:exec.attr.time
prof.attr:prof.attr.time
user.attr:user.attr.time
audit.user:audit.user.time
$(DIR)/netid:
$(DIR)/timezone:
$(DIR)/auto_master:
$(DIR)/auto_home:
$(DIR)/auto_direct: (新加的)
$(PWDIR)/shadow:
...
第三部分定义最终目标和关联,指出如何构建映射,我们来看auto_direct的例子:
auto.direct.time: $(DIR)/auto_direct
-@if [ -f $(DIR)/auto_direct ]; then \
sed -e "/^#/d" -e s/#.*$$// $(DIR)/auto_direct \
| $(MAKEDBM) - $(YPDBDIR)/$(DOM)/auto.direct; \
touch auto.direct.time; \
echo "updated auto.direct"; \
if [ ! $(NOPUSH) ]; then \
$(YPPUSH) auto.direct; \
echo "pushed auto.direct"; \
else \
: ; \
fi \
else \
echo "couldn’t find $(DIR)/auto_direct"; \
fi
注意:在Makefile中应该正确使用tab键和空格键。
1,使用tab缩行编排;
2,在指示中可以使用宏;
3,以@开头表示输出不送到终端屏幕,调试时可以去掉@;
4,以-@开头表示不输出错误信息到终端屏幕。
*******
NIS排故
*******
排除服务器端错误:
没有可用服务器(No Server Available)
如果域名正确,ypbind守护进程正在运行,但客户机仍然不能与服务器通讯,则:
1,看客户端有没有/var/yp/binding/domainname/ypservers文件,其中是否包含NIS服务器,如果没有,使用ypinit –c命令创建。
2,/var/yp/binding/domainname/ypservers文件中的服务器是不是有效?
3,如果记录的服务器都失效,则客户机以广播模式查找服务器,只能找到本地子网的服务器。所以要么在客户机所在子网安装从属服务器,要么配置路由器转发广播。看客户机的路由表中是否包括到达服务器所在子网的路由,如果不存在,检查in.rdisc或in.routed进程是否在运行,如果不存在执行/etc/init.d/inetinit start启动进程。
4,看看服务器是否包含在/etc/inet/hosts文件之中。
5,看/etc/nsswitch.conf是否配置为使用NIS服务器。
ypwhich命令显示内容不一致(The ypwhichCommand Displays Are Inconsistent)
这是正常现象,客户机会根据服务器的响应情况自动调整NIS服务器。一台NIS服务器也可能使用别的NIS服务器提供的服务。
网络或者服务过载(Network or Servers Are Overloaded)
这通常是暂时的现象,等处理任务或网络流量降下来就正常了。
服务器障碍(Server Malfunction)
确保服务器启动并运行,如果不在本地可以用ping测试。
NIS守护进程没有运行(NIS Daemons Not Running)
在客户机上使用ypwhich验证服务的有效性。
在服务器上检查相关进程:
# ps -e | grep yp (不要加-f选项,它会将用户ID转为名字,会导致更多不成功的名字查询请求)
如果进程不正常,重启服务:
# /usr/lib/netsvc/yp/ypstop
# /usr/lib/netsvc/yp/ypstart
如果ypserv进程存在但仍不正常,可以用pkill杀掉ypsert进程,然后重启服务。
排除客户端错误:
缺少域名或域名不正确(Missing or Incorrect Domain Name)
比较客户机的域名与/var/yp目录下的域名是否一致,区分大小写。
客户端没有绑定到服务器(Client Not Bound to Server)
用ypwhich检查服务器的有效性,多试两次。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/36549/showart_414270.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP