20.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 コントローラーに
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.com
sudo
コマンドを 1 つまたは複数追加します。ensure-reboot-sudocmd-is-present.yml
Ansible 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: present
Playbook を実行します。
$ 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
ルールを作成します。sudo
コマンドエントリーを使用して sudo ルールが存在することを確認するensure-sudorule-for-idmuser-on-idmclient-is-present.yml
Ansible Playbook を作成します。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: present
Playbook を実行します。
$ 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
が正しく設定されている場合には、マシンが再起動します。
関連情報
-
/usr/share/doc/ansible-freeipa/
ディレクトリーのREADME-sudocmd.md
ファイル、README-sudocmdgroup.md
ファイル、およびREADME-sudorule.md
ファイルを参照してください。