搜索

第 34 章 使用 Ansible 在 IdM 中配置 HBAC 和 sudo 规则

download PDF

在身份管理(IdM)中使用基于主机的访问控制(HBAC),您可以定义根据以下内容限制对主机或服务访问权限的策略:

  • 尝试登录的用户以及此用户的组
  • 用户尝试访问的主机以及该主机所属的主机组
  • 用于访问主机的服务

使用 sudo,用户可以以另一个具有不同特权的用户身份运行程序,如 root 特权。在 IdM 中,您可以集中管理 sudo 规则。您可以根据用户组、主机组和命令组以及单个用户、主机和命令定义 sudo 规则。

完成这个流程以确保 IdM 用户的以下 HBAC 和 sudo 规则存在:

  • jane 只能访问主机 client01.idm.example.com
  • john 只能访问主机 client02.idm.example.com
  • 包括默认的 admin 用户以及常规 alice 用户的admins 组的成员可以访问任何 IdM 主机。
  • admins 组的成员可以在任何 IdM 主机上使用以下命令运行 sudo

    • /usr/sbin/reboot
    • /usr/bin/less
    • /usr/sbin/setenforce

下图显示了上述所需配置:

图 34.1. IdM HBAC 和 SUDO 规则图

显示不同类型的主机访问权限和不同用户的 sudo 特权的 IdM 用户和主机的图像

先决条件

  • 在控制节点上:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已安装 ansible-freeipa 软件包。
    • 您已在 ~/MyPlaybooks/ 目录中创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 您已将 ipaadmin_password 存储在 secret.yml Ansible vault 中。
  • 用户 janejohnalice 在 IdM 中存在 。为这些帐户配置的密码。

流程

  1. 使用以下内容创建您的 Ansible playbook 文件 add-hbac-and-sudo-rules-to-idm.yml

    ---
    - name: Playbook to manage IPA HBAC and SUDO rules
      hosts: ipaserver
      become: false
      gather_facts: false
    
      vars_files:
      - /home/<user_name>/MyPlaybooks/secret.yml
    
      module_defaults:
        ipahbacrule:
          ipaadmin_password: "{{ ipaadmin_password }}"
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
        ipasudocmd:
          ipaadmin_password: "{{ ipaadmin_password }}"
        ipasudocmdgroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
        ipasudorule:
          ipaadmin_password: "{{ ipaadmin_password }}"
    
      tasks:
      - name: HBAC Rule for Jane - can log in to client01
        ipahbacrule: # Creates the rule
          name: Jane_rule
          hbacsvc:
          - sshd
          - login
          host: # Host name
          - client01.idm.example.com
          user:
          - jane
    
      - name: HBAC Rule for John - can log in to client02
        ipahbacrule: # Creates the rule
          name: john_rule
          hbacsvc:
          - sshd
          - login
          host: # Host name
          - client02.idm.example.com
          user:
          - john
    
      - name: Add user member alice to group admins
        ipagroup:
          name: admins
          action: member
          user:
          - alice
    
      - name: HBAC Rule for IdM administrators
        ipahbacrule: # Rule to allow admins full access
          name: admin_access # Rule name
          servicecat: all # All services
          hostcat: all # All hosts
          group: # User group
          - admins
    
        - name: Add reboot command to SUDO
          ipasudocmd:
            name: /usr/sbin/reboot
            state: present
        - name: Add less command to SUDO
          ipasudocmd:
            name: /usr/bin/less
            state: present
        - name: Add setenforce command to SUDO
          ipasudocmd:
            name: /usr/sbin/setenforce
            state: present
    
      - name: Create a SUDO command group
        ipasudocmdgroup:
          name: cmd_grp_1
          description: "Group of important commands"
          sudocmd:
          - /usr/sbin/setenforce
          - /usr/bin/less
          - /usr/sbin/reboot
          action: sudocmdgroup
          state: present
    
      - name: Create a SUDO rule with a SUDO command group
        ipasudorule:
          name: sudo_rule_1
          allow_sudocmdgroup:
          - cmd_grp_1
          group: admins
          state: present
    
      - name: Disable allow_all HBAC Rule
        ipahbacrule: # Rule to allow admins full access
          name: allow_all # Rule name
          state: disabled # Disables rule to allow everyone the ability to login
  2. 运行 playbook:

    $ ansible-playbook --vault-password-file=password_file -i inventory add-hbac-and-sudo-rules-to-idm.yml

验证

  1. 以 jane 用户身份连接到 client01:

    ~]$ ssh jane@client01
    Password:
    
    Last login: Fri Aug 11 15:32:18 2023 from 192.168.122.1
    [jane@client01 ~]$

    输出会验证 jane 是否已登录到 client01。

  2. 尝试以 jane 用户身份连接到 client02 :

    ~]$ ssh jane@client02
    Password:
    Connection closed by 192.168.122.47 port 22

    输出会验证 jane 是否无法登录到 client02。

  3. 以 alice 用户身份连接到 client02 :

    ~]$ ssh alice@client02
    Password:
    
    Last login: Fri Aug 10 16:13:43 2023 from 192.168.122.1

    输出会验证 alice 是否已登录到 client02。

  4. 尝试在不调用超级用户权限的情况下,使用 less 查看 /etc/sssd/sssd.conf 文件的内容:

    [alice@client02 ~]$ less /etc/sssd/sssd.conf
    /etc/sssd/sssd.conf: Permission denied

    尝试失败,因为文件对任何人都不可读,除了文件的所有者,即 root

  5. 调用 root 特权以使用 less 查看 /etc/sssd/sssd.conf 文件的内容:

    [alice@client02 ~]$ sudo less /etc/sssd/sssd.conf
    [sudo] password for alice:
    
    [domain/idm.example.com]
    
    id_provider = ipa
    ipa_server_mode = True
    [...]

    输出会验证 alice 是否可以对 /etc/sssd/sssd.conf 文件执行 less 命令。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.