FreeIPA 4.13 常用 CLI 命令与工具详解

FreeIPA 运维动线命令族实测:票据管理、用户组、主机证书、HBAC/sudo 策略、DNS、ipactl、ipa-backup/ipa-restore 恢复闭环与副本拓扑,583 个子命令的高频子集。

FreeIPAFreeIPAKerberos389 Directory Server2026/10/28

FreeIPA 4.13 常用 CLI 命令与工具详解

目标:按「认证票据 → 用户组 → 主机证书 → 策略 → DNS → 备份恢复 → 副本拓扑」的运维动线,逐条给出 FreeIPA 命令族的用法与真实回显。全部命令已在 Rocky Linux 9.3(ipa-server 4.13.4)+ Ubuntu 22.04 客户端实测执行。

一、环境信息

  • 服务端:Rocky Linux 9.3,ipa-server-4.13.4-1.el9_8,域 ipa.lab(realm IPA.LAB),主机 ipa1.ipa.lab(10.89.71.10)
  • 客户端:Ubuntu 22.04,freeipa-client 4.9.8 + sssd-tools,主机 client1.ipa.lab(10.89.71.20)
  • 管理员 admin / q1w2e3r4;实测用户 dev01/dev02(dev02 在备份恢复闭环中被回滚,见八、)
  • ipa CLI 基础版本(实测):ipa ping → IPA server version 4.13.4. API version 2.257

二、工具概览

FreeIPA 运维工具按使用位置分两类:

类别工具使用位置说明
管理 API 命令族ipa <plugin> <cmd>服务端/装了 ipa-client 的机器(凭 Kerberos 票据)一切配置操作的正规入口
全栈服务控制ipactl服务端9 个服务的依赖序启停
备份恢复ipa-backup / ipa-restore服务端全量/仅数据两种粒度
安装器ipa-server-install / ipa-client-install服务端/客户端0→1 与卸载
副本拓扑ipa-replica-manage / ipa topologysegment-find服务端复制链路管理
证书跟踪ipa-getcert服务端/客户端certmonger 跟踪签发
Kerberos 用户侧kinit / klist / kvno / kdestroy任意票据生命周期
客户端诊断sssctl / getent / sss_cache客户端SSSD 状态与缓存

ipa 命令自带帮助体系(实测):

ipa help topics | head -12
automember         Auto Membership Rules.
automount          Automount
cert               Identity mapping of certificates
config             Server configuration
...
ipa help commands | wc -l
583

583 个子命令构成全部管理面;下文只覆盖高频运维动线,参数细节用 ipa <topic> <cmd> --help 就地查。

三、前置条件

  • 服务端已安装且 ipactl status 全服务 RUNNING;客户端已入域
  • 管理操作前先取票据:kinit admin(口令 q1w2e3r4);票据默认 24h 有效(klist 可查到期)
  • 客户端命令需要 sss_cache -E 配合观察策略改动后的即时效果

四、各工具详解

4.1 Kerberos 票据管理(kinit/klist/kvno/kdestroy)

取票与查看(实测):

kinit admin
klist
Password for admin@IPA.LAB:
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: admin@IPA.LAB

Valid starting     Expires            Service principal
10/28/26 06:29:28  10/29/26 05:49:39  krbtgt/IPA.LAB@IPA.LAB

为指定服务取会话票据(实测,主机服务主体):

kvno host/client1.ipa.lab@IPA.LAB
host/client1.ipa.lab@IPA.LAB: kvno = 1

机器主体离线取票(keytab 免口令,DNS 动态更新等机器任务用,实测):

kinit -k 'host/client1.ipa.lab@IPA.LAB' -t /etc/krb5.keytab
klist | grep "Default principal"
Default principal: host/client1.ipa.lab@IPA.LAB

销毁票据(实测,无输出即成功):

kdestroy

4.2 用户管理(user-add/show/mod/find)

创建用户(--password 走 stdin 给初始口令,首登强制改密;实测):

