1. FreeIPA到底解决的是哪一类麻烦事如果你接手过一台以上的 Linux 服务器大概率经历过这种场面每台机器上都有各自的/etc/passwd加个运维同事要在五台机器上分别useradd改个密码要挨个passwd谁离职了还得挨个删账号删漏一台就是安全隐患。机器少的时候还能忍一旦上了十几台、几十台纯手工维护账号就开始变成灾难。FreeIPA 就是冲着这个问题来的——它把这堆分散的账号、认证、授权、策略集中到一个地方统一管理让一个账号通行整个内网这件事真正落地。我最初接触 FreeIPA 是在一个内部测试环境里当时手上大概二十来台机器混着物理机和虚拟机同事之间共享账号靠的是口头传递密码sudo 权限靠的是直接往/etc/sudoers里加行。这种状态在审计面前基本是不及格的。后来换成 FreeIPA 之后账号、认证、主机准入、sudo 规则全都收到一个控制台上改一次全局生效。这篇先讲单节点的完整搭建过程把服务端跑起来、把一个客户端纳管进来这是所有后续操作的地基地基没打稳后面做副本、做策略全是空谈。1.1 先搞清楚 FreeIPA 不是一个软件而是一整套组件的打包这是很多人第一次接触 FreeIPA 时最大的误解。你yum install freeipa-server装下来的不是一个程序而是把五个原本各自独立的服务捏在了一起用一个统一的命令行和 Web 界面来管。理解这个拼图后面的报错你才知道该去翻哪个日志。389 Directory Server承担 LDAP 的角色存用户、组、主机、策略这些结构化数据。它才是真正的数据库。Kerberos KDC负责认证签发票据。你登录时那套先拿 TGT、再换服务票据的流程全靠它。Dogtag Certificate System内置 CA负责签发主机证书、用户证书。Kerberos 和 LDAP 之间的 TLS 通信都依赖它。BIND 与自定义插件DNS 服务而且做了 IPA 专属的扩展能自动维护服务发现用的 SRV 记录。SSSD这个装在客户端侧负责在客户端本地做缓存、对接 Kerberos 和 LDAP让系统能用上域账号。这五个组件耦合得非常紧好处是你装一个命令就把整套跑起来了坏处是任何一个组件出问题都可能让整个服务瘫掉。比如时间不同步会先搞挂 KerberosKerberos 挂了认证全废但你表面上看到的现象可能只是登录不上。1.2 Kerberos 的票据机制决定了它对时间有多敏感Kerberos 认证有个硬性前提客户端和服务端的时间差不能超过默认的 5 分钟可调但强烈不建议调大。原因是票据里带了时间戳和有效期服务端要靠时间戳判断票据是否被重放攻击。如果两边时间对不齐你会看到一个非常经典的报错krb5_get_init_creds: Clock skew too great这个报错翻译过来就是时钟偏差过大。很多新手把它当成配置错误反复改 krb5.conf其实根子在于 chrony 或 systemd-timesyncd 没配好。所以我在搭建流程里永远把时间同步放在第一步而不是最后一步。这一步做扎实后面能省掉至少一半的玄学报错。1.3 什么场景该上 FreeIPA什么场景上是杀鸡用牛刀不是所有环境都值得折腾 FreeIPA。我的判断标准很朴素场景特征是否推荐原因Linux 主机 10 台以上需要统一账号推荐集中管理的收益开始超过维护成本需要 sudo 规则、HBAC 主机准入策略推荐这些是 FreeIPA 的强项手写 sudoers 很难规模化有 Kerberos 单点登录需求推荐自带 KDC省去单独搭 Kerberos 的功夫只有两三台机器且都是单用户不推荐直接每台useradd更省事全 Windows 环境不推荐那是 AD 的地盘硬上 FreeIPA 会很拧巴对于纯 Linux 内网或者以 Linux 为主、少量 Windows 的环境FreeIPA 的性价比非常高。如果企业里已经有既成的 AD 域那通常的玩法是让 FreeIPA 和 AD 建立信任关系两边账号互通但这个属于进阶话题得等单节点服务端稳稳跑起来之后再考虑。2. 动手前的规划域名、主机名和网络这三样定错了就白搭FreeIPA 搭建最坑的地方在于它的域名和主机名在安装那一刻就被写死进了证书、Kerberos 领域和 LDAP 后缀里装完之后想改基本等于重装。所以我每次动手前都会先花十分钟把这几样东西定死写在纸上再敲命令。很多装到一半失败客户端加不进来的问题根子都在规划阶段就埋下了。2.1 域名和主机名的命名规则不是随便起的先说域名。FreeIPA 会用它来做两件事一是 Kerberos 的 realm领域二是 LDAP 的 base DN。举例来说如果你把域名定为example.comKerberos realm 就是EXAMPLE.COM大写LDAP base DN 就是dcexample,dccom服务端主机名最好是ipa.example.com这里有个非常关键的坑不要用已经被公网正在使用的真实域名。因为 FreeIPA 会接管这个域名的 DNS 解析如果你用的是example.com这种真实存在的域你的 DNS 转发会把内网解析污染甚至导致这台机器访问不了外网。我一般用一个明确的内部子域比如ipa.lab.local或者intra.example.internal一眼就能看出是内网专用。主机名必须是FQDN全限定域名也就是带完整域名的形式不能是ipa这种短主机名。而且这个 FQDN 必须能被正确解析到本机 IP。Kerberos 的工作原理决定了它对主机名的解析结果极度依赖——它会拿主机名去反查 IP拿 IP 去反查主机名任何一环对不上都会报Server not found in Kerberos database。我的习惯是先在/etc/hosts里写死一条确保本机自己解析自己永远是对的# /etc/hosts 关键行示例 192.168.10.10 ipa.example.com ipa注意顺序FQDN 在前短名在后。这个顺序会影响一些程序拿到的规范主机名弄反了偶尔会遇到诡异问题。2.2 时间同步是所有认证服务的地基前面提过 Kerberos 对时间敏感这里把具体做法说清楚。现代发行版基本都用 chrony 了配置文件在/etc/chrony.conf。如果你的环境里已经有一台内网 NTP 服务器让它同步到那台即可# 指定内网时间源iburst 让首次同步更快 server ntp.internal.local iburst # 允许本机作为时间源对外提供服务可选服务端需要 allow 192.168.10.0/24 # 本机时间偏差太大时头几次同步直接步进调整而不是慢慢校准 makestep 1.0 3配好之后重启服务并立即校时systemctl enable --now chronyd chronyc makestep chronyc sources -v # 看到 asterisk 标记的源即为当前使用的时间源这里提醒一句服务端和所有客户端必须指向同一套时间源。我见过最离谱的一次排错是服务端同步到内网 NTP客户端却还在同步公网池两边差了将近一分钟结果客户端kinit一直失败查了半天才发现是时间问题。2.3 操作系统和资源选型FreeIPA 官方主要支持 RHEL 系所以 Rocky Linux、AlmaLinux、CentOS Stream、Oracle Linux 都能直接dnf装上。Debian/Ubuntu 系也有包但版本通常滞后踩坑概率高一些。我自己的首选是Rocky Linux 9 或 AlmaLinux 9包新、社区活跃、文档全。资源方面单节点服务端给到2 核 4G 内存、20G 磁盘是比较舒服的配置。最低 2 核 2G 也能跑但一旦用户数量上去、又开了 DNS 和 CA内存会比较吃紧。磁盘主要是 389 Directory Server 的数据库和日志加上 CA 的证书库20G 起步、留出增长空间比较稳妥。提示主机名FQDN在安装前必须已经配好并且能自解析这一步没做完不要往下走。安装脚本会校验校验不过会直接退回。3. 单节点服务端安装从系统初始化到 ipa-server-install 跑通规划定好之后就可以正式动手了。整个安装过程可以拆成四步系统层初始化、装包、跑安装脚本、验证。每一步我都会说明为什么这么做因为照抄命令很容易但出了错能不能自己定位取决于你知不知道这些命令背后在干什么。3.1 系统层初始化防火墙、SELinux 和主机名FreeIPA 需要用到一堆端口最核心的几个必须放行端口/协议用途80/tcp、443/tcpWeb 管理界面与证书服务389/tcp、636/tcpLDAP 与 LDAPS88/tcp、88/udpKerberos 认证464/tcp、464/udpKerberos 改密53/tcp、53/udpDNS启用内置 DNS 时123/udpNTP如本机提供时间服务用 firewalld 直接放行最省事的做法是启用freeipa-4这个预定义服务# 设置主机名永久生效 hostnamectl set-hostname ipa.example.com # 放行 FreeIPA 需要的服务 firewall-cmd --permanent --add-servicefreeipa-4 firewall-cmd --permanent --add-servicedns firewall-cmd --reload firewall-cmd --list-all关于 SELinux我的建议是保持 enforcing 不要关。FreeIPA 官方提供了完整的 SELinux 策略正常安装是兼容的。很多人一遇到报错就setenforce 0结果把真正的根因掩盖了等上线之后 SELinux 一开又炸。如果确实怀疑是 SELinux 拦的用ausearch -m avc -ts recent看审计日志能精确定位到是哪条规则的问题。# 查看近期 SELinux 拒绝记录比盲目关闭强得多 ausearch -m avc -ts recent3.2 安装包与安装脚本参数逐项拆解装包很简单dnf install -y freeipa-server freeipa-server-dns bind-dyndb-ldapfreeipa-server-dns和bind-dyndb-ldap是启用内置 DNS 时才需要如果你环境里已经有成熟 DNS 且不打算让 IPA 接管可以不装。接下来是重头戏ipa-server-install。这个脚本的参数看着多其实核心就那么几个我逐个解释ipa-server-install \ --realmEXAMPLE.COM \ --domainexample.com \ --hostnameipa.example.com \ --setup-dns \ --forwarder223.5.5.5 \ --forwarder119.29.29.29 \ --no-ntp \ --ds-password你的目录管理密码 \ --admin-password你的admin密码 \ --unattended--realmKerberos 领域名习惯用域名大写。--domainDNS 域名决定 LDAP base DN。--hostname本机 FQDN必须和hostnamectl设的一致。--setup-dns启用内置 DNS 并自动创建服务发现用的 SRV 记录。如果不启用后续客户端接入会麻烦很多得手动维护 SRV 记录。--forwarderDNS 转发地址。IPA 的 DNS 只管自己的域其他域名查询转发给上游。这里我填了两个公共 DNS 作为示例实际请换成你环境里可用的上游解析。--no-ntp不让 IPA 去配置 NTP。因为我们前面已经用 chrony 配好了让它再配一遍容易冲突。如果你环境里没有单独的时间服务去掉这个参数让 IPA 自己管也可以。--ds-passwordDirectory Server 的目录管理密码内部用。--admin-passwordadmin 这个管理账号的密码是你日常操作要用的那个。--unattended无人值守模式所有参数从命令行取不再交互问答。密码策略方面默认要求至少 8 位、包含大小写和数字太简单的密码会被直接拒掉。3.3 安装过程中你可能遇到的交互和日志如果你不加--unattended脚本会一步步问你包括是否配置 DNS、转发地址填什么、密码设什么。新手第一次装我反而建议先不加 unattended完整走一遍交互流程每个问题都看清楚它在问什么对理解整个体系有帮助。第二次之后再上 unattended 自动化。安装过程大概会持续几分钟屏幕上会滚动一堆步骤比如配置 Directory Server、配置 Kerberos KDC、配置 CA、配置 DNS、重启各服务。任何一步失败它会明确告诉你卡在哪日志主要在/var/log/ipaserver-install.log。出问题第一时间去看这个日志的尾部比在网上瞎搜快得多。安装成功的标志是最后输出一段The ipa-server-install command was successful并且给出一堆后续提示。3.4 安装后验证三步确认服务端真的活了装完之后别急着往下走先做三件验证确认地基是稳的。第一看整体服务状态ipactl status正常的话Directory、KDC、Kadmin、httpd、named如果开了 DNS、pki-tomcatd 这些服务应该全是RUNNING。有任何一个STOPPED都说明有问题。第二拿 admin 去申请一张 Kerberos 票据验证 KDC 工作正常kinit admin klist输入 admin 密码后klist应该能看到一张krbtgt/EXAMPLE.COMEXAMPLE.COM的票据。这一步能过说明 Kerberos 认证链路是通的也是后面客户端能加进来的前提。第三用 ipa 命令行工具查一下ipa user-find admin ipa config-show能正常返回说明 LDAP 和 API 都活了。另外可以打开浏览器访问https://ipa.example.com/ipa/ui用 admin 登录 Web 界面看看图形化管理在批量操作时比命令行直观。提示首次kinit admin成功后票据默认有效期 24 小时之后需要重新 kinit。这点在跑自动化脚本时要注意票据过期会导致脚本中途失败。4. 把一台客户端纳管进来ipa-client-install 的完整链路服务端自己跑起来只是第一步真正体现价值的是把其他机器纳管进来让域账号能在这些机器上登录。这个过程叫enroll登记核心命令是ipa-client-install。我在这一步踩过的坑比服务端安装还多所以单独拎出来讲。4.1 客户端接入前的准备客户端也有几个前置条件和服务端类似但更简单主机名要配成 FQDN、时间要和服务端对齐、能解析到服务端的域名。如果服务端开了内置 DNS把客户端的 DNS 指向服务端即可# 客户端 /etc/resolv.conf 或网络配置里指定 nameserver 192.168.10.10预检一下解析和连通性getent hosts ipa.example.com ping -c 2 ipa.example.com如果解析不到说明 DNS 链路没通这时候不要去跑 enroll先把 DNS 弄明白。客户端纳管失败十有八九是域名解析或时间同步的问题。4.2 一条命令完成纳管准备就绪后一条命令搞定ipa-client-install \ --domainexample.com \ --serveripa.example.com \ --mkhomedir \ --principaladmin \ --password你的admin密码 \ --unattended这里的参数值得说说--mkhomedir强烈建议加上。不加的话域用户首次登录时家目录不会自动创建登录会失败或者进到一个没有家目录的别扭状态。--principal/--password用 admin 账号执行登记操作。生产环境更推荐用一次性注册密码比直接用 admin 密码安全但入门阶段用 admin 更直观。--server指定服务端。如果 DNS 里 SRV 记录配好了其实可以省略让客户端自动发现。执行过程它会自动化一堆事配置/etc/krb5.conf、配置 SSSD、配置/etc/sssd/sssd.conf、把主机加入 IPA、申请主机证书、配置 NSS/PAM 走 SSSD。跑完会提示Client configuration complete。4.3 SSSD 在客户端到底做了什么很多人纳管完不知道 SSSD 是什么只知道账号能登录了。理解 SSSD 的角色对排错特别重要。SSSD 是客户端和 IPA 服务端之间的中间层它干的事主要有三件身份解析当系统要查一个用户比如id zhangsanNSS 会去问 SSSDSSSD 从 IPA 的 LDAP 里取数据缓存到本地。认证代理用户登录时PAM 会通过 SSSD 去 Kerberos 拿票据验证密码。离线缓存把用户和凭据缓存到本地即使服务端暂时不可达已经登录过的用户也能用缓存继续登录可配有效期。所以客户端侧的配置文件主要是两个/etc/krb5.confKerberos 客户端配置和/etc/sssd/sssd.confSSSD 配置。排查客户端问题时先systemctl status sssd再看/var/log/sssd/下的日志。4.4 验证登录并让 sudo 策略生效纳管完成后先在服务端创建一个测试用户kinit admin ipa user-add zhangsan --firstSan --lastZhang --password这里的--password会提示你交互式输入初始密码。创建完之后回到客户端验证id zhangsan su - zhangsan如果id能查出用户信息、su能成功登录并且自动进了家目录那客户端纳管就算彻底跑通了。sudo 规则是 FreeIPA 的一大亮点你在服务端定义哪些用户能在哪些主机上以什么身份执行什么命令客户端通过 SSSD 拉到本地生效完全不用手改/etc/sudoers。入门阶段可以先建一条最简单的规则让测试用户能全权限 sudo验证链路通了再精细化。这块内容展开会很长留到后续文章细讲。5. 搭建阶段最容易翻车的几个地方上面给的是理想路径但实际操作中几乎不可能一次全过。这一节我把多年踩过的坑整理出来每个都给出现象、根因、定位办法、解法方便你按图索骥。5.1 主机名解析不一致安装脚本中途退出现象ipa-server-install跑到一半报错提示主机名无法解析或和预期不符。根因多半是/etc/hosts里主机名和 IP 对不上或者 hostname 设成了短名。脚本会做正反解析校验任何一环不一致就退出。定位跑hostname -f看是不是 FQDN再getent hosts $(hostname -f)看解析结果。解法把/etc/hosts里那条 FQDN 记录改成正确的hostnamectl set-hostname重设主机名然后重新跑安装脚本。5.2 内置 DNS 和现有环境冲突现象启用--setup-dns后这台机器上不了外网或者内网其他域名的解析全乱了。根因IPA 的 BIND 接管了 DNS如果--forwarder没配好非本域的查询没有出口自然解析不了。或者你用的域名和真实公网域名撞了。定位在服务端上dig localhost www.some-public-site.com看能不能出结果再检查--forwarder的地址是否真的可用。解法用可用的上游解析地址并且坚持用内部专用域名而非真实公网域名。如果环境里本来就有成熟 DNS宁可不用 IPA 内置 DNS单独让现有 DNS 去维护 SRV 记录。5.3 端口没放行导致的服务活着但客户端连不上现象服务端ipactl status一切正常但客户端 enroll 失败或者 enroll 成功却登录不了。根因防火墙只放行了部分端口客户端访问某个必需端口被拦。最常见的是 88/udp 或 464 被漏掉。定位客户端上直接测端口连通性比如nc -vz ipa.example.com 88逐个端口确认。解法确认firewall-cmd --list-all里freeipa-4服务已放行。如果中间有网络设备也要检查 ACL 是否放行了这些端口。5.4 证书相关的报错现象安装到最后 CA 配置阶段失败日志里有Certificate operation failed之类的字样。根因常见原因是服务端主机名和证书里的名字对不上或者之前装过一次没清理干净残留的证书和配置冲突。定位看/var/log/ipaserver-install.log里 CA 相关那段同时ls /etc/pki/pki-tomcat/看有没有残留。解法如果是残留问题彻底清理后重装见下一节。如果是主机名问题回头检查 FQDN 配置。5.5 重复安装前的彻底清理现象装失败了想重装结果一遍遍失败报各种already exists。根因ipa-server-install装到一半失败会留下部分配置和证书不会自动清理直接重跑必然撞车。解法用官方提供的卸载脚本彻底清理然后才能重装ipa-server-install --uninstall -U如果卸载脚本也跑不起来就得手工清停掉相关服务、删掉/etc/dirsrv、/etc/pki/pki-tomcat、/var/lib/dirsrv、/var/lib/pki下的相关目录、清掉/etc/krb5.conf和/var/kerberos/krb5kdc。手工清理务必小心删错会影响系统其他服务。提示清理前先确认这台机器没有跑其他依赖 LDAP 或 Kerberos 的服务避免误伤。6. 单节点起来之后日常操作与下一步扩展方向服务端加客户端跑通你把 FreeIPA 的最小可用单元搭好了。接下来是把它用起来以及规划怎么从这个单点走向一个更稳、更完整的体系。这一节我把最常用的日常操作和后续扩展方向理一理让你心理有张地图。6.1 用户、组、主机准入和 sudo 规则的日常操作日常管理所有的命令都以ipa开头先kinit admin拿到票据再操作。几个高频命令操作命令示例建用户ipa user-add zhangsan --firstSan --lastZhang改密码ipa passwd zhangsan建用户组ipa group-add dev-team --desc研发组用户入组ipa group-add-member dev-team --userszhangsan建主机ipa host-add web01.example.com定义主机准入ipa hbacrule-add allow-dev定义 sudo 规则ipa sudorule-add dev-sudo --hostcatallHBACHost Based Access Control值得单独说一句它控制哪类用户能从哪台主机登录是 FreeIPA 相比裸 LDAP 的一大优势。默认有一条allow_all规则放行所有人生产环境上线前一定要把它禁掉改成白名单式否则等于没有准入控制。6.2 备份与恢复别等出事才想起单节点的最大风险就是单点。这台服务端一挂整个内网认证全停。所以哪怕暂时不做副本备份也必须安排上。FreeIPA 自带备份工具# 备份全部数据 CA 配置 ipa-backup # 备份时压缩并静默 ipa-backup --gzip --online # 恢复 ipa-restore /var/lib/ipa/backup/ipa-full-xxxx备份出来的东西在/var/lib/ipa/backup/下一定要定期复制到别的地方放在同一台机器上等于没备份。恢复操作比较重会重启所有服务建议在测试环境先演练一遍别等真出事才第一次用。6.3 后续可以扩展的几个方向单节点跑稳之后有几个自然的演进方向每一个都够单独写一篇加副本replica再起一台机器做副本实现认证服务的高可用主挂了副本顶上。这是从能跑到敢上生产的关键一步。与企业现有目录服务建立信任如果公司已经有 Windows 域环境可以让 FreeIPA 和它建立信任关系两边账号互通避免维护两套账号。这个配置比较讲究需要单独规划。自动化接入把ipa-client-install封装成脚本或配置管理模块新机器上线自动纳管省去手工操作。集成证书认证利用内置 CA 签发用户证书实现基于证书的登录智能卡之类安全等级更高。审计与日志集中把 IPA 的认证日志、操作日志集中收集满足合规审计要求。我个人在实际操作中的体会是别急着追求高可用和大而全先把单节点加两三个客户端彻底跑顺、把日常的建用户建组操作练熟再去碰副本和信任。很多人一上来就想一步到位搞双节点加信任结果基础没打牢出了问题连锁反应排查起来手忙脚乱。把这一篇的服务端安装和客户端纳管踏踏实实做完、验证过你就有了一个可以正常运转的身份管理中枢剩下的都是在这个地基上往上盖楼的事。下一篇我会把副本部署和日常批量管理的实操细节展开讲那才是真正让它扛起生产流量的阶段。