glibc 知:手册29:系统数据库和名称服务开关

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

canpool

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值