ipa user-add dev01 --first=Dev --last=One --password

(提示 Password: 时输入 q1w2e3r4)回显(实测节选):

------------------
Added user "dev01"
------------------
  User login: dev01
  First name: Dev
  Last name: One
  Full name: Dev One
  Home directory: /home/dev01
  Login shell: /bin/sh
  Principal name: dev01@IPA.LAB

查询与修改(实测):

ipa user-show dev01 | grep -E "User login|Login shell"
ipa user-mod dev01 --shell=/bin/bash
  User login: dev01
  Login shell: /bin/sh
Modified user "dev01"
  Login shell: /bin/bash

条件查找(实测):

ipa user-find --all | grep "User login" | sort -u
  User login: admin
  User login: dev01

删除用户(实测,删除后 ipa user-show <name> 返回 user not found):

ipa user-del dev01
-------------------
Deleted user "dev01"
-------------------

4.3 组管理(group-add/add-member/show)

实测创建组并挂成员:

ipa group-add developers --desc="开发组"
ipa group-add-member developers --users=dev01
------------------------
Added group "developers"
------------------------
  Group name: developers
  Description: 开发组
Number of members added 1
ipa group-show developers
  Group name: developers
  Description: 开发组
  GID: 863200004
  Member users: dev01, dev02

客户端验证组成员关系下发(实测,groups=863200004(developers) 即域组生效):

getent passwd dev01 && id dev01
dev01:*:863200003:863200003:Dev One:/home/dev01:/bin/bash
uid=863200003(dev01) gid=863200003(dev01) groups=863200003(dev01),863200004(developers)

4.4 主机与服务证书(host-add / ipa-getcert)

登记主机条目(实测,含反向区域未托管的告警形态):

ipa host-add web01.ipa.lab --ip-address=10.89.71.30 --force
ipa: WARNING: The host was added but the DNS update failed with: DNS reverse zone 10.in-addr.arpa. for IP address 10.89.71.30 is not managed by this server
--------------------------
Added host "web01.ipa.lab"
--------------------------
ipa host-find | grep "Host name"
  Host name: client1.ipa.lab
  Host name: ipa1.ipa.lab
  Host name: web01.ipa.lab

客户端请求主机证书并跟踪自动续期(实测;目录需先存在,报 No such file or directory 时先 mkdir):

mkdir -p /etc/ipa/tls
ipa-getcert request -f /etc/ipa/tls/client1.crt -k /etc/ipa/tls/client1.key \
  -K host/client1.ipa.lab@IPA.LAB -D client1.ipa.lab
New signing request "20261028063411" added.

签发结果与跟踪状态(实测,证书落盘且进入自动续期监控):

ipa-getcert list -f /etc/ipa/tls/client1.crt | grep -E "status|subject|expires"
openssl x509 -in /etc/ipa/tls/client1.crt -noout -subject -dates
	status: MONITORING
	subject: CN=client1.ipa.lab,O=IPA.LAB
	expires: 2028-10-28 06:34:11 UTC
subject=O = IPA.LAB, CN = client1.ipa.lab
issuer=O = IPA.LAB, CN = Certificate Authority
notBefore=Oct 28 06:34:11 2026 GMT
notAfter=Oct 28 06:34:11 2028 GMT

服务端自查 9 个内置服务证书的跟踪状态(实测节选):

ipa-getcert list | grep -cE "^Request ID"
ipa-getcert list | grep -m1 -E "status|principal"
Number of certificates and requests being tracked: 9.
	status: MONITORING
	principal name: ldap/ipa1.ipa.lab@IPA.LAB

4.5 策略命令族(hbacrule / sudorule / pwpolicy / hbactest)

HBAC 规则四步构建与模拟(实测全量回显见《FreeIPA 4.13 配置参数详解》五、3):

