10 — 日常运维命令速查

10.1 容器操作

# 容器管理
docker start freeipa-server          # 启动容器
docker stop freeipa-server           # 停止容器
docker restart freeipa-server        # 重启容器
docker logs -f freeipa-server        # 查看日志(实时)
docker logs --tail 100 freeipa-server # 查看最近 100 行日志
docker exec -it freeipa-server bash  # 进入容器 Shell
 
# 状态检查
docker ps | grep freeipa             # 容器是否运行
docker stats freeipa-server          # 资源使用情况
 
# 容器内 IPA 服务管理
docker exec freeipa-server ipactl status   # 查看服务状态
docker exec freeipa-server ipactl start    # 启动所有服务
docker exec freeipa-server ipactl stop     # 停止所有服务
docker exec freeipa-server ipactl restart  # 重启所有服务

10.2 Kerberos 认证

# 获取票据(进入容器后或客户端执行)
echo "PASSWORD" | kinit admin        # admin 认证
kinit zhangsan                        # 普通用户认证(交互输入密码)
klist                                 # 查看当前票据
klist -A                              # 查看所有票据详情
kdestroy                              # 销毁当前票据
kinit -R                              # 续期票据
 
# 修改密码
kpasswd                               # 修改自己的 Kerberos 密码
kpasswd zhangsan                      # 修改他人密码(需 admin 权限)
ipa passwd zhangsan                   # IPA 方式修改密码
 
# 密码策略相关
kadmin.local -q "getprinc admin"      # 查看 principal 详情(需在 IPA 服务器上)

10.3 用户管理命令速查

# ─── 查找 ───
ipa user-find                                    # 列出所有用户
ipa user-find --last=张                            # 按姓查找
ipa user-find --first=三                           # 按名查找
ipa user-find zhangsan                            # 精确查找
ipa user-find --disabled=true                     # 查找已禁用的用户
ipa user-find --disabled=false                    # 查找未禁用的用户
 
# ─── 查看 ───
ipa user-show zhangsan                            # 用户概要
ipa user-show zhangsan --all                      # 用户全部属性
ipa user-show zhangsan --raw                      # 原始 LDAP 属性
 
# ─── 创建/修改/删除 ───
ipa user-add username --first=名 --last=姓         # 创建用户
ipa user-add username --first=名 --last=姓 --password  # 带密码创建
ipa user-mod zhangsan --title="新职务"              # 修改用户信息
ipa user-mod zhangsan --password                  # 修改用户密码
ipa user-del zhangsan                             # 删除用户
ipa user-del zhangsan --preserve                  # 删除(保留 home 目录)
 
# ─── 状态管理 ───
ipa user-enable zhangsan                          # 启用用户
ipa user-disable zhangsan                         # 禁用用户
ipa user-unlock zhangsan                          # 解锁用户
ipa user-status zhangsan                          # 查看用户状态
 
# ─── 高级 ───
ipa user-mod zhangsan --sshpubkey="ssh-rsa AAAA..." # 添加 SSH 公钥
ipa user-mod zhangsan --setattr=krbPasswordExpiration="20261231000000Z" # 设置密码过期

10.4 用户组管理命令速查

# ─── 查找/查看 ───
ipa group-find                                    # 列出所有组
ipa group-show developers                         # 查看组详情
ipa group-show developers --all                   # 全部属性
 
# ─── 创建/删除 ───
ipa group-add groupname --desc="描述"              # 创建组
ipa group-del groupname                           # 删除组
 
# ─── 成员管理 ───
ipa group-add-member developers --users=zhangsan  # 添加用户到组
ipa group-add-member developers --users={u1,u2}   # 批量添加用户
ipa group-add-member developers --groups=ops      # 添加子组
ipa group-remove-member developers --users=zhangsan # 移除用户
 
# ─── 成员查询 ───
ipa group-show developers                         # 查看组成员
ipa user-show zhangsan | grep "Member of"         # 查看用户属于哪些组

