05 — 用户与用户组管理

5.1 管理方式

FreeIPA 提供三种管理方式:

方式适用场景
Web UI日常管理、可视化操作、新人友好
ipa CLI脚本批量操作、自动化运维
LDAP 直接操作高级场景(不推荐,容易破坏数据一致性)

本教程以 CLI 为主,兼顾 Web UI 操作说明。

5.2 管理前的准备工作

# 进入 FreeIPA 容器
docker exec -it freeipa-server bash
 
# 获取 admin Kerberos 票据(有效期 24 小时)
echo "YourAdminPassword" | kinit admin
 
# 验证票据
klist

也可以在客户端服务器上安装 freeipa-admintools 后远程执行 IPA 命令。

5.3 用户管理

5.3.1 创建用户

基础创建:

ipa user-add zhangsan \
  --first=三 \
  --last=张 \
  --password

执行后会交互式提示输入密码。也可以非交互式:

ipa user-add zhangsan \
  --first=三 \
  --last=张 \
  --homedir=/home/zhangsan \
  --shell=/bin/bash \
  [email protected] \
  --phone=13800000001 \
  --title="开发工程师" \
  --password="InitialPass123"

常用参数:

参数说明
--first名(First Name)
--last姓(Last Name)
--cn全名(自动由 first+last 生成)
--homedirHome 目录路径,默认 /home/<username>
--shell默认 Shell,如 /bin/bash
--email邮箱地址
--phone电话号码
--title职务
--password初始密码(首次登录强制修改)

5.3.2 查看用户

# 查找所有用户
ipa user-find
 
# 查找特定用户
ipa user-find zhangsan
 
# 查找包含关键词的用户
ipa user-find --last=张
 
# 查看用户详细信息
ipa user-show zhangsan
 
# 查看用户所有信息(包括成员关系)
ipa user-show zhangsan --all

5.3.3 修改用户

# 修改用户信息
ipa user-mod zhangsan --title="高级开发工程师"
 
# 修改邮箱
ipa user-mod zhangsan [email protected]
 
# 修改登录 Shell
ipa user-mod zhangsan --shell=/usr/bin/zsh

5.3.4 用户状态管理

# 禁用用户(不允许登录,但数据保留)
ipa user-disable zhangsan
 
# 启用用户
ipa user-enable zhangsan
 
# 检查用户状态
ipa user-status zhangsan
# ServerDomain: THINKMETA.SITE
# Account disabled: False   ← 启用状态

5.3.5 解锁用户

密码输错多次后用户会被锁定:

# 解锁用户
ipa user-unlock zhangsan

5.3.6 删除用户

# 删除用户
ipa user-del zhangsan
 
# 删除时保留 home 目录(默认会保留)
ipa user-del zhangsan --preserve
 
# 强制删除(不提示确认)
ipa user-del zhangsan --continue

5.3.7 批量创建用户

#!/bin/bash
# batch-add-users.sh
 
# 用户列表:username:first:last:password:title
USERS=(
  "zhangsan:三:张:Pass123:开发工程师"
  "lisi:四:李:Pass123:运维工程师"
  "wangwu:五:王:Pass123:DBA"
  "zhaoliu:六:赵:Pass123:架构师"
)
 
for entry in "${USERS[@]}"; do
  IFS=':' read -r username first last password title <<< "$entry"
  
  echo "创建用户: $username ($last$first) - $title"
  ipa user-add "$username" \
    --first="$first" \
    --last="$last" \
    --title="$title" \
    --password="$password" \
    --email="${username}@thinkmeta.site"
done

5.3.8 用户生命周期

员工入职                        员工离职
   │                              │
   ▼                              ▼
创建用户 ──→ 分配权限 ──→ 正常使用 ──→ 禁用用户 ──→ 保留/删除
                                       │
                                 保留 90 天(审计期)
                                       │
                                       ▼
                                  彻底删除

5.4 用户组管理

5.4.1 创建用户组

# 创建普通组
ipa group-add developers --desc="开发团队"
 
# 创建 POSIX 组(带 GID)
ipa group-add ops --desc="运维团队" --gid=10001

5.4.2 添加/移除组成员

# 将用户添加到组
ipa group-add-member developers --users=zhangsan
ipa group-add-member developers --users=lisi,wangwu
 
# 批量添加
ipa group-add-member developers --users={zhangsan,lisi,wangwu}
 
