nsswitch.conf 文件实质上就是一个列表,其中包含 16 种信息和 getXXbyYY() 例程在其中搜索这些信息的源。下面是这 16 种信息(并非必须按此顺序):
aliases
bootparams
ethers
group
hosts
ipnodes
netgroup
netmasks
networks
passwd(包括阴影信息)
protocols
publickey
rpc
services
automount
sendmailvars
下表说明了可以列在上述信息类型的转换器文件中的源的种类。
表 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 文件状态消息和操作选项一起决定例程在每个步骤执行的操作。状态和操作的组合构成了搜索条件。
对于每个源来说,转换器的缺省搜索条件完全相同。有关上面列出的状态消息的说明,请参见以下内容:
UNAVAIL=continue。转至下一个 nsswitch.conf 文件源并继续搜索。如果该源是最后一个源或唯一的源,则返回 NOTFOUND 状态。
NOTFOUND=continue。转至下一个 nsswitch.conf 文件源并继续搜索。如果该源是最后一个源或唯一的源,则返回 NOTFOUND 状态。
TRYAGAIN=continue。转至下一个 nsswitch.conf 文件源并继续搜索。如果该源是最后一个源或唯一的源,则返回 NOTFOUND 状态。
可以通过使用上面显示的 STATUS=action 语法明确指定某个其他条件来更改缺省搜索条件。例如,NOTFOUND 条件的缺省操作是继续搜索下一个源。例如,要指定 networks 在遇到 NOTFOUND 条件时停止搜索,请编辑转换器文件的 networks 行。 该行应如下所示:
networks: nis [NOTFOUND=return] files |
networks: nis [NOTFOUND=return] files 一行为 NOTFOUND 状态指定非缺省条件。非缺省条件由方括号分隔。
在本示例中,搜索条件按如下方式工作:
如果 networks 映射可用且包含需要的信息,搜索例程将返回 SUCCESS 状态消息。
如果 networks 映射不可用,搜索例程将返回 UNAVAIL 状态消息。缺省情况下,搜索例程会继续搜索相应的 /etc 文件。
如果 networks 映射可用且已找到,但是不包含需要的信息,搜索例程将返回 NOTFOUND 消息。但是,搜索例程将停止搜索,而不是像缺省行为那样继续搜索相应的 /etc 文件。
如果 networks 映射正忙,搜索例程将返回 TRYAGAIN 状态消息,而且会继续搜索相应的 /etc 文件(缺省操作)。
在 nsswitch.conf 文件中的查找是按照项的列出顺序进行的。但是,口令更新将以相反的顺序进行,除非使用 passwd -r repository 命令另行指定了更新顺序。有关更多信息,请参见转换器文件和口令信息。
客户机库例程中包含经过编译的缺省项,如果 nsswitch.conf 文件中缺少某项或者其语法有误,则会使用这个缺省项。这些项与转换器文件的缺省值相同。
名称服务转换器假设表名和源名的拼写正确无误。如果表名或源名的拼写有误,转换器将使用缺省值。
auto_home 和 auto_master 表和映射的转换器搜索条件组合成一个名为 automount 的类别。