系统管理指南:名称和目录服务(DNS、NIS 和 LDAP)

第 2 章 名称服务转换器(概述)

本章介绍名称服务转换器。名称服务转换器可用于协调各个名称服务的使用。

关于名称服务转换器

名称服务转换器是一个名为 nsswitch.conf 的文件,用于控制客户机或应用程序获取网络信息的方式。客户机应用程序使用名称服务转换器来调用类似如下的任何 getXbyY() 接口:

每台计算机的 /etc 目录中都有一个转换器文件。该文件中的每一行都标识特定类型的网络信息(如主机、口令和组),其后面是该信息的一个或多个位置。

客户机可以从一个或多个转换器的源获取名称信息。例如,NIS+ 客户机可以从 NIS+ 表获取其主机信息,从本地 /etc 文件获取其口令信息。另外,客户机可以指定转换器在哪些条件下必须使用每个源。请参见表 2–1

在安装过程中,Solaris 系统会自动将 nsswitch.conf 文件加载到每台计算机的 /etc 目录中。对于 LDAP、NIS、NIS+ 或文件,还可以将四个备用(模板)版本的转换器文件加载到 /etc 中。请参见nsswitch.conf 模板文件

这四个文件是备用的缺省转换器文件。每个文件旨在处理不同的主名称服务:/etc 文件、NIS、NIS+ 或 LDAP。将 Solaris 软件首次安装到计算机上时,安装程序会选择计算机的缺省名称服务:NIS+、NIS、本地文件或 LDAP。在安装过程中,会将相应的模板文件复制到 nsswitch.conf 中。例如,对于使用 LDAP 的客户机,会在安装过程中将 nsswitch.ldap 复制到 nsswitch.conf 中。除非您拥有特殊的名称空间,否则复制到 nsswitch.conf 中的缺省模板文件应该能够满足正常的操作。

系统没有为 DNS 提供缺省文件,但是可以编辑其中的任何文件以使用 DNS。有关更多信息,请参见DNS 和 Internet 访问

如果以后要更改计算机的主名称服务,则可以将相应的备用转换器文件复制到 nsswitch.conf 中。请参见nsswitch.conf 模板文件。还可以通过编辑 /etc/nsswitch.conf 文件中的相应行来更改客户机所用特定网络信息类型的源。下面的内容介绍语法,如何修改名称服务转换器中提供了其他说明。

nsswitch.conf 文件的格式

nsswitch.conf 文件实质上就是一个列表,其中包含 16 种信息和 getXXbyYY() 例程在其中搜索这些信息的源。下面是这 16 种信息(并非必须按此顺序):

下表说明了可以列在上述信息类型的转换器文件中的源的种类。

表 2–1 转换器文件中的信息源

信息源 

说明 

files

存储在客户机的 /etc 目录中的文件。例如,/etc/passwd

nisplus

一个 NIS+ 表。例如,hosts 表。

nis

一个 NIS 映射。例如,hosts 映射。

compat

compat 可用于口令和组信息,从而支持 /etc/passwd/etc/shadow/etc/group 文件中的旧式 + 或 - 语法。

dns

可用于指定从 DNS 获取主机信息。 

ldap

可用于指定从 LDAP 目录获取项。 

搜索条件

单个源。如果某个信息类型只有一个源(如 nisplus),则使用转换器的例程将在该源中搜索信息。如果该例程找到了此信息,则返回 success 状态消息。如果该例程未找到此信息,则会停止搜索并返回不同的状态消息。对错误消息的处理方式因例程而异。

多个源。如果表中包含给定信息类型的多个源,则该转换器会指示此例程在列出的第一个源中搜索。如果该例程找到了此信息,则返回 success 状态消息。如果该例程未在第一个源中找到此信息,将尝试在下一个源中进行搜索。该例程将依次搜索所有的源,直到找到此信息或者该例程由于指定了 return 而停止。如果在搜索了列出的所有源之后仍未找到此信息,该例程将停止搜索并返回 non-success 状态消息。

转换器状态消息

如果该例程找到了此信息,则返回 success 状态消息。如果该例程未找到此信息,则会返回下面的三个错误状态消息之一。下表列出了可能的状态消息。

表 2–2 转换器搜索状态消息

状态消息 

消息的含义 

SUCCESS

在指定的源中找到了所请求的项。 

UNAVAIL

该源不响应或者不可用。换言之,NIS+ 表、NIS 映射和 /etc 文件均无法找到或访问。

NOTFOUND

该源用“该项不存在”响应。换言之,已经访问该表、映射或文件,但是未找到必需的信息。 

TRYAGAIN

