第 12 章 在受控环境中部署身份管理:概念验证


在安全、隔离的沙箱环境中探索 RHEL (IdM) 中身份管理的基本功能和概念。

获得以下方面的实践经验:

  • 通过使用 Ansible 自动化安装由 IdM 服务器、副本和客户端组成的最小 IdM 群集。
  • 通过 IdM Web UI 配置身份验证和各种访问控制,侧重于基于主机的访问控制、基于角色的访问控制和sudo规则。IdM Web UI 很直观,因此提供了与 IdM 交互的最佳起点。
  • 使用 Ansible 执行相同的身份验证和访问控制配置,发现 Ansible 攻略为系统管理带来的简单性、自动化和可扩展性。
警告

在受控环境中部署身份管理:概念验证旨在帮助您测试和熟悉各种 IdM 功能,为您在生产环境中部署做好准备。它不打算直接用于生产。

12.1. 在受控环境中安装 RHEL Identity Management

要在生产部署前评估和测试身份管理(IdM),您可以在 RHEL 中执行身份管理(IdM)的基本安装。使用 Ansible playbook 部署软件可确保方便的可重复配置过程。

12.1.1. 先决条件

  • 运行红帽企业 Linux (RHEL) 的系统,内存为 16 GB 或以上。
  • RHEL订阅。

术语和假设

  • ansible_user 是托管节点上的帐户,用于执行 Ansible 攻略中定义的操作。此用户具有 sudo 特权来运行需要 root 访问权限的命令。
  • controller.idm.example.com 是 Ansible 控制节点的名称,即存储和运行 Ansible 攻略的主机。
  • server.idm.example.comreplica.idm.example.comclient.idm.example.com 是安装和配置 RHEL 中 Identity Management 的托管节点。
  • 控制节点和管理节点正在虚拟机上运行。所有这些虚拟机都安装在一个运行RHEL的物理系统上。

要为 IdM 集群部署准备虚拟机(VM),请在虚拟机上安装和配置 RHEL 客户机操作系统。

先决条件

  • 您已从红帽客户门户下载了最新的 RHEL 8、9 或 10 ISO 映像。

流程

  1. 使用 ISO 映像为控制器系统安装新虚拟机。有关详细信息,请参阅 从安装介质交互式安装 RHEL。在安装过程中,请注意以下几点:

    1. 如果要使用虚拟机管理器(VMM)安装虚拟机,请命名控制器服务器副本客户端中的主机,以便您可以将VMM UI中的名称与CLI上的主机的名称相匹配。
    2. 在要安装 IdM 服务器和副本的虚拟机上至少保留 4 GB RAM。对于客户端系统,1 GB 就足够了。
    3. 在 IdM 服务器、副本和客户端上保留 30 GB 的存储空间。
    4. 选择安装,而不是测试和安装
    5. 在安装过程中在控制器上创建本地 ansible_user 用户。
    6. ansible_user 用户设置易于记忆的密码,例如 12345
    7. 根密码部分,输入易于记忆的密码,例如 1234
    8. 选中 允许根 SSH 使用密码登录 复选框。
  2. 安装完成后,配置控制器虚拟机的主机名:

    1. 控制器VM CLI上,输入nmtui
    2. 使用向下箭头键,选择设置系统主机名
    3. 在新打开的窗口中,输入 controller.idm.example.com

      主机名必须是完全限定域名,如 controller.idm.example.com。有关详细信息,请参阅安装身份管理中的满足 DNS 主机名和 DNS 对 IdM 的要求。

    4. 使用向下和向右箭头键,选择确定
    5. 再次单击确定以确认新主机名。
    6. 在较高级的界面中,使用向下和向右箭头键选择确定退出
    7. [可选]要验证主机名,在您要安装的系统中使用 hostname 工具:

      $ hostname
      controller.idm.example.com

      hostname 的输出不能是 localhostlocalhost6

  3. 对所有其他虚拟机重复上述步骤:服务器复制机和客户端
  4. 在所有虚拟机上为 ansible_user 配置 sudo 权限:

    1. SSH 以身份到控制器

      your-physical-system]$ ssh root@controller
    2. 通过创建 /etc/sudoers.d/ansible_user 文件为 ansible_user 配置无密码的 sudo

      # echo "ansible_user ALL=(ALL) NOPASSWD: ALL" | tee /etc/sudoers.d/ansible_user
    3. 在所有托管节点、服务器、复制器和客户机上重复。
    注意

    在整个本章中,在控制器上以 ansible_user 身份登录时,需要在需要 root 权限的命令之前使用 sudo

  5. 使用主机名而不是 IP 地址配置对单个系统的对等登录:

    1. 控制器 CLI 上,输入:

      $ ip a
      1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
          link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
          inet 127.0.0.1/8 scope host lo
             valid_lft forever preferred_lft forever
          inet6 ::1/128 scope host
             valid_lft forever preferred_lft forever
      2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
          link/ether 52:54:00:b7:e6:ac brd ff:ff:ff:ff:ff:ff
          inet 192.168.122.86/24 brd 192.168.122.255 scope global dynamic noprefixroute enp1s0
             valid_lft 3106sec preferred_lft 3106sec
          inet6 fe80::5054:ff:feb7:e6ac/64 scope link noprefixroute
             valid_lft forever preferred_lft forever

      请注意以 192.168.X.X 开头的 IP 地址。

    2. 在所有其他虚拟主机上执行相同的操作。
    3. 控制器上,使用 sudo 将所有虚拟系统的主机名和 IP 地址添加到 /etc/hosts 文件中。文件类似如下:

      127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
      ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
      192.168.122.86 controller.idm.example.com controller
      192.168.122.42 server.idm.example.com server
      192.168.122.103 replica.idm.example.com replica
      192.168.122.200 client.idm.example.com client
    4. 以相同的方式更新物理系统上的 /etc/hosts 文件。
  6. 确保控制器上的操作系统是最新的:

    1. 从本地系统到控制器上的 ansible_user 帐户的 SSH:

      your-physical-system]$ ssh ansible_user@controller
    2. 使用红帽的订阅管理服务注册控制器虚拟机:

      $ sudo subscription-manager register --username <your_user_name> --password <your_password>
    3. 确保您使用的是最新的软件包:

      $ sudo yum update
    4. 对所有其他虚拟机重复前面的步骤。

