Red Hat Training

A Red Hat training course is available for RHEL 8

112.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 に存在します。
  • IdM サーバーのドメイン管理者への admin sudo アクセスを有効 にしている。
  • Web コンソールは、ユーザーセッションに S4U2Proxy Kerberos チケットを作成している。これを確認するために、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.8 以降を使用している。
    • Ansible コントローラーに ansible-freeipa パッケージがインストールされている。
    • この例は、~/MyPlaybooks/ ディレクトリーに、制約付き委任を設定する IdM サーバーの完全修飾ドメイン名 (FQDN) を含む Ansible インベントリーファイル を作成したことを前提としています。
    • この例では、secret.yml Ansible ボールトに ipaadmin_password が保存されていることを前提としています。

手順

  1. Ansible コントロールノードで、~/MyPlaybooks/ ディレクトリーに移動します。

    $ cd ~/MyPlaybooks/
  2. 以下の内容で web-console-smart-card-sudo.yml Playbook を作成します。

    1. 委任対象の存在を確認するタスクを作成します。

      ---
      - 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
    2. 対象ホストを委任ターゲットに追加するタスクを追加します。

        - 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
    3. 委任ルールの存在を確認するタスクを追加します。

        - name: Ensure servicedelegationrule named sudo-web-console-delegation-rule is present
          ipaservicedelegationrule:
            ipaadmin_password: "{{ ipaadmin_password }}"
            name: sudo-web-console-delegation-rule
    4. 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
    5. 制約付き委任ルールが 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
  3. ファイルを保存します。
  4. Ansible Playbook を実行します。Playbook ファイル、secret.yml ファイルを保護するパスワードを格納するファイル、およびインベントリーファイルを指定します。

    $ ansible-playbook --vault-password-file=password_file -v -i inventory web-console-smart-card-sudo.yml
  5. System Security Services Daemon (SSSD) と連携して Generic Security Service Application Program Interface (GSSAPI) を介してユーザーを認証するための PAM モジュールである pam_sss_gss を有効にします。

    1. /etc/sssd/sssd.conf ファイルを開いて編集します。
    2. ドメインの IdM で pam_sss_gsssudo および sudo -i コマンドの認証を提供できるように指定します。

      [domain/idm.example.com]
      pam_gssapi_services = sudo, sudo-i
    3. ファイルを保存し、終了します。
    4. /etc/pam.d/sudo ファイルを編集用に開きます。
    5. 次の行を #%PAM-1.0 リストの先頭に挿入して、sudo コマンドの GSSAPI 認証を許可しますが、必須ではありません。

      auth sufficient pam_sss_gss.so
    6. ファイルを保存し、終了します。
  6. 上記の変更がすぐに有効になるように、SSSD サービスを再起動します。

    $ systemctl restart sssd

関連情報

  • アイデンティティー管理における制約付き委任
  • /usr/share/doc/ansible-freeipa/ ディレクトリーの README-servicedelegationrule.md および README-servicedelegationtarget.md
  • /usr/share/doc/ansible-freeipa/playbooks/servicedelegationtarget および /usr/share/doc/ansible-freeipa/playbooks/servicedelegationrule ディレクトリーのサンプル Playbook