该源正忙。该源下次可能会响应。换言之,找到了该表、映射或文件,但是此时无法响应查询。 

转换器操作选项

可以指示转换器用下表中显示的两个操作之一来响应状态消息。

表 2–3 对转换器状态消息的响应

操作 

含义 

return

停止查找信息。 

continue

尝试在下一个源中查找。 

缺省搜索条件

nsswitch.conf 文件状态消息和操作选项一起决定例程在每个步骤执行的操作。状态和操作的组合构成了搜索条件

对于每个源来说,转换器的缺省搜索条件完全相同。有关上面列出的状态消息的说明,请参见以下内容:

可以通过使用上面显示的 STATUS=action 语法明确指定某个其他条件来更改缺省搜索条件。例如,NOTFOUND 条件的缺省操作是继续搜索下一个源。例如,要指定 networks 在遇到 NOTFOUND 条件时停止搜索,请编辑转换器文件的 networks 行。 该行应如下所示:


networks: nis [NOTFOUND=return] files

networks: nis [NOTFOUND=return] files 一行为 NOTFOUND 状态指定非缺省条件。非缺省条件由方括号分隔。

在本示例中,搜索条件按如下方式工作:


注意 –

nsswitch.conf 文件中的查找是按照项的列出顺序进行的。但是,口令更新将以相反的顺序进行,除非使用 passwd -r repository 命令另行指定了更新顺序。有关更多信息,请参见转换器文件和口令信息


语法有误时该怎么办?

客户机库例程中包含经过编译的缺省项,如果 nsswitch.conf 文件中缺少某项或者其语法有误,则会使用这个缺省项。这些项与转换器文件的缺省值相同。

名称服务转换器假设表名和源名的拼写正确无误。如果表名或源名的拼写有误,转换器将使用缺省值。

Auto_homeAuto_master

auto_homeauto_master 表和映射的转换器搜索条件组合成一个名为 automount 的类别。

时区和转换器文件

timezone 表不使用转换器,因此该表不包含在转换器文件的列表中。

nsswitch.conf 文件中的注释

