Linux 统一身份与权限管理
部署文档(FreeIPA 方案,支持:登录 + sudo 权限管理)
适用:CentOS 7/8、Rocky 8/9、RHEL 8/9、Ubuntu 20/22
目标:
- 用一套密码登录所有 Linux 主机
- sudo 权限精确到「张三只能在 web-01 上 sudo,李四在所有 db 主机上 login」
- 加人 / 回收 / 审计全部在 一台 IPA Server 完成,业务机零文件维护
1 架构总览
┌--------------------┐│ FreeIPA Server │ 1 台│ LDAP+Kerberos+CA │ 统一账号、密码、sudo、HBAC└--------┬-----------┘│┌-------------┴-------------┐│ │
web-01 web-02 db-01 ... (N 台业务机)
↑ ipa-client-install ↑ ipa-client-install
↑ 自动配置 PAM/NSS/Kerberos ↑ 自动配置 sudo/sssd
2 服务器端(IPA Server)部署
2.1 准备
- 主机名:ipa.example.org(FQDN,必须可解析)
- IP:192.168.10.10
- 系统:Rocky 9 / CentOS 8 Stream
2.2 安装
dnf install -y freeipa-server freeipa-server-dns # DNS 可选
# 若用 Ubuntu
# apt install -y freeipa-server freeipa-server-dns
2.3 一键初始化
ipa-server-install \--hostname ipa.example.org \--realm EXAMPLE.ORG \--domain example.org \--admin-password 'RedHat123' \--ds-password 'DirMgr123' \--setup-dns --auto-forwarders
完成后:
- Web UI: https://ipa.example.org
- CLI: kinit admin
2.4 防火墙
firewall-cmd --permanent --add-service={http,https,ldap,ldaps,kerberos,dns}
firewall-cmd --reload
3 客户端(所有业务机)加入域
3.1 安装
dnf install -y freeipa-client
# Ubuntu: apt install freeipa-client
3.2 加入
ipa-client-install \--server ipa.example.org \--domain example.org \--realm EXAMPLE.ORG \--principal admin \--password 'RedHat123' \--mkhomedir
完成后:
- /etc/sssd/sssd.conf 自动生成
- /etc/krb5.conf 指向 IPA
- sudo 规则由 LDAP 下发
4 创建用户
在 IPA Server 上执行:
# 创建用户
ipa user-add alice --first=Alice --last=Li --password
# 再次确认密码
kinit alice@EXAMPLE.ORG
5 主机注册(可选但推荐)
让每台业务机在 IPA 中有对象,方便后续 HBAC / sudo:
# 在 ipa server 或 client
ipa host-add web-01.example.org --force
6 精确 sudo 权限配置
6.1 建 sudo 规则(示例:alice 在 web-01 可 sudo 所有命令)
# 1. 建命令组
ipa sudocmdgroup-add ALL
ipa sudocmd-add ALL --runasuser=root# 2. 建规则
ipa sudorule-add web01_alice_sudo
ipa sudorule-add-user web01_alice_sudo --users=alice
ipa sudorule-add-host web01_alice_sudo --hosts=web-01.example.org
ipa sudorule-add-allow-command web01_alice_sudo --sudocmdgroups=ALL
ipa sudorule-mod web01_alice_sudo --runasuser=root
6.2 批量场景(所有 db* 主机 + devs 组)
# 建主机组
ipa hostgroup-add dbservers
ipa hostgroup-add-member dbservers --hosts=db-01.example.org --hosts=db-02.example.org# 建用户组
ipa group-add devs --posix
ipa group-add-member devs --users=alice --users=bob# 建 sudo 规则
ipa sudorule-add devs_db_sudo
ipa sudorule-add-user devs_db_sudo --groups=devs
ipa sudorule-add-host devs_db_sudo --hostgroups=dbservers
ipa sudorule-add-allow-command devs_db_sudo --sudocmdgroups=ALL
6.3 生效检查
在业务机上:
# 立即刷新
sss_cache -E
sudo -l -U alice
应看到仅对该机生效的 sudo 条目。
7 登录权限(HBAC)精确到单台主机
7.1 默认规则
IPA 预置 allow_all
规则,可先禁用:
ipa hbacrule-disable allow_all
7.2 建规则(示例:alice 只能登录 web-01)
ipa hbacrule-add login_web01
ipa hbacrule-add-user login_web01 --users=alice
ipa hbacrule-add-host login_web01 --hosts=web-01.example.org
ipa hbacrule-add-service login_web01 --hbacsvcs=sshd
7.3 批量场景(devs 组可登录所有 webservers)
ipa hbacrule-add login_webservers
ipa hbacrule-add-user login_webservers --groups=devs
ipa hbacrule-add-host login_webservers --hostgroups=webservers
ipa hbacrule-add-service login_webservers --hbacsvcs=sshd
8 日常运维速查
任务 | IPA 命令 | 立即生效? |
---|---|---|
新建用户 | ipa user-add bob … |
✅ |
给用户 sudo 权限 | ipa sudorule-add-user <rule> --users=bob |
✅ |
禁止用户登录某机 | ipa hbacrule-remove-user <rule> --users=bob |
✅ |
查看某机谁能登录 | ipa hbactest --host=web-01 --service=sshd --user=alice |
— |
审计 | Web UI → Identity / HBAC / Sudo → Audit | — |
9 备份 & 恢复
- 全库备份:
ipa-backup --data-only
→ 每天 cron - 恢复:
ipa-restore <tar>
10 故障排查
-
客户端登录失败:
sssctl user-checks alice
ipa hbactest --host=web-01 --service=sshd --user=alice
-
sudo 无效:
sssctl sudo-checks alice
查看/var/log/sssd/sudo.log
11 附录:最小开放端口
- IPA Server:TCP 80,443,389,636,88,464,53(udp/tcp)
- 客户端 → Server:389 或 636, 88, 464
完 — 按此文档部署后,即可通过 IPA Web/CLI 一站式完成所有 Linux 登录与 sudo 权限管理。