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

关于名称服务转换器

名称服务转换器是一个名为 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 项。如果更改转换器配置文件,则只有重新启动密钥服务器后,才会在密钥服务器上注册所做的更改。