第34章 Ansible を使用した IdM での HBAC ルールおよび sudo ルールの設定
Identity Management (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 ルールの図
前提条件
コントロールノード:
- Ansible バージョン 2.14 以降を使用している。
-
ansible-freeipa
パッケージをインストールしている。 - ~/MyPlaybooks/ ディレクトリーに、IdM サーバーの完全修飾ドメイン名 (FQDN) を使用して Ansible インベントリーファイル を作成した。
-
secret.yml Ansible vault に
ipaadmin_password
が保存されている。
- IdM に、ユーザー jane、john、alice が存在する。これらのアカウントにはパスワードが設定されます。
手順
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
Playbook を実行します。
$ ansible-playbook --vault-password-file=password_file -i inventory add-hbac-and-sudo-rules-to-idm.yml
検証
jane ユーザーとして client01 に接続します。
~]$ ssh jane@client01 Password: Last login: Fri Aug 11 15:32:18 2023 from 192.168.122.1 [jane@client01 ~]$
この出力では、jane が client01 にログインしていることが確認できます。
jane ユーザーとして client02 への接続を試みます。
~]$ ssh jane@client02 Password: Connection closed by 192.168.122.47 port 22
この出力では、jane が client02 にログインできないことが確認できます。
alice ユーザーとして client02 に接続します。
~]$ ssh alice@client02 Password: Last login: Fri Aug 10 16:13:43 2023 from 192.168.122.1
この出力では、alice が client02 にログインしていることが確認できます。
スーパーユーザー権限を呼び出さずに
less
を使用して、/etc/sssd/sssd.conf
ファイルの内容の表示を試みます。[alice@client02 ~]$ less /etc/sssd/sssd.conf /etc/sssd/sssd.conf: Permission denied
ファイルは、ファイルの所有者(
root
)以外は読み取れないため、試行に失敗します。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
コマンドを実行できることが確認できます。