10.5 主机管理命令速查

# ─── 查找/查看 ───
ipa host-find                                     # 列出所有主机
ipa host-find --managing=ipa-local.thinkmeta.site  # 查找某服务器管理的主机
ipa host-show dev.thinkmeta.site                  # 主机详情
ipa host-show dev.thinkmeta.site --all            # 全部属性
 
# ─── 状态管理 ───
ipa host-disable dev.thinkmeta.site               # 禁用主机
ipa host-enable dev.thinkmeta.site                # 启用主机
ipa host-del dev.thinkmeta.site                   # 删除主机
 
# ─── 主机组 ───
ipa hostgroup-find                                # 列出所有主机组
ipa hostgroup-add dev-servers --desc="开发服务器"   # 创建主机组
ipa hostgroup-add-member dev-servers --hosts=dev.thinkmeta.site  # 添加主机
ipa hostgroup-remove-member dev-servers --hosts=dev.thinkmeta.site # 移除主机

10.6 HBAC 规则命令速查

# ─── 查找/查看 ───
ipa hbacrule-find                                 # 列出所有 HBAC 规则
ipa hbacrule-show dev-access                      # 查看规则详情
 
# ─── 创建/删除 ───
ipa hbacrule-add rule-name --desc="描述"           # 创建规则
ipa hbacrule-del rule-name                        # 删除规则
 
# ─── 规则配置 ───
ipa hbacrule-add-user rule-name --users=zhangsan  # 添加用户
ipa hbacrule-add-user rule-name --groups=dev      # 添加用户组
ipa hbacrule-add-host rule-name --hosts=hostname  # 添加主机
ipa hbacrule-add-host rule-name --hostgroups=hg   # 添加主机组
ipa hbacrule-add-service rule-name --hbacsvcs=sshd # 添加服务
 
# ─── 启用/禁用 ───
ipa hbacrule-enable rule-name                     # 启用规则
ipa hbacrule-disable rule-name                    # 禁用规则
 
# ─── 测试 ───
ipa hbactest --user=zhangsan --host=dev.thinkmeta.site --service=sshd

10.7 Sudo 规则命令速查

# ─── 查找/查看 ───
ipa sudorule-find                                 # 列出所有 sudo 规则
ipa sudorule-show rule-name                       # 查看规则详情
 
# ─── 创建/删除 ───
ipa sudorule-add rule-name --desc="描述"           # 创建规则
ipa sudorule-del rule-name                        # 删除规则
 
# ─── 规则配置 ───
ipa sudorule-add-allow-command rule --sudocmds=ALL           # 允许所有命令
ipa sudorule-add-allow-command rule --sudocmds="/usr/bin/apt" # 允许特定命令
ipa sudorule-add-user rule --users=zhangsan                   # 关联用户
ipa sudorule-add-user rule --groups=ops                       # 关联用户组
ipa sudorule-add-host rule --hosts=hostname                   # 关联主机
ipa sudorule-add-host rule --hostcat=all                      # 关联所有主机
ipa sudorule-add-option rule --sudooption='!authenticate'      # 免密码
 
# ─── 命令管理 ───
ipa sudocmd-find                                  # 列出所有命令
ipa sudocmd-add "/usr/bin/systemctl restart *"    # 添加命令

10.8 DNS 管理命令速查

# ─── DNS 区域管理 ───
ipa dnszone-find                                  # 列出所有 DNS 区域
ipa dnszone-show thinkmeta.site                   # 查看区域详情
ipa dnszone-add newzone.local                     # 添加新区域
 
# ─── DNS 记录管理 ───
ipa dnsrecord-find thinkmeta.site                 # 列出区域所有记录
ipa dnsrecord-show thinkmeta.site ipa-local       # 查看特定记录
 
