资讯动态

Kanidm 在 Fedora / CentOS 上集成 PAM 与 nsswitch 的完整实战指南

发布时间:2026/10/13 2:13:46 来源:尧图企业网站定制
后端认证鉴权安全【免费下载链接】kanidmKanidm: A simple, secure, and fast identity management platform项目地址https://gitcode.com/gh_mirrors/ka/kanidm点击查看免费下载本篇技术指南围绕 Kanidm 官方文档中 Fedora / CentOS 的集成章节展开完整讲解如何在 RHEL 系发行版上通过 PAM可插拔认证模块与 nsswitch 将 Kanidm 中的 POSIX 账户接入本地登录流程。你将掌握两种配置路径直接编辑/etc/pam.d下的 system-auth / password-auth不使用 authselect以及通过authselect create-profile创建自定义 profile推荐方式并理解pam_kanidm.so模块的底层实现原理与 SELinux 环境下的注意事项最终能够独立完成从安装 unixd 客户端到getent验证、用户登录的全链路配置。一、集成架构与前置条件在 Fedora / CentOS 上启用 Kanidm 登录本质上是让本机的两个经典子系统认识 Kanidmnsswitch负责“身份解析”让getent passwd / group能查询到 Kanidm 中的用户与组即把 Kanidm 当作 passwd / group 的数据源PAM负责“认证与授权”让登录程序sshd、login、图形登录管理器等在认证阶段调用pam_kanidm.so向 Kanidm 校验密码并在 account 阶段检查用户是否被允许登录。两者之间由Kanidm UNIX Daemonkanidm-unixd作为本地中介服务完成通信。PAM / NSS 模块并不直接访问 Kanidm 服务器而是通过 UNIX socket 与本地 daemon 交互由 daemon 负责缓存、凭据校验、home 目录创建等任务。这一整体架构在 PAM 与 nsswitch 集成总览 中有详细说明。集成前需要确认以下组件已就绪安装客户端 daemon 包客户端工具安装dnf install kanidm-unixd-clients该包提供kanidm_unixd、kanidm_unixd_tasks两个 daemon 以及pam_kanidm.so、nsswitch 库libnss_kanidm.so等组件。确认服务已启动kanidm-unixd-tasks是必需的这一点与早期版本“可选”不同systemctl status kanidm-unixd systemctl status kanidm-unixd-tasks systemctl enable --now kanidm-unixd从仓库中的 systemd 单元文件可以看到kanidm-unixd.service通过Upholdskanidm-unixd-tasks.service确保任务 daemon 被拉起并保持运行kanidm-unixd.service。配置 daemon/etc/kanidm/unixd是 unixd 的主配置文件版本 2 格式其中[kanidm]段启用 Kanidm 提供者典型配置见 示例配置。同时/etc/kanidm/config至少需要设置uri指向 Kanidm 服务器地址否则 daemon 无法启动。验证 daemon 健康状态kanidm-unix status正常输出为system: online Kanidm: online如果只显示system: online说明 daemon 未配置 Kanidm 提供者若显示Connection refused之类的错误参见 故障排查。二、SELinux 注意事项必须先处理Kanidm 目前没有 SELinux 策略支持这是 Fedora 环境默认 Enforcing 模式集成时最先会遇到的障碍。官方文档给出的处理方式是将 daemon 类型unconfined_service_t设为 permissive 模式semanage permissive -a unconfined_service_t撤销该设置semanage permissive -d unconfined_service_t此外sshd 等其他类型可能需要通过audit2allow生成并加载允许规则才能访问 UNIX daemon socket位于/var/run/kanidm-unixd/sock。在 Enforcing 模式下如果登录时出现Permission denied且 avc 日志有对应拒绝记录就需要执行ausearch -m avc -ts recent | audit2allow -M kanidm-unixd semodule -i kanidm-unixd.pp[!WARNING] 修改 PAM 配置可能导致系统完全无法登录或认证。必须始终保有一个可用的恢复会话例如 root 终端、单用户模式或机器控制台再执行下述改动。三、认识 authselect 管理的符号链接Fedora / RHEL 系的/etc/pam.d/system-auth、/etc/pam.d/password-auth通常由authselect统一管理其真实内容是/usr/lib/authselect/下 profile 文件的符号链接。因此官方文档明确指出这些文件由 authselect 以符号链接形式管理。你可以选择与 authselect 协作推荐也可以先移除符号链接后直接手工编辑。两条路线任选其一切勿同时使用authselect select 会覆盖手工编辑的结果。四、路线 A不使用 authselect直接编辑 PAM 文件如果机器上不使用 authselect或已移除符号链接直接编辑下述两个文件的内容。/etc/pam.d/system-auth# /etc/pam.d/system-auth auth required pam_env.so auth required pam_faildelay.so delay2000000 auth sufficient pam_fprintd.so auth sufficient pam_kanidm.so ignore_unknown_user auth sufficient pam_unix.so nullok auth required pam_deny.so account sufficient pam_kanidm.so ignore_unknown_user account required pam_unix.so password requisite pam_pwquality.so password sufficient pam_unix.so yescrypt shadow nullok use_authtok password required pam_deny.so session optional pam_keyinit.so revoke session required pam_limits.so -session optional pam_systemd.so session [success1 defaultignore] pam_succeed_if.so service in crond quiet use_uid session optional pam_kanidm.so session required pam_unix.so/etc/pam.d/password-auth# /etc/pam.d/password-auth auth required pam_env.so auth required pam_faildelay.so delay2000000 auth sufficient pam_kanidm.so ignore_unknown_user auth sufficient pam_unix.so nullok auth required pam_deny.so account sufficient pam_kanidm.so account required pam_unix.so password requisite pam_pwquality.so password sufficient pam_unix.so yescrypt shadow nullok use_authtok password required pam_deny.so session optional pam_keyinit.so revoke session required pam_limits.so -session optional pam_systemd.so session [success1 defaultignore] pam_succeed_if.so service in crond quiet use_uid session optional pam_kanidm.so session required pam_unix.so配置要点解读pam_kanidm.so ignore_unknown_user当认证的用户不是 Kanidm 账户时返回PAM_IGNORE把机会让给后续的pam_unix.so。从源码看PAM 模块选项解析 支持debug、use_first_pass、ignore_unknown_user三个参数在 认证核心实现 中ignore_unknown_user开启时对未知用户返回PAM_IGNORE否则返回PAM_USER_UNKNOWN。这正是“本地用户仍可登录、Kanidm 用户走 Kanidm 认证”的关键机制。sufficient语义pam_kanidm.so放在pam_unix.so之前并标记为sufficient意味着 Kanidm 认证成功即视为整个 auth 栈成功认证失败时返回PAM_AUTH_ERRPAM 会继续尝试pam_unix.so——这正是官方推荐的“Kanidm 优先、本地用户回退”的混合模式。account 段pam_kanidm.so执行 account 检查判断用户是否被允许登录本地账户则由pam_unix.so的 account 处理密码过期等。session 段pam_kanidm.so为 optional用于通知 unixd 开始会话触发 home 目录创建。password 段保留pam_unix.so处理本地用户的密码修改Kanidm 用户的密码修改应通过kanidm person posix set-password在服务端完成而不是通过 PAM password 栈。五、路线 B使用 authselect 创建自定义 profile推荐authselect 方案的好处是PAM 文件仍由 authselect 统一管理后续系统更新、启用其他特性如with-mkhomedir、with-systemd-homed时不会互相踩踏。1. 基于 sssd profile 创建 kanidm profileauthselect create-profile kanidm -b sssd这会在/etc/authselect/custom/kanidm生成一个以 sssd 为基座的新 profile 目录。2. 在该目录中创建/覆盖三个文件nsswitch.confpassword-authsystem-auth其中password-auth 与 system-auth 的内容与上面“路线 A”给出的完全相同即把pam_kanidm.so插入 sssd 模板的对应位置。仓库中已内置了一套可直接对照的 Fedora authselect 配置见 platform/fedora/authselect其password-auth/system-auth正是带{if ...}条件模板的 sssd 基座 pam_kanidm.so的形式可作为比对参考。nsswitch.conf按你的实际场景调整一个可工作的示例passwd: kanidm compat systemd group: kanidm compat systemd shadow: files hosts: files dns myhostname services: files netgroup: files automount: files aliases: files ethers: files gshadow: files networks: files dns protocols: files publickey: files rpc: files3. 应用 profileauthselect select custom/kanidm执行后 authselect 会重新生成/etc/pam.d下的符号链接指向custom/kanidm模板。nsswitch 配置的两条铁律kanidm必须排在所有其他模块包括compat、files之前Kanidm 提供对files模块的缓存视图前置可保证身份解析顺序确定。这也是为什么示例写成passwd: kanidm compat systemd而非files在前的默认形式systemd模块若使用则必须位于最后passwd: kanidm compat systemd、group: kanidm compat systemd否则可能导致解析异常。仓库内置的 authselect 模板同样遵循该顺序nsswitch.conf 中为passwd: kanidm files systemd。关于 profile 特性REQUIREMENTS的警告仓库的 REQUIREMENTS 明确提示两个与 kanidm-unixd不兼容的特性使用 authselect 时务必注意with-mkhomedir与 kanidm-unixd 不兼容必须立即禁用并执行systemctl disable --now oddjobd.servicehome 目录由 kanidm-unixd-tasks 自动创建with-systemd-homed同样不兼容需systemctl disable --now systemd-homed.service。六、身份解析验证与账户准备完成 nsswitch 配置后即可验证 Kanidm 中的 POSIX 账户能否被本机解析。创建 POSIX 用户并启用 POSIX 属性参见 账户 与 POSIX 账户与组。为账户设置 UNIX 密码否则该账户没有任何可用于登录的凭据kanidm person posix set-password --name idm_admin demo_user解析验证getent passwd demo_user demo_user:x:3524161420:3524161420:demo_user:/home/demo_user:/bin/sh组同理getent group testgroup testgroup:x:2439676479:demo_user输出中的 uid/gid 是 Kanidm 根据 POSIX 属性生成的稳定数字 ID。如果无法解析优先检查/etc/kanidm/unixd中[kanidm]段是否存在、/etc/kanidm/config的uri是否正确以及 socket 权限详见 故障排查。七、底层实现pam_kanidm.so 如何工作理解配置背后的机制有助于定位“为什么这样写”。pam_kanidm.so的实现非常精简——lib.rs 整个模块只有一行宏展开use pam_sparkle_common::{pam_hooks, PamSparkle}; pam_hooks!(PamSparkle);pam_hooks!宏定义于 pam_sparkle_common 的 macros为pam_sm_authenticate、pam_sm_acct_mgmt、pam_sm_open_session等标准入口生成extern C导出符号实际逻辑全部由pam_sparkle_common提供。核心流程core.rs认证auth 段sm_authenticate先尝试连接/etc/kanidm/unixd中的sock_path默认/var/run/kanidm-unixd/sock对应的 daemon连接失败时自动降级为本地回退模式sm_authenticate_fallback直接读取/etc/passwd与/etc/shadow校验本地用户保证 daemon 故障时本地登录不中断见 core.rs。多步认证状态机与 daemon 的PamAuthenticateInit / PamAuthenticateStep交互中依次处理密码Password、MFA 验证码MFACode、设备授权码DeviceAuthorizationGrant、WebAuthn PIN 设置SetupPin等响应完整覆盖 Kanidm 的强认证流程。account 段授权acct_mgmt向 daemon 发送PamAccountAllowed请求daemon 依据/etc/kanidm/unixd中[kanidm] pam_allowed_login_groups的配置判断是否放行——这正是“只有属于指定 POSIX 组的用户才能登录”这一限制的实现位置core.rs。session 段sm_open_session发送PamAccountBeginSession通知 unixd 任务 daemon 为登录用户准备创建home 目录。这也是官方文档把pam_kanidm.so配置为sufficientignore_unknown_user的原因Kanidm 用户由 daemon 认证本地用户降级由pam_unix.so处理两套体系互不干扰。八、unixd 关键配置项速查/etc/kanidm/unixd版本 2 格式中与登录集成直接相关的核心项完整注释版见 examples/unixd配置项默认值说明version—配置格式版本当前必须为2hsm_typetpm_if_possible本地凭据缓存的 HSM 绑定策略soft/tpm/tpm_if_possiblehome_prefix/home/home 目录前缀必须以/结尾home_attruuidhome 目录使用的稳定属性uuid/name/spn。Kanidm 用户可随时改名建议保持uuid并配home_aliashome_aliasspn用于生成指向稳定 home 路径的符号链接的可读属性home_strategysymlink别名目录策略symlink或Linuxbind_mountselinuxtrue是否启用 SELinux 运行时兼容自动检测需构建时开启 SELinux 特性[kanidm] pam_allowed_login_groups空集PAM 允许登录的 POSIX 组列表不在其中即无法登录NSS 解析不受影响[kanidm] service_account_token_path—服务账号 token 文件路径匿名账户被禁用时必填服务账号场景当 Kanidm 侧禁用了匿名账户需要创建一个服务账号并加入idm_unix_authentication_read组把 token 写入单行文件并配置service_account_token_path也可以参考 服务账号章节 与systemctl edit kanidm-unixd.service中关于 systemd 凭据加载的注释。九、验证与常见问题清单配置完成后从另一终端或恢复会话执行以下验证kanidm-unix status输出system: online与Kanidm: onlinegetent passwd 用户、getent group 组能解析出 Kanidm 条目尝试以 Kanidm 用户通过 sshd 或本地登录密码校验成功且自动创建 home 目录确认 Kanidm 用户登录后id、getent输出符合预期。常见问题速查完整排查流程见 故障排查SELinux 拒绝将unconfined_service_t设为 permissive或为 sshd 等类型执行audit2allowPAM 文件被覆盖确认你走的路线手工编辑 vs authselect唯一authselect select 会重建符号链接用户无法解析检查[kanidm]段是否存在、uri是否可达、socket/var/run/kanidm-unixd/sock权限是否 777 且非 root 可读、task_sock是否 700 且属主正确本地登录中断daemon 故障时模块自动回退到/etc/passwd/etc/shadow本地认证若本地认证也失败检查是否误将pam_kanidm.so放在了pam_unix.so之前且非sufficient启用 mkhomedir / systemd-homed 特性与 kanidm-unixd 不兼容需按 REQUIREMENTS 提示禁用oddjobd.service/systemd-homed.service。按照上述步骤你即可在 Fedora / CentOS 上构建一套“Kanidm 统一管理身份、本地机器无缝登录”的混合认证体系且同时保留本地账户的可用性作为兜底。赞分享后端认证鉴权安全【免费下载链接】kanidmKanidm: A simple, secure, and fast identity management platform项目地址https://gitcode.com/gh_mirrors/ka/kanidm点击查看免费下载相关推荐FreeBSD 上集成 Kanidm PAM 与 nsswitch 的完整配置指南FreeBSD 上集成 Kanidm PAM 与 nsswitch 的完整配置指南 Kanidm 的 FreeBSD 客户端通过 libnss_kanidm.s后端认证鉴权安全在 RedHat、Fedora 与 CentOS 上安装 Weblate基于 uv、PostgreSQL 与 Celery 的完整实战指南在 RedHat、Fedora 与 CentOS 上安装 Weblate基于 uv、PostgreSQL 与 Celery 的完整实战指南 本文是 Webla后端开发工具AppImageLauncher在Fedora上的安装与使用完整指南AppImageLauncher在Fedora上的安装与使用完整指南 引言解决Fedora系统AppImage管理痛点 你是否曾在Fedora系统中下载Ap桌面应用CLI上一篇如何快速开发Typecho插件从入门到精通的完整指南下一篇OpenToonz终极入门指南如何在30分钟内创建你的第一个专业级动画创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