# 将组添加到组(嵌套组)
ipa group-add-member developers --groups=ops
 
# 从组中移除用户
ipa group-remove-member developers --users=zhangsan

5.4.3 查看组

# 查看所有组
ipa group-find
 
# 查看指定组的信息
ipa group-show developers
 
# 查看组成员的详细信息
ipa group-show developers --all

5.4.4 按组织架构创建组层次

# 公司顶层组织架构
ipa group-add all-employees --desc="全体员工"
 
# 部门组
ipa group-add engineering --desc="工程部"
ipa group-add operations --desc="运维部"
ipa group-add dba --desc="数据库团队"
 
# 嵌套结构
ipa group-add-member all-employees --groups=engineering,operations,dba
 
# 验证嵌套关系
ipa group-show all-employees

5.4.5 删除组

ipa group-del developers

5.5 用户自助服务

用户可以通过以下方式自助管理:

修改自己的密码

# 用户自己在任意客户端执行
kpasswd
# 或
ipa passwd

查看自己的信息

ipa user-show $(whoami)

Web UI 自助

用户登录 https://192.168.3.90 后可以:

  • 修改个人密码
  • 查看个人组关系
  • 查看 SSH 公钥
  • 修改邮箱等个人信息

5.6 高级用户管理

5.6.1 SSH 公钥管理

# 为用户添加 SSH 公钥(免密码登录)
ipa user-mod zhangsan --sshpubkey="ssh-rsa AAAAB3NzaC1y..."
 
# 查看用户的 SSH 公钥
ipa user-show zhangsan --sshpubkey
 
# 用户也可以自己上传
ipa user-mod $(whoami) --sshpubkey="$(cat ~/.ssh/id_rsa.pub)"

5.6.2 设置用户密码过期

# 强制用户下次登录修改密码
ipa user-mod zhangsan --setattr=krbPasswordExpiration=20260809120000Z
 
# 密码永不过期(不推荐)
ipa user-mod zhangsan --setattr=krbPasswordExpiration=20380119031407Z

5.6.3 用户证书管理

# 为用户添加证书
ipa user-add-cert zhangsan --certificate="MIID..."

5.7 Web UI 操作指南(快速版)

  1. 浏览器打开 https://192.168.3.90
  2. 使用 admin 账号登录
  3. 左侧导航栏选择 Identity → Users
  4. 点击 + Add 按钮添加用户
  5. 填写必填项:User login、First name、Last name
  6. 点击 Add and Edit 进入详细设置
  7. 在详细页面可以设置:密码、组成员、角色、HBAC 规则等

5.8 实践场景

场景一:新员工入职”一条龙”

#!/bin/bash
# onboard.sh — 新员工入职脚本
 
USERNAME=$1
FIRST=$2
LAST=$3
PASSWORD=$4
DEPARTMENT=$5
 
echo "=== 新员工入职: $USERNAME ==="
 
# 1. 创建用户
ipa user-add "$USERNAME" \
  --first="$FIRST" \
  --last="$LAST" \
  --password="$PASSWORD"
 
# 2. 加入对应部门组
ipa group-add-member "$DEPARTMENT" --users="$USERNAME"
 
# 3. 加入全员组
ipa group-add-member all-employees --users="$USERNAME"
 
# 4. 强制首次登录修改密码
ipa user-mod "$USERNAME" --setattr=krbPasswordExpiration="$(date -u +%Y%m%d%H%M%SZ -d '+1 day')"
 
echo "=== 入职完成 ==="
echo "用户名: $USERNAME"
echo "初始密码: $PASSWORD"
echo "首次登录必须修改密码"

场景二:员工离职处理

#!/bin/bash
# offboard.sh — 员工离职处理
 
USERNAME=$1
 
echo "=== 处理离职员工: $USERNAME ==="
 
# 1. 禁用账号
ipa user-disable "$USERNAME"
 
# 2. 记录离职时间
ipa user-mod "$USERNAME" --setattr=description="离职于 $(date '+%Y-%m-%d')"
 
# 3. 从所有组中移除(可选,disable 后已无法登录)
# ipa group-remove-member all-employees --users="$USERNAME"
 
# 4. 90 天后彻底删除
echo "将在 90 天后删除该用户,届时执行:"
echo "ipa user-del $USERNAME"

场景三:查看所有活跃用户

# 列出所有未禁用的用户
ipa user-find --disabled=false
 
# 列出所有被禁用的用户
ipa user-find --disabled=true