123.3. Ansible を使用して Web コンソールを設定し、スマートカードで認証されたユーザーが再度認証を求められることなくリモートホストに SSH 接続できるようにする
RHEL Web コンソールでユーザーアカウントにログインすると、SSH プロトコルを使用してリモートマシンに接続できます。servicedelegationrule モジュールと servicedelegationtarget モジュールを使用して、Web コンソールを制約付き委任機能用に設定できます。これにより、再度認証を求められることなく SSH 接続が可能になります。
この手順例では、Web コンソールセッションは myhost.idm.example.com ホスト上で実行され、認証されたユーザーに代わって SSH を使用して remote.idm.example.com ホストにアクセスするように設定します。
前提条件
-
IdM
adminパスワードがある。 -
remote.idm.example.comへのrootアクセスがある。 - Web コンソールサービスが IdM で実行されている。
Web コンソールは、ユーザーセッションに
S4U2ProxyKerberos チケットを作成している。確認するには、IdM ユーザーとして Web コンソールにログインし、Terminalページを開いて次のように入力します。$ klist Ticket cache: FILE:/run/user/1894000001/cockpit-session-3692.ccache Default principal: user@IDM.EXAMPLE.COM Valid starting Expires Service principal 07/30/21 09:19:06 07/31/21 09:19:06 HTTP/myhost.idm.example.com@IDM.EXAMPLE.COM 07/30/21 09:19:06 07/31/21 09:19:06 krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM for client HTTP/myhost.idm.example.com@IDM.EXAMPLE.COM次の要件を満たすように Ansible コントロールノードを設定している。
- Ansible バージョン 2.13 以降を使用している。
-
ansible-freeipaパッケージをインストールしている。 - この例では、~/MyPlaybooks/ ディレクトリーに、IdM サーバーの完全修飾ドメイン名 (FQDN) を使用して Ansible インベントリーファイル を作成したことを前提としている。
-
この例では、secret.yml Ansible Vault に
ipaadmin_passwordが保存されていることを前提としています。
-
ターゲットノード (
ansible-freeipaモジュールが実行されるノード) が、IdM クライアント、サーバー、またはレプリカとして IdM ドメインに含まれている。
手順
~/MyPlaybooks/ ディレクトリーに移動します。
$ cd ~/MyPlaybooks/以下の内容で
web-console-smart-card-ssh.ymlPlaybook を作成します。委任対象の存在を確認するタスクを作成します。
--- - name: Playbook to create a constrained delegation target hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure servicedelegationtarget web-console-delegation-target is present ipaservicedelegationtarget: ipaadmin_password: "{{ ipaadmin_password }}" name: web-console-delegation-target対象ホストを委任ターゲットに追加するタスクを追加します。
- name: Ensure servicedelegationtarget web-console-delegation-target member principal host/remote.idm.example.com@IDM.EXAMPLE.COM is present ipaservicedelegationtarget: ipaadmin_password: "{{ ipaadmin_password }}" name: web-console-delegation-target principal: host/remote.idm.example.com@IDM.EXAMPLE.COM action: member委任ルールの存在を確認するタスクを追加します。
- name: Ensure servicedelegationrule delegation-rule is present ipaservicedelegationrule: ipaadmin_password: "{{ ipaadmin_password }}" name: web-console-delegation-ruleWeb コンソールクライアントサービスの Kerberos プリンシパルが制約付き委任ルールのメンバーであることを確認するタスクを追加します。
- name: Ensure the Kerberos principal of the web console client service is added to the servicedelegationrule web-console-delegation-rule ipaservicedelegationrule: ipaadmin_password: "{{ ipaadmin_password }}" name: web-console-delegation-rule principal: HTTP/myhost.idm.example.com action: member制約付き委任ルールが web-console-delegation-target 委任対象と関連付けられることを確認するタスクを追加します。
- name: Ensure a constrained delegation rule is associated with a specific delegation target ipaservicedelegationrule: ipaadmin_password: "{{ ipaadmin_password }}" name: web-console-delegation-rule target: web-console-delegation-target action: member
- ファイルを保存します。
Ansible Playbook を実行します。Playbook ファイル、
secret.ymlファイルを保護するパスワードを格納するファイル、およびインベントリーファイルを指定します。$ ansible-playbook --vault-password-file=password_file -v -i inventory web-console-smart-card-ssh.ymlremote.idm.example.com でKerberos 認証を有効にします。-
rootとして SSH 経由でremote.idm.example.comに接続します。 -
/etc/ssh/sshd_configファイルを開いて編集します。 -
GSSAPIAuthentication no行のコメントを外し、GSSAPIAuthentication yesに置き換えて、GSSAPIAuthenticationを有効にします。
-
変更がすぐに有効になるように、
remote.idm.example.comのsshdサービスを再起動します。$ systemctl try-restart sshd.service