# ─── 添加 A 记录 ───
ipa dnsrecord-add thinkmeta.site new-host --a-rec=192.168.3.105
 
# ─── 添加 CNAME ───
ipa dnsrecord-add thinkmeta.site www --cname-rec=ipa-local
 
# ─── 删除记录 ───
ipa dnsrecord-del thinkmeta.site new-host --del-all

10.9 证书管理命令速查

# ─── 查看证书 ───
ipa cert-find                                     # 列出所有证书
ipa cert-find --hostname=dev.thinkmeta.site       # 按主机查证书
ipa cert-show 1                                   # 查看特定证书
 
# ─── 撤销证书 ───
ipa cert-revoke 0x0012 --revocation-reason=6      # 撤销证书
 
# ─── CA 管理 ───
ipa ca-find                                       # 列出 CA
ipa ca-show ipa                                   # 查看 IPA CA
 
# ─── 客户端证书管理 ───
getcert list                                      # 查看本机追踪的证书
getcert resubmit -i <id>                          # 手动续期证书
 
# ─── 服务证书签发 ───
ipa service-add HTTP/wiki.thinkmeta.site          # 创建服务主体
ipa-getcert request -f cert.pem -k key.pem -N CN=wiki.thinkmeta.site -K HTTP/wiki.thinkmeta.site

10.10 客户端管理命令速查

# ─── SSSD 管理 ───
sudo systemctl status sssd                        # 查看 SSSD 状态
sudo systemctl restart sssd                       # 重启 SSSD
sudo sss_cache -E                                 # 清空 SSSD 缓存(全清)
sudo sss_cache -u zhangsan                        # 清空特定用户缓存
sudo sss_cache -g developers                      # 清空特定组缓存
 
# ─── 用户查询 ───
id zhangsan                                       # 查看用户 UID/GID
getent passwd zhangsan                            # 查看用户条目
getent group developers                           # 查看组条目
 
# ─── 客户端订阅/注销 ───
sudo ipa-client-install --uninstall               # 从域中移除
sudo ipa-client-install --domain=... --server=... --realm=... --mkhomedir  # 重新注册
 
# ─── 查看客户端 keytab ───
sudo klist -k /etc/krb5.keytab                    # 查看 keytab 条目
sudo ipa-getkeytab -s ipa-local.thinkmeta.site -p host/dev.thinkmeta.site -k /tmp/host.keytab  # 获取 keytab

10.11 故障排查速查

# ─── 服务状态 ───
docker exec freeipa-server ipactl status          # IPA 服务状态
docker exec freeipa-server systemctl status dirsrv@THINKMETA-SITE  # LDAP 状态
docker exec freeipa-server systemctl status krb5kdc  # Kerberos 状态
 
# ─── 日志查看 ───
docker logs --tail 200 freeipa-server 2>&1 | grep ERROR
docker exec freeipa-server tail -f /var/log/dirsrv/slapd-THINKMETA-SITE/errors
docker exec freeipa-server tail -f /var/log/krb5kdc.log
docker exec freeipa-server journalctl -u certmonger -f
 
# ─── DNS 诊断 ───
dig @192.168.3.90 _ldap._tcp.thinkmeta.site SRV    # 测试 SRV 记录
dig @192.168.3.90 ipa-local.thinkmeta.site         # 测试正向解析
dig @192.168.3.90 -x 192.168.3.90                  # 测试反向解析
 
# ─── Kerberos 诊断 ───
klist -A                                           # 查看票据详情
kvno host/dev.thinkmeta.site                       # 验证服务票据
 
# ─── 客户端诊断 ───
sudo journalctl -u sssd -n 100                     # SSSD 最近日志
sudo sssctl domain-status thinkmeta.site           # 域状态
realm list                                         # 查看域信息

10.12 常用运维脚本模板

每日巡检脚本

#!/bin/bash
# daily-check.sh — 每日巡检
 
echo "=== FreeIPA 每日巡检 - $(date) ==="
echo ""
 