ipa hbacrule-add dev_ssh_to_client --desc="dev01 SSH 到 client1"
ipa hbacrule-add-user dev_ssh_to_client --users=dev01
ipa hbacrule-add-host dev_ssh_to_client --hosts=client1.ipa.lab
ipa hbacrule-add-service dev_ssh_to_client --hbacsvcs=sshd
ipa hbactest --user=dev01 --host=client1.ipa.lab --service=sshd
--------------------
Access granted: True
--------------------
  Matched rules: dev_ssh_to_client

默认规则处置(实测):

ipa hbacrule-disable allow_all
------------------------------
Disabled HBAC rule "allow_all"
------------------------------

sudo 规则(实测):

ipa sudorule-add dev_all --desc="dev01 免密提权全部命令" --order=1
ipa sudorule-add-user dev_all --users=dev01
ipa sudorule-add-allow-command dev_all --sudocmds="all"
-------------------------
Added Sudo Rule "dev_all"
-------------------------
  Rule name: dev_all

组级密码策略(实测):

ipa pwpolicy-add developers --priority=1 --minlength=10 --maxlife=90 --history=5
  Group: developers
  Max lifetime (days): 90
  History size: 5
  Min length: 10
  Priority: 1

4.6 DNS 管理命令(dnszone / dnsrecord / nsupdate)

区域与记录(实测):

ipa dnszone-show ipa.lab | head -4
ipa dnsrecord-find ipa.lab client1
ipa dnsrecord-add web01.ipa.lab --a-rec=10.89.71.30
  Zone name: ipa.lab.
  Active zone: True
  Authoritative nameserver: ipa1.ipa.lab.
  Administrator e-mail address: hostmaster.ipa.lab.

  Record name: client1
  A record: 10.89.71.20

GSS-TSIG 动态更新(机器自更新自身记录,实测成功;注意区域策略默认 krb5-self,管理员代他机更新会被 REFUSED):

kinit -k 'host/client1.ipa.lab@IPA.LAB' -t /etc/krb5.keytab
nsupdate -g <<'EOF'
server 10.89.71.10
update delete client1.ipa.lab. A
update add client1.ipa.lab. 86400 A 10.89.71.20
send
EOF
dig +short @10.89.71.10 client1.ipa.lab A
nsupdate exit: 0
10.89.71.20

4.7 全栈服务控制(ipactl)

实测启停编排(重启示例):

ipactl restart
Restarting Directory Service
Restarting krb5kdc Service
Restarting kadmin Service
Restarting named Service
Restarting httpd Service
Restarting ipa-custodia Service
Restarting pki-tomcatd Service
Restarting ipa-otpd Service
Restarting ipa-dnskeysyncd Service
ipa: INFO: The ipactl command was successful

ipactl start/stop/status 同构;单服务粒度仍走 systemctl restart dirsrv@IPA-LAB 等(IPA 无聚合守护,ipactl 是编排器)。

4.8 备份与恢复(ipa-backup / ipa-restore)

全量备份(实测,产物落 /var/lib/ipa/backup/):

ipa-backup
Preparing backup on ipa1.ipa.lab
...
Starting IPA service
Backed up to /var/lib/ipa/backup/ipa-full-2026-10-28-06-33-28
The ipa-backup command was successful
ls -lh /var/lib/ipa/backup/ipa-full-2026-10-28-06-33-28/
total 7.8M
-rw-r--r-- 1 root root  155 Oct 28 06:32 header
-rw-r--r-- 1 root root 7.8M Oct 28 06:33 ipa-full.tar

恢复闭环实测:备份点之后创建的 dev02,恢复后应消失(命令需 DM 口令,-U 跳过覆写确认):

ipa-restore /var/lib/ipa/backup/ipa-full-2026-10-28-06-33-28 --password=q1w2e3r4 -U
Performing FULL restore from FULL backup
...
Restarting IPA services
Restoring umask to 18
The ipa-restore command was successful

恢复后三重验证(实测):

ipactl status | grep -c RUNNING
kinit admin
ipa user-find | grep "User login"
ipa user-show dev02
9
  User login: admin
  User login: dev01