验证

  • 使用其完全限定域名(FQDN)或简称测试物理系统与其中一个虚拟系统之间的连通性:

    your-physical-system]$ ping controller
    PING controller.idm.example.com (192.168.122.86) 56(84) bytes of data.
    64 bytes from controller.idm.example.com (192.168.122.86): icmp_seq=1 ttl=64 time=0.353 ms
    64 bytes from controller.idm.example.com (192.168.122.86): icmp_seq=2 ttl=64 time=0.398 ms
    64 bytes from controller.idm.example.com (192.168.122.86): icmp_seq=3 ttl=64 time=0.453 ms

要为您的环境在受管节点上自动安装和配置 IdM,请相应地配置 Ansible 控制节点。

先决条件

  • 您已在 IdM 的虚拟机上安装 RHEL 作为概念证明。

流程

  1. 在控制器系统上,以 ansible_user 身份登录并创建 SSH 公钥和私钥:

    [ansible_user@controller]$ ssh-keygen
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/ansible_user/.ssh/id_rsa):
    Enter passphrase (empty for no passphrase): [Enter]
    Enter same passphrase again: [Enter]
    ...

    为密钥文件使用推荐的默认位置。由于这是一个PoC环境,所以将密码短语留空。

  2. 使用以下内容创建 ~/.ansible.cfg 文件:

    [defaults]
    inventory = /home/ansible_user/inventory
    remote_user = ansible_user
    
    [privilege_escalation]
    become = True
    become_method = sudo
    become_user = root
    注意

    ~/.ansible.cfg 文件中的设置具有更高的优先级,并覆盖全局 /etc/ansible/ansible.cfg 文件中的设置。

    使用这些设置,Ansible 执行以下操作:

    • 管理指定清单文件中的主机。
    • 当帐户建立到受管节点的 SSH 连接时,使用 remote_user 参数中设置的帐户。
    • 在运行需要提升权限的任务时,使用 sudo 将特权提升为 root。由于 ansible_user 配置了无密码 sudo (NOPASSWD),Ansible 不会提示输入密码。
  3. 创建 INI 或 YAML 格式的 ~/inventory 文件,其中列出托管主机的主机名和所需安装变量的值:

    [ipaserver]
    server.idm.example.com
    
    [ipaserver:vars]
    ipaserver_domain=idm.example.com
    ipaserver_realm=IDM.EXAMPLE.COM
    ipaserver_setup_dns=True
    ipaserver_auto_forwarders=True
    ipaadmin_password=Secret123
    ipadm_password=Secret123
    
    [ipareplicas]
    replica.idm.example.com
    
    [ipareplicas:vars]
    ipareplica_setup_dns=true
    ipareplica_auto_forwarders=true
    ipaadmin_password=Secret123
    ipareplica_servers=server.idm.example.com
    
    [ipaclients]
    client.idm.example.com
    
    [ipaclients:vars]
    ipaadmin_password=Secret123
    ipaclient_domain=idm.example.com
    ipaclient_configure_dns_resolver=true
    ipaclient_dns_servers=192.168.122.1
    ipaclient_servers=server.idm.example.com
  4. 创建包含以下内容的 install-cluster.yml 文件:

    ---
    - name: Play to configure IPA server
      hosts: ipaserver
      become: true
      roles:
      - role: freeipa.ansible_freeipa.ipaserver
        state: present
    
    - name: Play to configure IPA clients with username/password
      hosts: ipaclients
      become: true
      roles:
      - role: freeipa.ansible_freeipa.ipaclient
        state: present
    
    - name: Play to configure IPA replicas
      hosts: ipareplicas
      serial: 1
      become: true
      roles:
      - role: freeipa.ansible_freeipa.ipareplica
        state: present

    该剧本包含三部戏:

    • 第一个安装主 IdM 服务器。
    • 第二个安装IdM客户端。
    • 第三个安装IdM副本。serial: 1 指令指示 Ansible 一次只能针对同一 IdM 服务器部署一个副本。
  5. 使用sudo权限,安装ansible-freeipa集合:

    [ansible_user@controller]$ sudo dnf install ansible-freeipa
    [...]
    Transaction Summary
    ========================================================================================================================================================================
    Install  11 Packages
    Total download size: 9.8 M
    Installed size: 42 M
    Is this ok [y/N]: y
    [...]

