目录
- 00 概述
- 01 用户和组信息
- 02 网络名称解析
- 03 网络服务与协议
- 04 网络组
00 概述
nsswitch.conf 是 Linux 系统的 “名称解析路由表”。它作为一个中央调度器,定义了系统在查找各类信息时应遵循的查询顺序和数据来源。
- 查找链:为每种信息类型(如用户、主机名)配置一个数据源序列。
- 顺序执行:当需要查询时,系统严格按照配置的从左到右顺序依次尝试各个数据源。
- 故障转移:如果某个数据源查询失败或找不到结果,系统会自动切换到下一个数据源继续查找,直到成功或所有来源都尝试完毕。
01 用户和组信息
passwd: files systemd
group: files systemd
shadow: files systemd
gshadow: files systemd
-
passwd: 用户账户信息(用户名、UID、主目录等)。
-
group: 用户组信息(组名、GID、组成员等)。
-
shadow: 用户的加密密码信息。
-
gshadow: 组密码信息。
-
files: 指本地文件,即 /etc/passwd, /etc/group, /etc/shadow, /etc/gshadow。
-
systemd: 指 systemd 的动态用户功能。主要用于为运行服务创建临时、非特权的用户,而不是用于人类用户登录。
-
策略解释:
当系统需要验证用户或组时,首先查看本地的 /etc/passwd 等文件。如果没找到(比如在查找 systemd 动态创建的用户),则会询问 systemd。
02 网络名称解析
hosts: files dns
networks: files
- 策略解释:
当您使用 ping 或 ssh 连接一个主机名时,系统会:
首先查看本地的 /etc/hosts 文件。
如果 /etc/hosts 中没有记录,则使用 DNS 进行查询。
这是一种常见的优化和安全策略,可以将本地常用的或需要覆盖的地址(如 localhost 或内部服务器)写在 /etc/hosts 中,避免不必要的 DNS 查询。
03 网络服务与协议
protocols: db files
services: db files
ethers: db files
rpc: db files
- services: 网络服务名称与端口号的映射(如 ssh -> 22)。
- protocols: 网络协议名称与编号的映射(如 tcp -> 6)。
- ethers: 以太网 MAC 地址与主机名的映射。
- rpc: RPC(远程过程调用)程序编号与名称的映射。
- db: 指 /var/db 目录下的 .db 数据库文件。这些文件是由 nscd(名称服务缓存守护进程)生成的,是对原始文件的缓存,以加快查找速度。
- files: 指原始的本地文件,如 /etc/services, /etc/protocols 等。
- 策略解释
当程序需要知道 ssh 服务使用哪个端口时,它会:
首先查询缓存的数据库文件(如果存在且有效)。
如果缓存中没有,则回退到读取 /etc/services 文件。
04 网络组
netgroup: nis
- netgroup: 用于定义网络范围内的用户组,主要用于 NFS 和 NIS 环境中。
- nis: 指从 NIS 服务器获取信息。
- 策略解释:
系统会从中央的 NIS 服务器查询网络组信息。这在大型、集中的网络管理环境中很常见。