网络信息服务(NIS)全解析
1. NIS基础介绍
NIS(Network Information Service)是一种网络信息服务,用于在网络中集中管理和分发信息。当客户端程序请求信息时,如果NIS中有相应条目,该条目会被返回给客户端,再传递给最初请求信息的程序,而程序本身并不知道使用了NIS。若NIS映射表明用户密码条目不存在,程序也会在不知情的情况下接收到该信息。
NIS可共享的文件众多,常见的有
/etc/group
和
/etc/hosts
等。与之关联的守护进程和进程主要包括:
-
ypserv
:运行在NIS服务器上,监听客户端的查询请求并作出响应。
-
ypxfrd
:用于将NIS数据库传播和传输到从服务器。
-
ypbind
:是NIS的客户端组件,负责查找可查询信息的NIS服务器,并将NIS客户端绑定到NIS域,运行NIS客户端程序的机器必须运行此守护进程。
虽然从技术上讲,NIS的表可称为“数据库”,但更常用“映射”来表示,例如在
/etc/passwd
文件中,将用户的登录名(唯一的)映射到密码条目的其他部分。
2. NIS服务器类型
NIS有且仅有一个权威服务器,即主NIS服务器,原始数据文件存于此处,这与域名系统(DNS)类似。若组织规模较大,可设置一个或多个辅助(从)NIS服务器来分担负载。从服务器不仅能分担负载,还能更好地应对服务器故障,即使主服务器或其他从服务器出现故障,从服务器仍可继续响应查询。
需要注意的是,一台服务器可以同时充当服务器和客户端的角色。主NIS服务器更新时,从服务器会接收更新以保持同步,这个过程称为服务器推送。主服务器在更新时会向从服务器推送映射文件的副本,从服务器接收后更新自身数据库,直到从服务器更新完成,主服务器才认为自身完全更新。此外,NIS还存在服务器拉取机制,但通常用于更复杂的配置,如拥有数百个从服务器的环境,在小型网络中一般不会用到。
3. NIS域
主NIS服务器会创建所谓的域,类似于Windows中的域控制器(DC)的域,但不同的是,NIS域无需NIS服务器管理员明确允许客户端加入(NIS模型假设所有客户端属于同一管理域,由同一系统管理员管理)。而且,NIS服务器仅集中管理信息和数据,本身不进行身份验证,用户身份验证由各个主机完成,NIS仅提供集中的用户列表。建议使用与DNS域名不同的名称来命名NIS域,这样便于与其他管理员交流网络域。
4. 主NIS服务器配置
多数Linux发行版在操作系统初始安装时会预装NIS客户端软件,方便将系统设置为NIS客户端,部分发行版甚至在操作系统安装过程中提供配置选项。但并非所有系统都需要充当NIS服务器,若需要,通常需手动安装NIS服务器组件,可从发行版的在线软件仓库或安装介质轻松下载所需软件。
安装并启用NIS服务器软件后,一般需完成以下操作:
1.
安装服务器端软件
:
- 在Fedora及大多数基于Red Hat包管理器(RPM)的Linux系统上,可使用以下命令安装:
[root@server-A ~]# dnf -y install ypserv
- 在openSUSE系统上,可使用YaST工具安装(若未安装):
yast -i ypserv
- 在基于Debian的发行版(如Ubuntu)上,可运行以下命令安装:
# sudo apt-get -y install nis
-
配置NIS
:可按以下四个步骤进行:
-
步骤1:设置域名
:以在名为
server-A的服务器上设置名为nis.example.org的NIS域为例。- 查看当前NIS域:
-
步骤1:设置域名
:以在名为
[root@server-A ~]# domainname
(none)
- 设置NIS域:
[root@server-A ~]# domainname nis.example.org
- 再次查看以确认更改:
[root@server-A ~]# domainname
nis.example.org
- 在Fedora及大多数Red Hat类型的系统上,为使NIS域名在系统重启后保持不变,可在`/etc/sysconfig/network`文件中创建`NISDOMAIN`变量:
[root@server-A ~]# echo "NISDOMAIN=nis.example.org" >> /etc/sysconfig/network
- 在其他Linux发行版中,可在系统启动时执行的rc脚本中添加`domainname`命令,如编辑`/etc/init.d/ypserv`脚本,搜索包含`domainname`的行,若未找到则在第一行之后添加:
domainname nis.example.org
- **步骤2:启动NIS**:`ypserv`守护进程负责处理NIS请求。在Fedora、Red Hat Enterprise Linux(RHEL)或CentOS系统上,可使用`systemctl`命令启动:
[root@server-A ~]# systemctl start ypserv
NIS是基于远程过程调用(RPC)的服务,启动NIS前需确保
rpcbind
程序已运行。在依赖
systemd
作为服务管理器的发行版中,
systemd
会自动处理
rpcbind
和
ypserv
之间的服务依赖关系。若要手动启动
rpcbind
,可使用以下命令:
[root@server-A ~]# systemctl start rpcbind
使用
rpcinfo
命令确认
ypserv
服务已正确注册到
rpcbind
:
[root@server-A ~]# rpcinfo -p | grep ypserv
100004 2 udp 811 ypserv
100004 1 udp 811 ypserv
若需停止NIS服务器,可使用以下命令:
[root@server-A ~]# systemctl stop ypserv
- **步骤3:编辑Makefile**:`make`工具用于跟踪需要编译的文件并调用相应程序进行编译,包含`make`指令的文件称为Makefile。在NIS中,需将一系列文本文件转换为数据库格式,`make`工具正好适用。
- 先备份原始的Makefile:
[root@server-A ~]# cp /var/yp/Makefile /var/yp/Makefile.original
- 以下是Makefile中一些重要指令的说明:
- **指定从服务器(NOPUSH)**:若计划使用NIS从服务器,需将`NOPUSH`变量设置为`false`,并将从服务器的主机名列在`/var/yp/ypservers`文件中,同时在`/etc/hosts`文件中添加相应条目。
# If we have only one server, we don't have to push the maps to the
# slave servers (NOPUSH=true). If you have slave servers, change this
# to "NOPUSH=false" and put all hostnames of your slave servers in the file
# /var/yp/ypservers.
NOPUSH=true
- **最小用户ID和组ID(MINUID和MINGID)**:不同Linux发行版对`/etc/passwd`和`/etc/group`文件中新创建账户的最小用户ID(UID)和组ID(GID)要求可能不同,需设置通过NIS共享的最小UID和GID值,且最小值不能为0。
# We do not put password entries with lower UIDs (the root and system
# entries) in the NIS password database for security. MINUID is the
# lowest UID that will be included in the password maps. If you
# create shadow maps, the UserID for a shadow entry is taken from
# the passwd file. If no entry is found, this shadow entry is
# ignored.
# MINGID is the lowest GID that will be included in the group maps.
MINUID=1000
MINGID=1000
- **合并影子密码和真实密码(MERGE_PASSWD)**:为使NIS可用于其他系统进行用户身份验证,需允许通过NIS共享加密密码条目。若使用影子密码,NIS会自动将`/etc/shadow`文件中的加密字段合并到`/etc/passwd`的共享副本中。若无特殊原因,建议保持`MERGE_PASSWD`的默认设置。
# Should we merge the passwd file with the shadow file ?
# MERGE_PASSWD=true|false
MERGE_PASSWD=true
- **合并组影子密码和真实组(MERGE_GROUP)**:`/etc/group`文件允许为组设置密码,由于该文件需公开可读,多数系统支持影子组文件(`/etc/gshadow`)。若无特殊原因,建议接受`MERGE_GROUP`变量的默认设置。
# Should we merge the group file with the gshadow file ?
# MERGE_GROUP=true|false
MERGE_GROUP=true
- **指定文件名**:Makefile中预配置了一些通过NIS共享的文件,但列出并不意味着自动共享,只是为后续使用建立变量。
YPPWDDIR = /etc
YPSRCDIR = /etc
# These are the files from which the NIS databases are built. You may edit
# these to taste in the event that you wish to keep your NIS source files
# separate from your NIS server's actual configuration files.
GROUP = $(YPPWDDIR)/group
PASSWD = $(YPPWDDIR)/passwd
SHADOW = $(YPPWDDIR)/shadow
GSHADOW = $(YPPWDDIR)/gshadow
....<OUTPUT TRUNCATED>....
ALIASES = /etc/aliases
HOSTS = $(YPSRCDIR)/hosts
SERVICES = $(YPSRCDIR)/services
AUTO_MASTER = $(YPSRCDIR)/auto.master
AUTO_HOME = $(YPSRCDIR)/auto.home
AUTO_LOCAL = $(YPSRCDIR)/auto.local
TIMEZONE = $(YPSRCDIR)/timezone
- **共享内容(all条目)**:在Makefile的`all`条目中,`all:`后面列出的所有映射都会被共享。
all: passwd group hosts rpc services netid protocols mail \
# netgrp shadow publickey networks ethers bootparams printcap \
# amd.home auto.master auto.home auto.local passwd.adjunct \
# timezone locale netmasks
若要更改共享的映射,可在
#
符号后列出不想共享的映射。例如,若只想共享
passwd
和
group
映射,可将
all:
行修改为:
all: passwd group \
# hosts rpc services protocols netgrp mail \
# shadow publickey networks ethers bootparams amd.home \
# passwd.adjunct...
- **步骤4:使用ypinit初始化服务器**:准备好Makefile后,使用`ypinit`命令初始化YP(NIS)服务器。在64位服务器上,使用以下命令:
[root@server-A ~]# /usr/lib64/yp/ypinit -m
若使用32位基于Linux的发行版或Debian Linux变体,
ypinit
命令的路径可能略有不同,如在32位Fedora、RHEL或CentOS服务器上,路径为
/usr/lib/yp/ypinit
。
运行
ypinit
命令前,必须先设置NIS域名。
-m
选项表示将系统设置为主NIS服务器。运行命令后,系统会提示输入运行NIS服务器的主机列表,输入完成后按
Ctrl + D
确认。接着会提示确认输入信息是否正确,确认后系统会开始构建数据库。
完成后,
ypinit
会自动运行
make
程序,构建映射并将其推送到指定的从服务器。若
rpcbind
和
ypserv
服务未运行,可使用以下命令启动:
[root@server-A ~]# systemctl restart rpcbind
[root@server-A ~]# systemctl restart ypserv
在基于Debian的发行版(如Ubuntu)上,可使用以下命令启动:
master@ubuntu-server-A:~$ sudo service rpcbind restart
master@ubuntu-server-A:~$ sudo service ypserv restart
5. Makefile错误处理
运行
ypinit
命令时可能会出现一些错误,但通常并非致命错误。
- 若在Makefile中指定了不存在的文件进行共享,会出现类似以下的错误:
gmake[1]: *** No rule to make target '/etc/shadow', -
needed by 'passwd.byname'. Stop.
可创建该文件或编辑Makefile,使其不共享该文件。
- 另一个常见错误是:
failed to send 'clear' to local ypserv: RPC: Program not registered
Updating passwd.byuid...
failed to send 'clear' to local ypserv: RPC: Program not registered
gmake[1]: *** No rule to make target '/etc/gshadow', needed by 'group.byname'.
Stop.
gmake[1]: Leaving directory '/var/yp/server-A.example.org'
第一个错误表示NIS服务器尚未启动,可忽略;第二个错误与上述情况相同,修复后可使用以下命令重建映射:
[root@server-A ~]# cd /var/yp ; make
6. 更新NIS映射
若更新了通过NIS与网络其他部分共享的文件(如向中央
/etc/passwd
文件添加用户),需重建映射文件,可使用以下命令:
[root@server-A ~]# cd /var/yp ; make
7. 防火墙与NIS
像Fedora这样的Red Hat类Linux发行版通常会启用基于主机的防火墙规则来保护系统服务,默认防火墙规则几乎总会阻止NIS客户端连接到NIS服务器。目前,打开NIS服务器端口的非优雅方法是先找出
ypserv
向
rpcbind
服务注册的端口,然后在服务器防火墙中打开
rpcbind
的服务端口以及
ypserv
的特定端口(此过程也可通过
systemd
进行脚本化或自动化)。手动操作步骤如下:
- 首先,使用预定义的
rpc-bind
firewalld服务打开
rpcbind
的端口:
# firewall-cmd --add-service=rpc-bind --permanent
通过以上步骤,你可以全面了解NIS的工作原理、服务器配置、错误处理以及与防火墙的交互,从而更好地在网络中管理和使用NIS服务。
网络信息服务(NIS)全解析
8. NIS客户端配置
配置好主NIS服务器后,接下来需要配置NIS客户端,使其能够连接到NIS服务器并获取共享信息。以下是配置NIS客户端的详细步骤:
1.
安装NIS客户端软件
:不同的Linux发行版安装方式不同,以常见的发行版为例。
- 在基于Red Hat包管理器(RPM)的系统(如Fedora、CentOS等)上,使用以下命令安装:
[root@client ~]# dnf -y install ypbind
- 在基于Debian的发行版(如Ubuntu)上,使用以下命令安装:
[root@client ~]# sudo apt-get -y install nis
-
设置NIS域名
:客户端需要与NIS服务器使用相同的域名,以确保能够正确连接。使用
domainname命令设置域名,例如:
[root@client ~]# domainname nis.example.org
为了使域名在系统重启后保持不变,在不同发行版中有不同的设置方法。
- 在Fedora及大多数Red Hat类型的系统上,在
/etc/sysconfig/network
文件中添加
NISDOMAIN
变量:
[root@client ~]# echo "NISDOMAIN=nis.example.org" >> /etc/sysconfig/network
- 在其他Linux发行版中,在系统启动脚本中添加`domainname`命令,如编辑`/etc/init.d/ypbind`脚本,添加:
domainname nis.example.org
-
配置
/etc/yp.conf文件 :该文件用于指定NIS服务器的地址。打开/etc/yp.conf文件,添加以下内容:
domain nis.example.org server server-A.example.org
其中,
nis.example.org
是NIS域名,
server-A.example.org
是NIS服务器的主机名或IP地址。
4.
启动
ypbind
服务
:
ypbind
服务负责将客户端绑定到NIS域,启动该服务并设置为开机自启。
- 在使用
systemd
的系统上,使用以下命令:
[root@client ~]# systemctl start ypbind
[root@client ~]# systemctl enable ypbind
- 在使用`init`系统的系统上,使用以下命令:
[root@client ~]# service ypbind start
[root@client ~]# chkconfig ypbind on
9. 验证NIS配置
配置完成后,需要对NIS的配置进行验证,确保客户端能够正常从NIS服务器获取信息。以下是几种验证方法:
1.
使用
ypwhich
命令
:该命令用于显示当前客户端连接的NIS服务器。运行以下命令:
[root@client ~]# ypwhich
server-A.example.org
如果输出显示了NIS服务器的主机名或IP地址,说明客户端已成功连接到NIS服务器。
2.
使用
ypcat
命令
:该命令用于从NIS服务器获取共享文件的内容。例如,获取
passwd
文件的内容:
[root@client ~]# ypcat passwd
如果能够正常输出
passwd
文件的内容,说明NIS服务器的共享信息可以正常获取。
10. NIS的安全考虑
NIS虽然提供了集中管理信息的便利,但也存在一定的安全风险,需要采取相应的措施来保障系统安全。
1.
限制访问
:只允许授权的客户端连接到NIS服务器,可以通过防火墙规则来限制对NIS服务端口的访问。例如,只允许特定IP地址段的客户端访问。
2.
加密传输
:NIS默认使用明文传输数据,容易被窃听。可以使用VPN等技术对NIS数据传输进行加密,提高数据的安全性。
3.
定期更新
:及时更新NIS服务器和客户端的软件版本,修复已知的安全漏洞。同时,定期更新共享文件的内容,确保信息的准确性和安全性。
4.
监控和审计
:对NIS服务器和客户端的活动进行监控和审计,及时发现异常行为并采取相应的措施。可以使用日志分析工具来分析系统日志,查找潜在的安全威胁。
11. NIS与其他服务的集成
在实际应用中,NIS通常需要与其他服务进行集成,以满足不同的业务需求。以下是一些常见的集成场景:
1.
与LDAP集成
:LDAP(Lightweight Directory Access Protocol)是一种用于访问和管理分布式目录信息的协议。可以将NIS与LDAP集成,实现用户信息的集中管理和共享。例如,将NIS中的用户信息同步到LDAP中,使其他支持LDAP的应用程序也能够访问这些信息。
2.
与Kerberos集成
:Kerberos是一种网络认证协议,用于提供安全的身份验证服务。将NIS与Kerberos集成,可以增强用户身份验证的安全性。例如,在用户登录时,先通过Kerberos进行身份验证,然后再从NIS中获取用户的相关信息。
3.
与NFS集成
:NFS(Network File System)是一种用于在网络中共享文件的协议。将NIS与NFS集成,可以实现用户对共享文件的访问权限管理。例如,根据NIS中的用户信息,为不同的用户分配不同的文件访问权限。
12. NIS的优缺点总结
NIS作为一种网络信息服务,具有以下优点和缺点:
| 优点 | 缺点 |
| ---- | ---- |
| 集中管理:可以将多个系统的用户信息、组信息等集中管理,方便管理员进行维护和更新。 | 安全性较低:NIS默认使用明文传输数据,容易被窃听和篡改,需要额外的安全措施来保障数据安全。 |
| 简化配置:客户端只需要配置NIS服务器的地址和域名,就可以获取共享信息,减少了客户端的配置工作量。 | 可扩展性有限:在大规模网络环境中,NIS的性能和可扩展性会受到一定的限制,可能需要使用更复杂的目录服务。 |
| 兼容性好:NIS是一种标准的网络信息服务,大多数Linux发行版都支持NIS,可以与其他系统进行良好的兼容。 | 依赖RPC:NIS基于RPC(Remote Procedure Call)协议,RPC协议存在一些安全漏洞,可能会影响NIS的安全性。 |
13. 总结与展望
NIS是一种经典的网络信息服务,在集中管理网络信息方面具有重要的作用。通过本文的介绍,我们详细了解了NIS的工作原理、服务器和客户端的配置方法、错误处理、安全考虑以及与其他服务的集成等方面的内容。
随着技术的不断发展,虽然出现了一些新的目录服务(如LDAP、Active Directory等),但NIS仍然在一些特定的场景中得到广泛应用。在未来,NIS可能会与其他技术进一步融合,不断提升其性能和安全性,为网络管理提供更加便捷和高效的解决方案。同时,我们也需要关注网络安全的发展趋势,采取更加有效的安全措施来保障NIS系统的安全运行。
通过以上内容,你可以全面掌握NIS的相关知识和操作技能,在实际的网络环境中灵活运用NIS服务,提高网络管理的效率和安全性。
下面是一个mermaid流程图,展示NIS服务器和客户端的配置流程:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([开始]):::startend --> B(安装NIS服务器软件):::process
B --> C(配置NIS域名):::process
C --> D(启动ypserv服务):::process
D --> E(编辑Makefile):::process
E --> F(使用ypinit初始化服务器):::process
F --> G(配置防火墙):::process
G --> H(安装NIS客户端软件):::process
H --> I(设置NIS域名):::process
I --> J(配置/etc/yp.conf文件):::process
J --> K(启动ypbind服务):::process
K --> L(验证NIS配置):::process
L --> M([结束]):::startend
超级会员免费看
5

被折叠的 条评论
为什么被折叠?