ipa: ERROR: dev02: user not found

结论:9 服务全部恢复 RUNNING、票据体系正常、备份点之后的对象(dev02)被回滚、备份点之前的对象(dev01)保留——ipa-backup/ipa-restore 是域级「时光机」。

💡 技术拓展:恢复粒度二选一——全量恢复(默认,含配置+数据,服务全程停机)与仅数据恢复(--data,只回滚 LDAP 数据)。另外 ipa-restore --online 支持不停机数据恢复(仅限 --data 模式)。生产建议:配置变更前做全量备份,数据误删场景用 --data 快速回滚。

4.9 副本与拓扑(ipa-replica-manage / topologysegment)

单副本环境实测(回显即为基线状态):

ipa-replica-manage list
ipa1.ipa.lab: master
ipa topologysegment-find domain
------------------
0 segments matched
------------------

扩副本操作路径(命令+预期结果,需第二台 IPA 服务器):第二台安装 freeipa-server 后执行 ipa-replica-install --setup-ca --setup-dns --forwarder=223.5.5.5 --admin-password=q1w2e3r4 --principal=admin,预期进入与首台一致的 44 步配置流并在服务端 ipa topologysegment-find domain 出现 leftnode: ipa1.ipa.lab, rightnode: <新节点> 段记录;ipa config-show 的 IPA masters 同步列出两台。

4.10 客户端诊断(sssctl / sss_cache)

域状态与用户评估(实测;Ubuntu 需 apt-get install sssd-tools):

sssctl domain-status ipa.lab
Online status: Online

Active servers:
IPA: ipa1.ipa.lab
sss_cache -E && getent passwd dev01
dev01:*:863200003:863200003:Dev One:/home/dev01:/bin/bash

HBAC 端到端复核(实测;-s 指定 PAM 服务模拟):

sssctl user-checks dev01 -s sshd | grep pam_acct
pam_acct_mgmt: Success

规则外的 dev02 同命令返回 pam_acct_mgmt: Permission denied,与真实 SSH 行为(Connection closed by ::1 port 22)一致。

五、注意事项

  1. 票据先行:所有 ipa 命令依赖有效 Kerberos 票据,过期报 Cannot get KDC ticket;klist 确认、kinit 续取。
  2. 删除不可逆:user-del/host-del/hbacrule-del 无回收站;高危操作前先 ipa-backup(见 4.8 恢复闭环)。
  3. 策略生效有延迟面:服务端改动即时,客户端评估受 SSSD 缓存影响,排障先 sss_cache -E。
  4. ldappasswd 与 kpasswd 的策略边界:管理员重置不走密码质量检查且立即过期;用户自改走全量策略(实测对比见《FreeIPA 4.13 配置参数详解》五、2)。
  5. host-add --force 只建条目不验 DNS;配合 --ip-address 时留意反向区域告警(不影响主机条目创建)。

六、常见问题

Q1:ipa 命令报 cannot connect to 'https://ipa1.ipa.lab/ipa/xml'? 答:httpd 未运行或票据失效。ipactl status 看 httpd;kinit admin 重取票据。

Q2:ipa-restore 没传 -U 卡在确认? 答:覆写确认默认 [no]:,非交互场景(管道/脚本)直接 Aborted(实测回显 Restoring data will overwrite existing live data. Continue to restore? [no]: Aborted);加 -U 显式确认执行。

Q3:ipa-getcert request 报 No such file or directory? 答:certmonger 不自建输出目录,先 mkdir -p 指定路径再请求(实测见 4.4)。

Q4:备份在哪?多大? 答:/var/lib/ipa/backup/<类型-时间戳>/,全量含一个 tar(本实测环境 7.8MB,约 10 用户/3 主机规模)与 header;建议异地副本化该目录。

Q5:单台能跑 ipa-replica-install 吗? 答:不能,副本目标是第二台服务器;单机扩容路径是先加副本再做拓扑调整,命令与预期见 4.9。

七、参考链接