Linux 系统认证相关
Linux SSSD, NSS, PAM 关系区别
核心区别
| 组件 |
全称 (Full Name) |
核心功能 (Core Function) |
作用对象 (Target/Focus) |
本质 (Nature) |
| NSS |
Name Service Switch (名称服务切换) |
身份信息查找:将名称(如用户名、组名、主机名)解析为 ID 或其他配置信息(如 UID、GID、Home 目录、Shell)。 |
系统数据库 (如 passwd, group, hosts, services)。 |
身份/数据查找 框架。 |
| PAM |
Pluggable Authentication Modules (可插拔认证模块) |
身份验证和授权:处理用户登录、更改密码、会话管理等操作,决定用户是否可以执行某个操作。 |
应用服务 (如 login, su, ssh, sudo)。 |
认证/授权 框架。 |
| SSSD |
System Security Services Daemon (系统安全服务守护进程) |
整合与缓存:作为 NSS 和 PAM 的后端代理,用于从远程身份存储(如 AD, LDAP, FreeIPA)获取数据,并提供本地缓存和离线登录支持。 |
远程身份/认证源。 |
守护进程/服务。 |
关系总结
SSSD、NSS 和 PAM 协同工作,形成一个分层的、可配置的身份管理架构:
-
最外层:应用服务
- 当一个应用(如
login、ssh 或 id、getent)需要身份信息或验证用户时,它会调用标准的 NSS 或 PAM 库函数。
-
中间层:NSS 和 PAM 框架
- NSS:根据配置文件
/etc/nsswitch.conf,决定查找用户/组信息的顺序和来源(例如:先查 files,然后查 sss)。
- PAM:根据配置文件
/etc/pam.d/*,决定认证、授权、账户和会话管理的步骤和模块链(例如:先检查密码,再检查用户是否在允许的组中)。
-
底层:SSSD 守护进程
- 如果 NSS 或 PAM 的配置指向
sss 模块 (nss_sss.so 和 pam_sss.so),那么请求就会被转发给 SSSD 守护进程(sssd)。
- SSSD 充当一个透明代理:
- 它首先检查本地缓存(这是 SSSD 的核心优势)。
- 如果缓存中没有或已过期,它会代表系统连接远程身份源(如 Active Directory, LDAP)获取数据或进行认证。
- 获取结果后,SSSD 会更新缓存,并将信息返回给 NSS/PAM 模块,最终回到应用。
简而言之:
- NSS 负责
你是谁?你的信息是什么?
- PAM 负责
你被允许做什么?请证明是你。
- SSSD 负责
从远程服务器获取/验证身份信息,并进行缓存以提高速度和支持离线操作。
深入思考
- 架构定位
- NSS/PAM 是 Linux 操作系统的核心 API/框架,它们定义了系统如何查找身份信息和进行认证。
- SSSD 是一个增强型服务,它使用 NSS 和 PAM 提供的接口,将远程身份管理功能带入本地系统,解决了传统方法(如
nss_ldap/pam_ldap)中缺乏缓存、离线支持和多域管理的问题。
- 独立性
- NSS 和 PAM 可以独立于 SSSD 运行,它们可以配置为只使用本地文件 (
files) 或直接连接其他后端(如旧的 ldap 模块)。
- SSSD 不能独立于 NSS 和 PAM 运行,它必须通过配置 NSS 和 PAM 框架(使用
sss 模块)才能将自己的功能提供给系统上的应用程序。
总而言之,SSSD 是一个现代的、健壮的、基于缓存的解决方案,它利用 NSS 来解决身份查找问题,利用 PAM 来解决身份验证问题,从而实现对远程身份源的无缝集成。