第21章 Ansible Playbook を使用した sudo アクセスの管理
Ansible Playbook を使用して Identity Management でユーザーの sudo アクセスを管理する方法を説明します。Identity Management でユーザーに sudo アクセスを許可する方法の詳細は、IdM クライアントの IdM ユーザーへの sudo アクセスの許可 を参照してください。
21.1. Ansible Playbook を使用して IdM クライアント上の IdM ユーザーの sudo アクセス権を付与する リンクのコピーリンクがクリップボードにコピーされました!
Identity Management (IdM) では、特定の IdM ホストの IdM ユーザーアカウントに sudo アクセスが付与されるようにできます。
この手順では、idm_user_reboot という名前の sudo ルールが存在するように設定します。このルールは、idmclient マシンで /usr/sbin/reboot コマンドを実行するパーミッションを idm_user に付与します。
前提条件
次の要件を満たすように Ansible コントロールノードを設定している。
- Ansible バージョン 2.15 以降を使用している。
-
freeipa.ansible_freeipaコレクションがインストールされている。 - ~/MyPlaybooks/ ディレクトリーに、IdM サーバーの完全修飾ドメイン名 (FQDN) を使用して Ansible インベントリーファイル が作成されている (この例の場合)。
-
secret.yml Ansible vault に
ipaadmin_passwordが保存されており、secret.yml ファイルを保護するパスワードを格納しているファイルにアクセスできる (この例の場合)。
-
ターゲットノード (
freeipa.ansible_freeipaモジュールが実行されるノード) が、IdM クライアント、サーバー、またはレプリカとして IdM ドメインに含まれている。 - IdM に idm_user のユーザーアカウントが存在する状態にして、そのユーザーのパスワードを作成してアカウントのロックを解除している。コマンドラインを使用して新しい IdM ユーザーを追加する方法の詳細は、コマンドラインを使用したユーザーの追加 を参照してください。
-
idmclient にローカルの idm_user アカウントがない。(idm_user ユーザーは idmclient の
/etc/passwdファイルに表示されていない)。
手順
sudoコマンドを 1 つまたは複数追加します。ensure-reboot-sudocmd-is-present.ymlAnsible Playbook を作成し、sudoコマンドの IdM データベースに/usr/sbin/rebootコマンドが存在するようにします。このステップを簡略化するために、/usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/sudocmd/ensure-sudocmd-is-present.ymlファイルの例をコピーして変更できます。--- - name: Playbook to manage sudo command hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: # Ensure sudo command is present - freeipa.ansible_freeipa.ipasudocmd: ipaadmin_password: "{{ ipaadmin_password }}" name: /usr/sbin/reboot state: presentPlaybook を実行します。
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-reboot-sudocmd-is-present.yml
コマンドを参照する
sudoルールを作成します。ensure-sudorule-for-idmuser-on-idmclient-is-present.ymlAnsible Playbook を作成します。この Playbook では、sudoコマンドのエントリーを使用して、sudo ルールが存在する状態にします。sudo ルールは、idm_user が idmclient マシンを再起動することを許可します。このステップを簡略化するために、/usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/sudorule/ensure-sudorule-is-present.ymlファイルの例をコピーして変更できます。--- - name: Tests hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: # Ensure a sudorule is present granting idm_user the permission to run /usr/sbin/reboot on idmclient - freeipa.ansible_freeipa.ipasudorule: ipaadmin_password: "{{ ipaadmin_password }}" name: idm_user_reboot description: A test sudo rule. allow_sudocmd: /usr/sbin/reboot host: idmclient.idm.example.com user: idm_user state: presentPlaybook を実行します。
$ ansible-playbook -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-sudorule-for-idmuser-on-idmclient-is-present.yml
検証
idm_user が sudo を使用して idmclient を再起動できることを確認し、IdM サーバーに存在するように設定した sudo ルールが idmclient で機能することをテストします。サーバーに加えられた変更がクライアントで反映されるまで数分かかる場合があります。
- idmclient に idm_user としてログインします。
sudoを使用してマシンを再起動します。プロンプトが表示されたら、idm_user のパスワードを入力します。$ sudo /usr/sbin/reboot [sudo] password for idm_user:
sudo が正しく設定されている場合には、マシンが再起動します。