9.11. Ansible Playbook を使用して IdM クライアントでの IdM ユーザーの sudo アクセスを確認する
Identity Management (IdM) では、特定の IdM ホストの IdM ユーザーアカウントに sudo アクセスが付与されるようにできます。
この手順では、idm_user_reboot という名前の sudo ルールが存在するように設定します。このルールは、idmclient マシンで /usr/sbin/reboot コマンドを実行するパーミッションを idm_user に付与します。
前提条件
次の要件を満たすように Ansible コントロールノードを設定している。
- Ansible バージョン 2.14 以降を使用している。
-
ansible-freeipaパッケージがインストールされている。 - ~/MyPlaybooks/ ディレクトリーに、IdM サーバーの完全修飾ドメイン名 (FQDN) を使用して Ansible インベントリーファイル を作成している (この例の場合)。
-
この例では、secret.yml Ansible Vault に
ipaadmin_passwordが保存されていることを前提としています。
-
ターゲットノード (
ansible-freeipaモジュールが実行されるノード) が、IdM クライアント、サーバー、またはレプリカとして IdM ドメインに含まれている。 - IdM に idm_user のユーザーアカウントが存在することを確認し、そのユーザーのパスワードを作成してアカウントのロックを解除している。コマンドラインを使用して新しい IdM ユーザーを追加する方法の詳細は、コマンドラインを使用したユーザーの追加 を参照してください。
-
idmclient にローカルの idm_user アカウントがない。(idm_user ユーザーは idmclient の
/etc/passwdファイルに表示されていない)。
手順
inventory.fileなどのインベントリーファイルを作成し、そこにipaserversを定義します。[ipaservers] server.idm.example.comsudoコマンドを 1 つまたは複数追加します。ensure-reboot-sudocmd-is-present.ymlAnsible Playbook を作成し、sudoコマンドの IdM データベースに/usr/sbin/rebootコマンドが存在するようにします。この手順は、/usr/share/doc/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 - 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/doc/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 - 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 が正しく設定されている場合には、マシンが再起動します。