36.5. Ansible を使用して Web コンソールを設定し、スマートカードで認証されたユーザーが再認証を求められることなく sudo を実行できるようにする
RHEL Web コンソールでユーザーアカウントにログインした後、Identity Management (IdM) システム管理者として、スーパーユーザー権限でコマンドを実行することが必要になる場合があります。制約付き委任 機能を使用すると、再度認証を求められることなく、システムで sudo
を実行できます。
この手順に従って、ipaservicedelegationrule
モジュールおよび ipaservicedelegationtarget
ansible-freeipa
モジュールを使用して、制約付き委任を使用するように Web コンソールを設定します。以下の例では、Web コンソールセッションは myhost.idm.example.com ホストで実行されます。
前提条件
-
スマートカードを使用して Web コンソールセッションを認証することにより、IdM
admin
のチケット認可チケット (TGT) を取得しました。 - Web コンソールサービスが IdM に登録されました。
- myhost.idm.example.com ホストは IdM に存在します。
-
管理
者のsudo
が IdM サーバーのドメイン管理者にアクセス可能であること。詳細は IdM ホストの IdM 管理者に sudo アクセスを有効 にする を参照してください。 Web コンソールは、ユーザーセッションに
S4U2Proxy
Kerberos チケットを作成している。これを確認するために、IdM ユーザーで Web コンソールにログインし、Terminal
ページを開き、以下を入力します。klist
$ 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
Copy to Clipboard Copied! 次の要件を満たすように Ansible コントロールノードを設定した。
- Ansible バージョン 2.14 以降を使用している。
-
ansible-freeipa
パッケージがインストールされている。 - この例では、~ /MyPlaybooks/ ディレクトリーに、制約付き委任を設定する IdM サーバーの完全修飾ドメイン名(FQDN)を使用して Ansible インベントリーファイル を作成したことを前提としています。
-
この例では、secret.yml Ansible Vault に
ipaadmin_password
が保存されていることを前提としています。
-
ターゲットノード (
ansible-freeipa
モジュールが実行されるノード) が、IdM クライアント、サーバー、またはレプリカとして IdM ドメインに含まれている。
手順
Ansible コントロールノードで、~/MyPlaybooks/ ディレクトリーに移動します。
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/
Copy to Clipboard Copied! 以下の内容で
web-console-smart-card-sudo.yml
Playbook を作成します。委任対象の存在を確認するタスクを作成します。
--- - name: Playbook to create a constrained delegation target hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure servicedelegationtarget named sudo-web-console-delegation-target is present ipaservicedelegationtarget: ipaadmin_password: "{{ ipaadmin_password }}" name: sudo-web-console-delegation-target
--- - name: Playbook to create a constrained delegation target hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure servicedelegationtarget named sudo-web-console-delegation-target is present ipaservicedelegationtarget: ipaadmin_password: "{{ ipaadmin_password }}" name: sudo-web-console-delegation-target
Copy to Clipboard Copied! 対象ホストを委任ターゲットに追加するタスクを追加します。
- name: Ensure that a member principal named host/myhost.idm.example.com@IDM.EXAMPLE.COM is present in a service delegation target named sudo-web-console-delegation-target ipaservicedelegationtarget: ipaadmin_password: "{{ ipaadmin_password }}" name: sudo-web-console-delegation-target principal: host/myhost.idm.example.com@IDM.EXAMPLE.COM action: member
- name: Ensure that a member principal named host/myhost.idm.example.com@IDM.EXAMPLE.COM is present in a service delegation target named sudo-web-console-delegation-target ipaservicedelegationtarget: ipaadmin_password: "{{ ipaadmin_password }}" name: sudo-web-console-delegation-target principal: host/myhost.idm.example.com@IDM.EXAMPLE.COM action: member
Copy to Clipboard Copied! 委任ルールの存在を確認するタスクを追加します。
- name: Ensure servicedelegationrule named sudo-web-console-delegation-rule is present ipaservicedelegationrule: ipaadmin_password: "{{ ipaadmin_password }}" name: sudo-web-console-delegation-rule
- name: Ensure servicedelegationrule named sudo-web-console-delegation-rule is present ipaservicedelegationrule: ipaadmin_password: "{{ ipaadmin_password }}" name: sudo-web-console-delegation-rule
Copy to Clipboard Copied! Web コンソールサービスの Kerberos プリンシパルが制約付き委任ルールのメンバーであることを確認するタスクを追加します。
- name: Ensure the Kerberos principal of the web console service is added to the service delegation rule named sudo-web-console-delegation-rule ipaservicedelegationrule: ipaadmin_password: "{{ ipaadmin_password }}" name: sudo-web-console-delegation-rule principal: HTTP/myhost.idm.example.com action: member
- name: Ensure the Kerberos principal of the web console service is added to the service delegation rule named sudo-web-console-delegation-rule ipaservicedelegationrule: ipaadmin_password: "{{ ipaadmin_password }}" name: sudo-web-console-delegation-rule principal: HTTP/myhost.idm.example.com action: member
Copy to Clipboard Copied! 制約付き委任ルールが sudo-web-console-delegation-target 委任対象と関連付けられることを確認するタスクを追加します。
- name: Ensure a constrained delegation rule is associated with a specific delegation target ipaservicedelegationrule: ipaadmin_password: "{{ ipaadmin_password }}" name: sudo-web-console-delegation-rule target: sudo-web-console-delegation-target action: member
- name: Ensure a constrained delegation rule is associated with a specific delegation target ipaservicedelegationrule: ipaadmin_password: "{{ ipaadmin_password }}" name: sudo-web-console-delegation-rule target: sudo-web-console-delegation-target action: member
Copy to Clipboard Copied!
- ファイルを保存します。
Ansible Playbook を実行します。Playbook ファイル、secret.yml ファイルを保護するパスワードを格納するファイル、およびインベントリーファイルを指定します。
ansible-playbook --vault-password-file=password_file -v -i inventory web-console-smart-card-sudo.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory web-console-smart-card-sudo.yml
Copy to Clipboard Copied! System Security Services Daemon (SSSD) と連携して Generic Security Service Application Program Interface (GSSAPI) を介してユーザーを認証するための PAM モジュールである
pam_sss_gss
を有効にします。-
/etc/sssd/sssd.conf
ファイルを開いて編集します。 ドメインの IdM で
pam_sss_gss
がsudo
およびsudo -i
コマンドの認証を提供できるように指定します。[domain/idm.example.com] pam_gssapi_services = sudo, sudo-i
[domain/idm.example.com] pam_gssapi_services = sudo, sudo-i
Copy to Clipboard Copied! - ファイルを保存し、終了します。
-
/etc/pam.d/sudo
ファイルを編集用に開きます。 次の行を
#%PAM-1.0
リストの先頭に挿入して、sudo
コマンドの GSSAPI 認証を許可しますが、必須ではありません。auth sufficient pam_sss_gss.so
auth sufficient pam_sss_gss.so
Copy to Clipboard Copied! - ファイルを保存し、終了します。
-
上記の変更がすぐに有効になるように、
SSSD
サービスを再起動します。systemctl restart sssd
$ systemctl restart sssd
Copy to Clipboard Copied!