Linux 统一身份与权限管理

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

完成后:

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 权限管理。

posted @ 2025-08-28 15:42  元贞  阅读(19)  评论(0)    收藏  举报