AD 信任前置与建立
建立 AD 用户登录 Linux 的单向信任前需核对的五项条件、建立信任的命令,以及穿透验证。任一项不满足时 trust-add 失败或用户解析不通。
安装 IDMatrix 本身不需要本页内容。本页是建立 AD 信任的前置条件,安装前备齐,安装后一次建成。需要企业版许可。
信任的形态
IDMatrix 与 AD 建立单向信任:IPA 域信任 AD 林,AD 用户以自己的账号口令登录加入 IPA 域的 Linux 主机;IPA 用户不能登录 Windows。AD 侧不安装任何组件,只在 AD 中增加一个信任对象和一条到 IPA 域的 DNS 转发。
AD 用户在 Linux 侧的 uid 与 gid 由 SID 算法映射。信任建立时自动生成 <AD域>_id_range,与本地用户的 ID 范围不重叠。HBAC 与 sudo 规则通过外部组映射引用 AD 组。
图中未画出的边界:sssd 缓存票据和 HBAC 规则,AD 不可达时已缓存的用户在 offline_credentials_expiration(默认 0,即不限)内仍能登录;referral 依赖 IPA DNS 能解析 AD 域,这是检查单第 1 项的原因。
检查单
1. DNS
双方需能互相正反解。这是最常见的失败点。
| 方向 | 要求 | 方法 |
|---|---|---|
| IPA 到 AD | IPA 服务器能解析 AD 域的 SRV 记录和域控主机名 | 安装后执行 ipa dnsforwardzone-add <AD域> --forwarder <AD DNS IP> --skip-overlap-check |
| AD 到 IPA | AD 域控能解析 IPA 服务器 FQDN | 在 AD DNS 添加 IPA 的 A 记录和 PTR,或建立到 IPA 域的条件转发 |
| IPA 自身 | IPA_HOSTNAME 的 A 与 PTR 一致,不是 loopback | 安装前置,见系统要求 |
核验:
dig +short _ldap._tcp.<AD域> SRV @localhost # 返回 AD 域控
nslookup <AD域控 FQDN>
dig +short -x <IPA IP> # 返回 IPA FQDN2. 时间
IPA 与 AD 域控时差小于 5 分钟,最好使用同一个 NTP 源。超出后报 KRB5KDC_ERR_SKEW,认证全部失败。核验 chronyc tracking,两侧对比 date。
3. AD 管理员
一个能在 AD 侧创建信任对象的账号,通常是域管理员。口令只在 trust-add 交互时输入,不写入任何文件。
4. 网络
IPA 与 AD 域控之间双向放行:53、88、464、389、636、445、135 和 1024 到 1300(RPC 动态端口)。裸机 IPA_SETUP_FIREWALLD=true 只放行 IPA 自身端口,AD 相关端口需手工补充。
5. IPA 侧
| 项 | 要求 |
|---|---|
| adtrust | IPA_SETUP_ADTRUST=true 已安装。ipactl status 中 smb 和 winbind 均为 RUNNING |
| NetBIOS | IPA_NETBIOS 不与 AD 域的 NetBIOS 名重复 |
| 许可 | 含 AD 域信任模块(企业版)。管理台 IPA Server 下显示 Trusts 时满足 |
建立信任
建立到 AD 的 DNS 转发区
kinit admin
ipa dnsforwardzone-add <AD域> --forwarder <AD DNS IP> --skip-overlap-check
dig +short _ldap._tcp.<AD域> SRV @localhostAD 域常与 IPA 域同在一个父域下,重叠检查会误拒,因此加 --skip-overlap-check。
建立单向信任
ipa trust-add <AD域> --type ad --admin <AD管理员> --password --range-type=ipa-ad-trust预期最后一行为 Trust status: Established and verified。
不加 --two-way=True。双向信任需要 AD 反连 IPA 做校验,多数环境报 WERR_CONNECTION_REFUSED;AD 用户登录 Linux 只需单向信任。
验证穿透
ipa trust-show <AD域>
id <AD用户>@<AD域> # 返回 uid、gid、组,uid 在 <AD域>_id_range 内
ipa idrange-find # 显示自动生成的 <AD域>_id_range再从一台已加入 IPA 域的 Linux 客户端用 AD 账号 ssh 登录一次,家目录自动创建(playbook 启用了 oddjob-mkhomedir)。
用 AD 组管理 Linux 访问
AD 组不能直接写入 HBAC 或 sudo 规则。先映射为 IPA 的外部组,再放入一个 POSIX 组:
ipa group-add --external ad_admins_external
ipa group-add-member ad_admins_external --external '<AD域>\Domain Admins'
ipa group-add ad_admins
ipa group-add-member ad_admins --groups ad_admins_external
# 之后 HBAC 与 sudo 规则引用 ad_admins管理台中在 Identity 下的 Groups、User groups 创建组时勾选 External。
排障
| 症状 | 原因 | 处理 |
|---|---|---|
trust-add 找不到 AD 域 | 未建转发区,或 AD DNS 不可达 | 先执行第一步,用 dig 验证 SRV |
WERR_CONNECTION_REFUSED | 使用了双向信任 | 去掉 --two-way,使用 --range-type=ipa-ad-trust |
时钟偏移,KRB5KDC_ERR_SKEW | 时差超过 5 分钟 | 两侧使用同一个 NTP 源 |
trust-add 成功但 id <AD用户>@<AD域> 无返回 | SSSD 尚未获取,或 winbind 未运行 | ipactl status 查看 smb 与 winbind;sss_cache -E 清缓存后重试 |
AD 用户能 id 但 ssh 被拒 | 默认的 allow_all HBAC 规则已禁用,且该用户不在任何允许规则中 | ipa hbactest --user <AD用户>@<AD域> --host <主机> --service sshd 显示拦截的规则 |
| 管理台没有 Trusts 页 | 许可不含 AD 域信任模块 | 查看 status.json 的 mods |