要准备安装 IdM 部署,您可以将虚拟机配置为 Ansible 管理的节点。

先决条件

  • 您已在 IdM 的虚拟机上安装 RHEL 作为概念证明。

流程

  1. ansible_user 用户的 SSH 公钥安装到服务器托管节点上的 ansible_user 帐户上:

    1. ansible_user 身份登录到控制节点,并将 SSH 公钥复制到服务器上的 ansible_user 帐户:

      [ansible_user@controller]$ ssh-copy-id ansible_user@server.idm.example.com
      /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ansible_user/.ssh/id_rsa.pub"
      The authenticity of host 'server.idm.example.com (192.168.122.42)' can't be established.
      ECDSA key fingerprint is SHA256:9bZ33GJNODK3zbNhybokN/6Mq7hu3vpBXDrCxe7NAvo.
    2. 当提示时,输入 yes 进行连接:

      Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
      /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
      /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
    3. 出现提示时,在服务器上输入 ansible_user 的密码:

      ansible_user@server.idm.example.com's password: 12345
      Number of key(s) added: 1
      Now try logging into the machine, with:   "ssh 'ansible_user@server.idm.example.com'"
      and check to make sure that only the key(s) you wanted were added.
    4. 通过在 服务器 上远程运行命令 来验证 SSH 连接:

      [ansible_user@controller]$ ssh ansible_user@server.idm.example.com whoami
      ansible_user
  2. 在所有其他托管节点、复制器和客户机上重复。
  3. 为每个托管节点上的 ansible_user 创建sudo 配置:

    1. 在每个托管节点(服务器、副本客户端)上,以 root 身份登录(或者如果您有其他具有 sudo 访问权限的用户,请使用 sudo),然后使用 visudo 命令创建和编辑 /etc/sudoers.d/ansible_user 文件:

      # visudo /etc/sudoers.d/ansible_user

      在普通编辑器中使用 visudo 的好处是该工具提供基本的检查,如在安装文件之前解析错误。

    2. /etc/sudoers.d/ansible_user 文件中配置 sudoers 策略:

      ansible_user ALL=(ALL) NOPASSWD: ALL

      要向 ansible_user 授予权限,以便在不输入 ansible_user 密码的情况下以该主机上任何用户(或任何其他用户)的身份运行所有命令。由于控制器上的 Ansible 配置指定了 become_user = root,Ansible 会在运行需要升级权限的任务时使用此 sudo 特权来升级到 root。

验证

  1. 验证您可以在所有受管节点上运行来自控制节点的命令:

    [ansible_user@controller]$ ansible all -m ping
    BECOME password:
    client.idm.example.com | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python3"
        },
        "changed": false,
        "ping": "pong"
    }
    server.idm.example.com | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python3"
        },
        "changed": false,
        "ping": "pong"
    }
    replica.idm.example.com | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python3"
        },
        "changed": false,
        "ping": "pong"
    }

    硬编码的所有组会动态包含清单文件中列出的所有主机。

  2. 验证权限提升是否正常工作。使用 Ansible 命令模块与 become 在所有托管节点上运行 whoami 实用程序:

    [ansible_user@controller]$ ansible all -m command -a whoami --become
    BECOME password: <password>
    client.idm.example.com | CHANGED | rc=0 >>
    root
    server.idm.example.com | CHANGED | rc=0 >>
    root
    replica.idm.example.com | CHANGED | rc=0 >>
    root

    如果命令返回 root,则您在受管节点上正确地配置了 sudo-- become 标志告诉 Ansible 使用 sudo 提升权限。

12.1.5. 在虚拟机中安装 IdM 群集

要在虚拟机上安装 IdM 主服务器、客户端和副本,您可以从控制节点运行单个 Ansible 命令。

先决条件

流程

  • 安装 IdM 群集:

    [ansible_user@controller]$ ansible-playbook -i inventory -vv install-cluster.yml
    重要

    如果您在安装服务器、客户端或副本时遇到重复的错误,最好擦除主机并执行干净的重新安装,而不是尝试排除安装失败。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部