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

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 表不使用转换器,因此该表不包含在转换器文件的列表中。