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 侧
IPA_SETUP_ADTRUST=true装了 adtrust。ipactl status里smb和winbind都 RUNNING。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 @localhost--skip-overlap-check 是因为 AD 域常与 IPA 域同在一个父域下,重叠检查会误拒。
建单向信任
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 拒绝 | HBAC 默认 allow_all 被禁了,或该用户不在任何允许规则里 | ipa hbactest --user <AD用户>@<AD域> --host <主机> --service sshd 看哪条规则拦的 |
| 管理台没有 Trusts 页 | 许可不含 AD 域信任模块 | 看 status.json 的 mods |