nsswitch.conf 文件中任何以注释字符 (#) 开头的行都被解释为注释行。搜索该文件的例程会忽略注释行。

注释标记前面的字符由搜索 nsswitch.conf 文件的例程进行解释。注释标记右侧的字符会被解释为注释并被忽略。

表 2–4 转换器文件的注释示例

行的类型 

示例 

注释行。 

# hosts: nisplus [NOTFOUND=return] files 

解释行。 

hosts: nisplus [NOTFOUND=return] file 

部分解释的行。不对 files 元素进行解释。

hosts: nisplus [NOTFOUND=return] # files 

密钥服务器和转换器文件中的 publickey


注意 – 注意 –

nsswitch.conf 进行更改之后必须重新启动密钥服务器。


只有启动了密钥服务器后,密钥服务器才会读取名称服务转换器配置文件中的 publickey 项。如果更改转换器配置文件,则只有重新启动密钥服务器后,才会在密钥服务器上注册所做的更改。

nsswitch.conf 模板文件

随 Solaris 系统提供了四个可以适用于不同名称服务的转换器模块文件。每个文件都提供一组不同的缺省信息源。

下面列出了这四个模板文件:

将最符合要求的模板文件复制到 nsswitch.conf 配置文件中,然后根据需要修改该文件。

例如,要使用 LDAP 模板文件,可键入以下命令:


mymachine# cp /etc/nsswitch.ldap /etc/nsswitch.conf

缺省的转换器模板文件

下面列出了随 Solaris 产品提供的四个转换器文件。


实例 2–1 NIS+ 转换器文件模板: nsswitch.nisplus


#

#

# /etc/nsswitch.nisplus:

#

#

# An example file that could be copied over to /etc/nsswitch.conf;

# it uses NIS+ (NIS Version 3) in conjunction with files.

#

# "hosts:" and "services:" in this file are used only if the

# /etc/netconfig file has a "-" for nametoaddr_libs of "inet"

# transports.

 

# the following two lines obviate the "+" entry in /etc/passwd 

# and /etc/group.

passwd: files nisplus

group: files nisplus

# consult /etc "files" only if nisplus is down. 

hosts: nisplus [NOTFOUND=return] files

# Uncomment the following line, and comment out the above, to use 

# both DNS and NIS+. You must also set up the /etc/resolv.conf 

# file for DNS name server lookup. See resolv.conf(4).

# hosts: nisplus dns [NOTFOUND=return] files

services: nisplus [NOTFOUND=return] files

networks: nisplus [NOTFOUND=return] files

protocols: nisplus [NOTFOUND=return] files

rpc: nisplus [NOTFOUND=return] files

ethers: nisplus [NOTFOUND=return] files

netmasks: nisplus [NOTFOUND=return] files	

bootparams: nisplus [NOTFOUND=return] files

publickey: nisplus

netgroup: nisplus

automount: files nisplus

aliases: files nisplus

sendmailvars: files nisplus


实例 2–2 NIS 转换器文件模板


#

# /etc/nsswitch.nis:

#

# An example file that could be copied over to /etc/nsswitch.conf;

# it uses NIS (YP) in conjunction with files.

#

# "hosts:" and "services:" in this file are used only if the

# /etc/netconfig file has a "-" for nametoaddr_libs of "inet"

# transports.

#

# the following two lines obviate the "+" entry in /etc/passwd

# and /etc/group.

passwd: files nis

group: files nis

# consult /etc "files" only if nis is down. 

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

netgroup: nis

automount: files nis

aliases: files nis

# for efficient getservbyname() avoid nis

services: files nis

sendmailvars: files


实例 2–3 文件转换器文件模板


#

# /etc/nsswitch.files:

#

# An example file that could be copied over to /etc/nsswitch.conf;

# it does not use any naming service.

#

# "hosts:" and "services:" in this file are used only if the

# /etc/netconfig file has a "-" for nametoaddr_libs of "inet"

# transports.

passwd: files

group: files

hosts: files

networks: files

protocols: files

rpc: files

ethers: files

netmasks: files	

bootparams: files

publickey: files

# At present there isn't a 'files' backend for netgroup;

# the system will figure it out pretty quickly, and will notuse

# netgroups at all.

netgroup: files

automount: files

aliases: files

services: files

sendmailvars: files


实例 2–4 LDAP 转换器文件模板


#

# /etc/nsswitch.ldap:

#

# An example file that could be copied over to /etc/nsswitch.conf; it

# uses LDAP in conjunction with files.

#

# "hosts:" and "services:" in this file are used only if the

# /etc/netconfig file has a "-" for nametoaddr_libs of "inet" transports.



# the following two lines obviate the "+" entry in /etc/passwd 

and /etc/group.

passwd:     files ldap

group:      files ldap



hosts:      ldap [NOTFOUND=return] files



networks:   ldap [NOTFOUND=return] files

protocols:  ldap [NOTFOUND=return] files

rpc:        ldap [NOTFOUND=return] files

ethers:     ldap [NOTFOUND=return] files

netmasks:   ldap [NOTFOUND=return] files

bootparams: ldap [NOTFOUND=return] files

publickey:  ldap [NOTFOUND=return] files



netgroup:   ldap



automount:  files ldap

aliases:    files ldap



# for efficient getservbyname() avoid ldap

services:   files ldap

sendmailvars:   files

nsswitch.conf 文件

随 Solaris 软件安装的缺省 nsswitch.conf 文件由安装过程中选择的名称服务确定。每一行都标识特定类型的网络信息(如主机、口令和组)以及信息源(如 NIS+ 表、NIS 映射、DNS 主机表或本地 /etc)。在选择某个名称服务时,会复制该服务的转换器模板文件以创建新的 nsswitch.conf 文件。例如,如果选择 NIS+,则会复制 nsswitch.nisplus 文件以创建新的 nsswitch.conf 文件。

Solaris 9 发行版软件会自动将 nsswitch.conf 文件与下列备用(模板)版本一起加载到每台计算机的 /etc 目录中。

这些备用模板文件中包含由 NIS+ 服务、NIS 服务、本地文件和 LDAP 使用的缺省转换器配置。系统没有为 DNS 提供缺省文件,但是可以编辑其中的任何文件以使用 DNS。在将 Solaris 软件首次安装到计算机上时,安装程序会选择计算机的缺省名称服务。在安装过程中,会将相应的模板文件复制到 /etc/nsswitch.conf 中。例如,对于使用 NIS+ 的客户机,会在安装过程中将 nsswitch.nisplus 复制到 nsswitch.conf 中。

如果网络连接到 Internet,而且用户必须使用 DNS 访问 Internet 主机,则必须启用 DNS 转发。

除非您拥有特殊的名称空间,否则复制到 nsswitch.conf 中的缺省模板文件应该能够满足正常的操作。

选择其他配置文件

更改计算机的名称服务时,需要相应地修改计算机的转换器文件。例如,如果将计算机的名称服务从 NIS 更改为 NIS+,则需要安装适用于 NIS+ 的转换器文件。可通过将相应的模板文件复制到 nsswitch.conf 中来更改转换器文件。

如果要使用 NIS+ 安装脚本在计算机上安装 NIS+,系统会将 NIS+ 模板脚本复制到 nsswitch.conf 中。在这种情况下,除非您希望进行自定义,否则不必对转换器文件进行配置。

继续更改转换器文件之前,请确保正确设置了列在该文件中的源。换言之,如果打算选择 NIS+ 版本,客户机必须最终能够访问 NIS+ 服务。如果打算选择本地文件版本,则必须在客户机上正确设置这些文件。

如何修改名称服务转换器

要更改转换器文件,请执行以下步骤。


注意 –

为了使用 LDAP 名称服务,除了修改 nsswitch.conf 以外,还必须正确地配置所有的 LDAP 客户机。有关更多信息,请参见第 12 章,设置 LDAP 客户机(任务)


  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见 System Administration Guide: Security Services中的“Using Role-Based Access Control (Tasks)”

  2. 将适用于计算机名称服务的相应备用文件复制到 nsswitch.conf 文件中。

    NIS+ 版本(由 NIS+ 脚本自动完成)


    client1# cd /etc
    
    client1# cp nsswitch.nisplus nsswitch.conf
    

    NIS 版本


    client1# cd /etc
    
    client1# cp nsswitch.nis nsswitch.conf
    

    本地 /etc 文件版本


    client1# cd /etc
    
    client1# cp nsswitch.files nsswitch.conf
    

  3. 重新引导计算机。

    nscd 守护进程对转换器信息进行缓存。 有关相应的信息,请参见 nscd(1M) 手册页。

    某些库例程不会通过定期检查 nsswitch.conf 文件来查看该文件是否经过更改。必须重新引导计算机以确保此守护进程和这些例程具有该文件中的最新信息。

DNS 和 Internet 访问

nsswitch.conf 文件还控制客户机的 DNS 转发,如以下各小节中所述。DNS 转发允许客户机访问 Internet。有关如何为 NIS 和 NIS+ 设置 DNS 转发的信息,请参见System Administration Guide: Naming and Directory Services (NIS+)

IPv6 和 Solaris 名称服务

NIS、NIS+ 和 LDAP 支持存储 IPv6 数据,还支持将 IPv6 传输机制用于协议通信。从 BIND 8.3.3 版开始,Solaris 上的 DNS 支持在客户端使用 IPv6 传输机制。从 BIND 8.4.2 版开始,Solaris 上的 DNS 为 IPv6 网络提供了完整的客户机/服务器解决方案。

nsswitch.conf 文件控制 IPv6 地址的搜索条件。IPv6 将 IP 地址的大小从 32 位增加到 128 位,从而可以支持更多层的寻址分层结构。地址大小越大,提供的可寻址节点越多。有关 IPv6 及其配置和实现的更多信息,请参见System Administration Guide: IP Services

将新的 ipnodes 源用于 IPv6 地址。/etc/inet/ipnodes 文件同时存储 IPv4 和 IPv6 地址。/etc/inet/ipnodes 文件与 /etc/hosts 文件使用相同的格式约定。

能够识别 IPv6 的名称服务将新的 ipnodes 源用于搜索转发。例如,如果 LDAP 能够识别 IPv6 地址,请指定以下内容:


ipnodes: ldap [NOTFOUND=return] files

注意 – 注意 –

潜在的延迟问题:


确保与 +/- 语法兼容

如果在/etc/passwd/etc/shadow/etc/group 文件中使用 +/-,则需要修改 nsswitch.conf 文件以确保与 +/- 兼容。

转换器文件和口令信息

可以将口令信息包括在多个系统信息库(如 filesnisplus)中并访问它们。可以使用 nsswitch.conf 文件来为这些信息设置查找顺序。


注意 – 注意 –

files 必须是 nsswitch.conf 文件中 passwd 信息的第一个源。


在 NIS+ 环境中,nsswitch.conf 文件中的 passwd 行应当按以下顺序列出系统信息库:


passwd: files nisplus

在 NIS 环境中,nsswitch.conf 文件中的 passwd 行应当按以下顺序列出系统信息库:


passwd: files nis

提示 –

首先列出 files 可允许 root 在大多数情况下(即使系统遇到某些网络问题或名称服务问题)登录。


建议不要为同一个用户维护多个系统信息库。通过为每个用户在单个系统信息库中维护集中的口令管理,可以减少发生混淆和错误的几率。如果要为每个用户维护多个系统信息库,请使用 passwd -r 命令来更新口令信息。


passwd -r repository
如果没有用 -r 选项指定系统信息库,则 passwd 会以相反的顺序更新列在 nsswitch.conf 中的系统信息库。