# 1. 容器状态
if docker ps | grep -q freeipa-server; then
  echo "✓ 容器运行中"
else
  echo "✗ 容器未运行!"
fi
 
# 2. IPA 服务
SERVICES=$(docker exec freeipa-server ipactl status 2>/dev/null | grep -c "RUNNING")
if [ "$SERVICES" -ge 5 ]; then
  echo "✓ IPA 核心服务正常"
else
  echo "✗ IPA 服务异常 ($SERVICES 个运行中)"
fi
 
# 3. Kerberos
if docker exec freeipa-server bash -c "echo 'YourAdminPassword' | kinit admin" 2>/dev/null; then
  echo "✓ Kerberos 认证正常"
else
  echo "✗ Kerberos 认证失败"
fi
 
# 4. 磁盘空间
DISK_USAGE=$(df -h /data/docker-space/ | tail -1 | awk '{print $5}' | tr -d '%')
echo "  数据目录磁盘使用: ${DISK_USAGE}%"
 
# 5. 即将过期证书
EXPIRING=$(docker exec freeipa-server ipa cert-find --validnotafter-to="$(date -u -d '+30 days' +%Y-%m-%d)" 2>/dev/null | grep "Serial number" | wc -l)
echo "  30天内过期证书: $EXPIRING 张"
 
echo ""
echo "=== 巡检结束 ==="

批量用户创建模板

#!/bin/bash
# bulk-user-create.sh
 
# CSV 格式:username,firstname,lastname,password,department
while IFS=',' read -r username first last password dept; do
  [[ "$username" =~ ^#.* ]] && continue  # 跳过注释行
  [[ -z "$username" ]] && continue       # 跳过空行
  
  echo "创建: $username ($last$first)"
  ipa user-add "$username" \
    --first="$first" \
    --last="$last" \
    --password="$password"
  
  ipa group-add-member "$dept" --users="$username" 2>/dev/null
done < users.csv

批量密码重置

#!/bin/bash
# bulk-password-reset.sh
 
USERS=("zhangsan" "lisi" "wangwu")
NEW_PASSWORD="TempPass123"
 
for user in "${USERS[@]}"; do
  echo "重置密码: $user"
  echo -e "${NEW_PASSWORD}\n${NEW_PASSWORD}" | ipa passwd "$user"
  # 强制下次登录修改密码
  ipa user-mod "$user" --setattr=krbPasswordExpiration="$(date -u +%Y%m%d%H%M%SZ -d '+1 day')"
done

10.13 快速参考卡片

┌─────────────────────────────────────────────────────────┐
│                  FreeIPA 运维速查卡                        │
├─────────────────────────────────────────────────────────┤
│ Web UI:    https://192.168.3.90                          │
│ 域名:      thinkmeta.site                                │
│ Realm:     THINKMETA.SITE                                │
│ 容器名:    freeipa-server                                │
│ 数据目录:  /data/docker-space/ipa-data                   │
├─────────────────────────────────────────────────────────┤
│ 进入容器:        docker exec -it freeipa-server bash     │
│ 获取票据:        echo "PWD" | kinit admin                │
│ 查看票据:        klist                                   │
│ 查看服务:        ipactl status                           │
│ 重启服务:        ipactl restart                          │
│ 查看用户:        ipa user-find                           │
│ 创建用户:        ipa user-add name --first=X --last=X    │
│ 禁用用户:        ipa user-disable name                   │
│ 查看所有主机:    ipa host-find                           │
│ 查看 HBAC 规则:  ipa hbacrule-find                       │
│ 查看 Sudo 规则:  ipa sudorule-find                       │
│ 测试 HBAC:       ipa hbactest --user=... --host=...      │
│ 查看日志:        docker logs -f freeipa-server           │
│ 查看容器状态:    docker ps | grep freeipa                │
└─────────────────────────────────────────────────────────┘