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 生成) |
--homedir | Home 目录路径,默认 /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 --all5.3.3 修改用户
# 修改用户信息
ipa user-mod zhangsan --title="高级开发工程师"
# 修改邮箱
ipa user-mod zhangsan [email protected]
# 修改登录 Shell
ipa user-mod zhangsan --shell=/usr/bin/zsh5.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 zhangsan5.3.6 删除用户
# 删除用户
ipa user-del zhangsan
# 删除时保留 home 目录(默认会保留)
ipa user-del zhangsan --preserve
# 强制删除(不提示确认)
ipa user-del zhangsan --continue5.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"
done5.3.8 用户生命周期
员工入职 员工离职
│ │
▼ ▼
创建用户 ──→ 分配权限 ──→ 正常使用 ──→ 禁用用户 ──→ 保留/删除
│
保留 90 天(审计期)
│
▼
彻底删除
5.4 用户组管理
5.4.1 创建用户组
# 创建普通组
ipa group-add developers --desc="开发团队"
# 创建 POSIX 组(带 GID)
ipa group-add ops --desc="运维团队" --gid=100015.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=zhangsan5.4.3 查看组
# 查看所有组
ipa group-find
# 查看指定组的信息
ipa group-show developers
# 查看组成员的详细信息
ipa group-show developers --all5.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-employees5.4.5 删除组
ipa group-del developers5.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=20380119031407Z5.6.3 用户证书管理
# 为用户添加证书
ipa user-add-cert zhangsan --certificate="MIID..."5.7 Web UI 操作指南(快速版)
- 浏览器打开
https://192.168.3.90 - 使用
admin账号登录 - 左侧导航栏选择 Identity → Users
- 点击 + Add 按钮添加用户
- 填写必填项:User login、First name、Last name
- 点击 Add and Edit 进入详细设置
- 在详细页面可以设置:密码、组成员、角色、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