文章目录
1. 前言
The GNU C Library Reference Manual for version 2.35
2. 系统数据库和名称服务开关
System Databases and Name Service Switch
C 库中的各种功能需要配置才能在本地环境中正常工作。传统上,这是通过使用文件(例如,/etc/passwd)来完成的,但是其他名称服务(例如网络信息服务 (NIS) 和域名服务 (DNS))变得流行起来,并且通常被入侵到 C 库中 具有固定的搜索顺序。
GNU C 库包含一个更干净的解决方案来解决这个问题。它是根据 Sun Microsystems 在 Solaris 2 的 C 库中使用的一种方法设计的。GNU C 库沿用了它们的名称,并将此方案称为名称服务开关 (NSS)。
虽然界面可能与 Sun 的版本相似,但没有通用代码。我们从未见过 Sun 实现的任何源代码,因此内部接口不兼容。这也体现在我们使用的文件名中,稍后我们将看到。
2.1. NSS 基础
NSS Basics
基本思想是将提供的用于访问数据库的不同服务的实现放在单独的模块中。这有一些优点:
- 贡献者可以添加新服务,而无需将它们添加到 GNU C 库中。
- 模块可以单独更新。
- C 库映像较小。
为了实现上述第一个目标,下面将描述模块的 ABI。为了正确实现新服务,了解模块中的函数是如何被调用的很重要。它们绝不是为程序员直接使用而设计的。相反,程序员应该只使用文档化和标准化的函数来访问数据库。
NSS 中可用的数据库是
aliases
邮件别名
ethers
以太网号码,
ethers
用户组,请参阅组数据库。
gshadow
组密码哈希和相关信息。
hosts
主机名和编号,请参阅主机名。
initgroups
补充组访问列表。
netgroup
网络范围的主机和用户列表,请参阅网络组数据库。
networks
网络名称和编号,请参阅网络数据库。
passwd
用户身份,请参阅用户数据库。
protocols
网络协议,请参阅协议数据库。
publickey
安全 RPC 的公钥。
rpc
远程过程调用名称和号码。
services
网络服务,请参阅服务数据库。
shadow
用户密码哈希和相关信息。
以后可能会添加更多数据库。
2.2. NSS 配置文件
The NSS Configuration File
不知何故,必须将用户的意愿告知 NSS 代码。出于这个原因,有文件 /etc/nsswitch.conf。对于每个数据库,此文件包含查找过程应如何工作的规范。该文件可能如下所示:
# /etc/nsswitch.conf
#
# Name Service Switch configuration file.
#
passwd: db files
shadow: files
group: db files
hosts: files dns
networks: files
ethers: db files
protocols: db files
rpc: db files
services: db files
第一列是数据库,您可以从上表中猜到。该行的其余部分指定查找过程的工作方式。请注意,您单独指定每个数据库的工作方式。这不能用旧的单片实现方式来完成。
每个数据库的配置规范可以包含两个不同的项目:
- 服务规范,如文件、db 或 nis。
- 对查找结果的反应,例如 [NOTFOUND=return]。
2.2.1. NSS 配置文件中的服务
Services in the NSS configuration File
上面的示例文件提到了五种不同的服务:files、db、dns、nis 和 nisplus。这并不意味着这些服务在所有站点上都可用,也不意味着这些服务将永远可用。
事实上,这些名称只是 NSS 代码用来查找隐式寻址函数的字符串。稍后将描述内部接口。对用户可见的是实现单个服务的模块。
假设服务名称将用于查找。此服务的代码在名为 libnss_name 的模块中实现。在支持共享库的系统上,这实际上是一个名为(例如)libnss_name.so.2 的共享库。末尾的数字是当前使用的界面版本,不会经常更改。通常用户不必知道这些文件,因为它们应该放置在自动找到它们的目录中。只有所有可用服务的名称很重要。
最后,一些系统软件可能会使用 NSS 配置文件来存储它们自己的配置以用于类似目的。这方面的示例包括 autofs 使用的 automount 服务。
2.2.2. NSS 配置中的操作
Act

本文深入介绍了GNU C库中的名称服务开关(NSS)机制,包括其基本原理、配置文件(/etc/nsswitch.conf)的使用、服务模块的内部结构以及如何扩展NSS添加新服务。NSS允许灵活地集成多种名称服务,如文件、NIS和DNS,以查找系统数据库中的信息,如用户、组、主机等。配置文件控制了数据库查询的顺序和服务行为,而模块内部则涉及函数接口和命名约定。此外,文章还讨论了如何添加新的服务模块,以及考虑性能优化的建议。
最低0.47元/天 解锁文章
1万+

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



