/etc/nsswitch 文件提供了对 用户鉴权, 网络配置 等服务所需要的数据信息.

一个典型的 nsswitch 文件如下:

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         files systemd
group:          files systemd
shadow:         files
gshadow:        files

hosts:          files mdns4_minimal [NOTFOUND=return] dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

语法

语法非常简单, 整个 conf 文件按行分割, 每一行都描述了 “当需要某个资源的时候要到哪里区查找”.

每一行 : 左边是资源名称, 右边是提供这个资源的位置以及根据某个位置查找结果执行的动作. 例如 hosts: files mdns4_minimal [NOTFOUND=return] dns 表示 hosts 的信息依次从 files (至于 files 在哪里, 后面会讲) -> mdns4_minimal -> dns 中查找. 哪个先找到就用哪个. 因此顺序也代表了优先级. 其中 [NOTFOUND=return] 表示 “当在 mdns4_minimal 中没有找到时直接 return 而不继续向后查找”.

那么除了 hosts, networks 以外, nsswitch 还控制哪些资源的查找路径呢? files 又代表什么呢? 我们接着往下看.

资源及其 files 路径

笔者将资源逻辑上分为两大类, 一类涉及到账户和鉴权, 另一类涉及到网络配置.

鉴权相关

资源 作用 files 参考
group 所有的用户组 /etc/group -
initgroups 用户的所属组列表 /etc/group -
netgroup Network-wide list of hosts and users /etc/netgroup -
passwd 用户密码 /etc/passwd -
shadow 用户加密后的密码 /etc/shadow -

网络相关

资源 作用 files 参考
hosts 主机名 /etc/hosts https://www.wenjiangs.com/doc/jdu2o2dy
ethers 网络号 /etc/ethers -
networks Network names and numbers /etc/networks -
protocols 网络协议定义 /etc/protocols https://www.wenjiangs.com/doc/otpdmusl
services 网络服务端口号和协议等 /etc/services https://www.wenjiangs.com/doc/gnhfbtdl
publickey NFS 以及 NIS+ 所用到的公私钥 /etc/publickey -
rpc RPC 的名称和号码 /etc/rpc -
aliases 邮件别名 /etc/aliases -

根据某个资源查找结果调整后续查找行为

查找结果一般为大写, 总共有如下几种:

后续动作一般为小写, 总共有如下几种: