Identity Management の設定および管理


Red Hat Enterprise Linux 8

IdM にログインし、サービス、ユーザー、ホスト、グループ、アクセス制御ルール、および証明書を管理します。

Red Hat Customer Content Services

概要

アイデンティティー管理 (IdM) の主な機能は、ユーザー、グループ、ホスト、アクセス制御ルール、および証明書の管理です。ただし、IdM で管理タスクを実行するには、その前にサービスにログインする必要があります。コマンドラインまたは IdM Web UI を使用してログインする場合は、IdM の認証方法として Kerberos およびワンタイムパスワードを使用できます。
統合または外部の認証局 (CA) を使用して、IdM で証明書を管理できます。Ansible Playbook などの多くのツールを使用して、証明書を要求、更新、および置き換えることができます。IdM サーバーの Web サーバー証明書と LDAP サーバー証明書を置き換えるには、手動アクションを実行する必要があります。

Red Hat ドキュメントへのフィードバック (英語のみ)

Red Hat ドキュメントに関するご意見やご感想をお寄せください。また、改善点があればお知らせください。

Jira からのフィードバック送信 (アカウントが必要)

  1. Jira の Web サイトにログインします。
  2. 上部のナビゲーションバーで Create をクリックします。
  3. Summary フィールドにわかりやすいタイトルを入力します。
  4. Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも追加してください。
  5. ダイアログの下部にある Create をクリックします。

第1章 コマンドラインから Identity Management へのログイン

Identity Management (IdM) では、Kerberos プロトコルを使用してシングルサインオンに対応します。シングルサインオンとは、ユーザーが正しいユーザー名およびパスワードを一度だけ入力すれば、システムが認証情報を再度求めることなく、IdM サービスにアクセスできるという機能です。

重要

IdM では、ユーザーが、対応する Kerberos プリンシパル名を使用して IdM クライアントマシンのデスクトップ環境にログインすると、SSSD (System Security Services Daemon) が、そのユーザーの TGT (Ticket-Granting Ticket) を自動的に取得します。これは、ログインしてから、kinit ユーティリティーを使用して IdM リソースにアクセスする必要がなくなることを意味します。

Kerberos 認証情報キャッシュを削除している場合、または Kerberos TGT の有効期限が切れている場合に IdM リソースにアクセスするには、手動で Kerberos チケットを要求する必要があります。以下のセクションでは、IdM で Kerberos を使用している場合の基本的なユーザー操作を説明します。

1.1. kinit による IdM への手動ログイン

kinit ユーティリティーを使用して Identity Management (IdM) 環境に対して手動で認証するには、次の手順に従います。kinit ユーティリティーは、IdM ユーザーの代わりに Kerberos の TGT (Ticket-Granting Ticket) を取得して、キャッシュに格納します。

この手順は、最初の Kerberos TGT を破棄したか、有効期限が切れている場合にのみ使用します。ローカルマシンに、IdM ユーザーとしてログインすると、IdM に自動的にログインします。これは、ログイン後に IdM リソースにアクセスするのに kinit ユーティリティーを使用する必要がないことを示しています。

手順

  • 現在ローカルシステムにログインしているユーザーのユーザー名でログインするには、ユーザー名を指定せずに kinit を使用します。たとえば、ローカルシステムに <example_user> としてログインしている場合は次のようになります。

    Copy to Clipboard Toggle word wrap
    [example_user@server ~]$ kinit
    Password for example_user@EXAMPLE.COM:
    [example_user@server ~]$

    ローカルユーザーのユーザー名と、IdM のユーザーエントリーが一致しないと、認証に失敗します。

    Copy to Clipboard Toggle word wrap
    [example_user@server ~]$ kinit
    kinit: Client 'example_user@EXAMPLE.COM' not found in Kerberos database while getting initial credentials
  • ローカルユーザー名に対応しない Kerberos プリンシパルを使用するには、必要なユーザー名を kinit ユーティリティーに渡します。たとえば、admin ユーザーとしてログインするには、次のコマンドを実行します。

    Copy to Clipboard Toggle word wrap
    [example_user@server ~]$ kinit admin
    Password for admin@EXAMPLE.COM:
    [example_user@server ~]$
注記

kinit -kt KDB: user@EXAMPLE.COM を使用したユーザーチケットの要求は無効です。詳細は、ソリューション記事 Why kinit -kt KDB: user@EXAMPLE.COM no longer work after CVE-2024-3183 を参照してください。

検証

  • ログインが成功したことを確認するには、klist ユーティリティーを使用して、キャッシュされた TGT を表示します。以下の例では、キャッシュに example_user プリンシパルのチケットが含まれています。これは、このホストでは IdM サービスにアクセスするのは、example_user にのみ許可されていることを示しています。

    Copy to Clipboard Toggle word wrap
    $ klist
    Ticket cache: KEYRING:persistent:0:0
    Default principal: example_user@EXAMPLE.COM
    
    Valid starting     	Expires            	Service principal
    11/10/2019 08:35:45  	11/10/2019 18:35:45  	krbtgt/EXAMPLE.COM@EXAMPLE.COM

1.2. アクティブなユーザーの Kerberos チケットの破棄

ユーザーのアクティブな Kerberos チケットを含む認証情報キャッシュをクリアするには、次の手順に従います。

手順

  • Kerberos チケットを破棄するには、次のコマンドを実行します。

    Copy to Clipboard Toggle word wrap
    [example_user@server ~]$ kdestroy

検証

  • Kerberos チケットが破棄されたことを確認するには、次のコマンドを実行します。

    Copy to Clipboard Toggle word wrap
    [example_user@server ~]$ klist
    klist: Credentials cache keyring 'persistent:0:0' not found

1.3. Kerberos 認証用の外部システムの設定

Identity Management (IdM) ユーザーが Kerberos 認証情報を使用して外部システムから IdM にログインできるように外部システムを設定するには、この手順に従います。

外部システムの Kerberos 認証を有効にすることは、インフラストラクチャーに、複数のレルムまたは重複ドメインが含まれている場合に特に便利です。また、ipa-client-install を実行してシステムを IdM ドメインに登録していない場合にも便利です。

IdM ドメインのメンバーではないシステムから IdM への Kerberos 認証を有効にするには、IdM 固有の Kerberos 設定ファイルを外部システムに定義します。

前提条件

  • 外部システムに krb5-workstation パッケージがインストールされている。

    パッケージがインストールされているかどうかを確認するには、次の CLI コマンドを使用します。

    Copy to Clipboard Toggle word wrap
    # yum list installed krb5-workstation
    Installed Packages
    krb5-workstation.x86_64    1.16.1-19.el8     @BaseOS

手順

  1. IdM サーバーから外部システムに /etc/krb5.conf ファイルをコピーします。以下に例を示します。

    Copy to Clipboard Toggle word wrap
    # scp /etc/krb5.conf root@externalsystem.example.com:/etc/krb5_ipa.conf
    警告

    外部マシンにある既存の krb5.conf ファイルは上書きしないでください。

  2. 外部システムで、コピーした IdM の Kerberos 設定ファイルを使用するように、端末セッションを設定します。

    Copy to Clipboard Toggle word wrap
    $ export KRB5_CONFIG=/etc/krb5_ipa.conf

    KRB5_CONFIG 変数は、ログアウトまで一時的に存在します。ログアウト時に削除されないように、この変数のファイル名を変えてエクスポートします。

  3. /etc/krb5.conf.d/ ディレクトリーの Kerberos 設定部分を、外部システムにコピーします。

外部システムのユーザーが、kinit ユーティリティーを使用して IdM サーバーで認証できるようになりました。

1.4. 関連情報

  • システム上の krb5.conf(5)kinit(1)klist(1)、および kdestroy(1) man ページ

第2章 Identity Management サービスの表示、開始、および停止

Identity Management (IdM) サーバーは、ドメインコントローラー (DC) として機能する Red Hat Enterprise Linux システムです。IdM サーバーでさまざまなサービスが実行していますが、中でも注目すべきは Directory Server、Certificate Authority (CA)、DNS、および Kerberos です。

2.1. IdM サービス

IdM サーバーおよびクライアントにインストールして実行できるサービスには、さまざまなものがあります。

IdM サーバーがホストするサービスのリスト

以下のサービスの多くは、IdM サーバーへのインストールが必須というわけではありません。たとえば、認証局 (CA) や DNS サーバーなどのサービスは、IdM ドメイン内にない外部サーバーにインストールできます。

Kerberos
krb5kdc サービスおよび kadmin サービス

IdM は、シングルサインオンに対応する Kerberos プロトコルを使用します。Kerberos では、正しいユーザー名とパスワードを一度提示するだけで済み、システムから認証情報を再度求められることなく IdM サービスにアクセスできます。

Kerberos は 2 つの部分に分類されます。

  • krb5kdc サービス。Kerberos 認証サービスおよびキー配布センター (KDC) デーモンです。
  • kadmin サービス。Kerberos V5 データベース管理プログラムです。

IdM で Kerberos を使用して認証する方法は、コマンドラインからの Identity Management へのログイン および Web UI で IdM にログイン: Kerberos チケットの使用 を参照してください。

LDAP ディレクトリーサーバー
dirsrv サービス

IdM の LDAP ディレクトリーサーバー インスタンスは、Kerberos、ユーザーアカウント、ホストエントリー、サービス、ポリシー、DNS などの情報をはじめとした、IdM 情報をすべて保存します。LDAP ディレクトリーサーバーインスタンスは、Red Hat Directory Server と同じテクノロジーをベースにしています。ただし、IdM 固有のタスクに合わせて調整されます。

認証局
pki-tomcatd サービス

統合 認証局 (CA) は、Red Hat Certificate System と同じテクノロジーをベースにしています。pki は、Certificate System サービスにアクセスするためのコマンドラインです。

必要な証明書をすべて単独で作成して提供する場合は、統合 CA なしでサーバーをインストールすることもできます。

詳細は、CA サービスの計画 を参照してください。

DNS (Domain Name System)
named サービス

IdM は、動的サービス検出に DNS を使用します。IdM クライアントのインストールユーティリティーは、DNS からの情報を使用して、クライアントマシンを自動的に設定できます。クライアントを IdM ドメインに登録したら、クライアントは DNS を使用してドメイン内の IdM サーバーおよびサービスを検索します。Red Hat Enterprise Linux の DNS (Domain Name System) プロトコルの BIND (Berkeley Internet Name Domain) 実装には、名前付き の DNS サーバーが含まれています。named-pkcs11 は、PKCS#11 暗号化標準に対するネイティブサポートありで構築された BIND DNS サーバーのバージョンです。

詳細は、Planning your DNS services and host names を参照してください。

Apache HTTP サーバー
httpd サービス

Apache HTTP Web サーバー には、IdM Web UI があり、認証局とその他の IdM サービスの間の通信も管理します。

Samba / Winbind
SMB サービスおよび winbind サービス

Samba は、Red Hat Enterprise Linux に、Common Internet File System (CIFS) プロトコルとも呼ばれる Server Message Block (SMB) プロトコルを実装します。smb サービス経由で SMB プロトコルを使用すると、ファイル共有や共有プリンターなどのサーバーのリソースにアクセスできます。Active Directory (AD) 環境で信頼を設定している場合には、'Winbind' サービスが IdM サーバーと AD サーバー間の通信を管理します。

ワンタイムパスワード (OTP) 認証
ipa-otpd サービス

ワンタイムパスワード (OTP) は、2 要素認証の一部として、認証トークンがセッション 1 回だけ使用できるように生成するパスワードです。OTP 認証は、ipa-otpd サービスを介して Red Hat Enterprise Linux に実装されています。

詳細は ワンタイムパスワードを使用して Identity Management Web UI へのログイン を参照してください。

OpenDNSSEC
ipa-dnskeysyncd サービス

OpenDNSSEC は、DNSSEC (DNS Security Extensions) キーおよびゾーンの署名の記録プロセスを自動化する DNS マネージャーです。ipa-dnskeysyncd サービスは、IdM Directory Server と OpenDNSSEC との間の同期を管理します。

Identity Management サーバー: サービスの統合
注記

DNSSEC は、IdM ではテクノロジープレビューとしてのみ利用できます。

IdM クライアントがホストするサービスのリスト

  • System Security Services Daemon: sssd サービス

SSSD (System Security Services Daemon) は、ユーザー認証およびキャッシュ認証情報を管理するクライアント側のアプリケーションです。キャッシュを使用すると、IdM サーバーが利用できなくなったり、クライアントがオフラインになったりした場合に、ローカルシステムが通常の認証操作を継続できるようになります。

詳細は SSSD とその利点について を参照してください。

  • certmonger: certmonger サービス

certmonger サービスは、クライアント上の証明書を監視、更新します。このサービスは、システム上のサービスに対して新しい証明書を要求できます。

詳細は、certmonger を使用したサービスの IdM 証明書の取得 を参照してください。

IdM サービス間の対話

2.2. IdM サービスの状態の表示

IdM サーバーに設定されている IdM サービスの状態を表示するには、ipactl status コマンドを実行します。

Copy to Clipboard Toggle word wrap
[root@server ~]# ipactl status
Directory Service: RUNNING
krb5kdc Service: RUNNING
kadmin Service: RUNNING
named Service: RUNNING
httpd Service: RUNNING
pki-tomcatd Service: RUNNING
smb Service: RUNNING
winbind Service: RUNNING
ipa-otpd Service: RUNNING
ipa-dnskeysyncd Service: RUNNING
ipa: INFO: The ipactl command was successful

サーバーの ipactl status コマンドの出力は、IdM 設定により異なります。たとえば、IdM デプロイメントに DNS サーバーが含まれていない場合は、named サービスがリストに表示されません。

注記

IdM の Web UI を使用して、特定の IdM サーバーで実行しているすべての IdM サービスの状態を表示することはできません。異なるサーバー上で実行されている Kerberos 化されたサービスは、IdM Web UI の [アイデンティティー][Services] タブで表示できます。

2.3. Identity Management サーバー全体の起動と停止

ipa systemd サービスを使用して、IdM サーバー全体を、インストールしたすべてのサービスを停止、起動、または再起動します。systemctl ユーティリティーを使用して ipa systemd サービスを制御すると、すべてのサービスが適切な順序で停止、開始、または再起動されます。ipa systemd サービスは、IdM サービスを起動する前に RHEL IdM 設定もアップグレードし、IdM サービスの管理時に適切な SELinux コンテキストを使用します。systemctl ipa コマンドを実行するには、有効な Kerberos チケットは必要ありません。

ipa systemd service コマンド

IdM サーバー全体を起動するには、次のコマンドを実行します。

Copy to Clipboard Toggle word wrap
# systemctl start ipa

IdM サーバー全体を停止するには、次のコマンドを実行します。

Copy to Clipboard Toggle word wrap
# systemctl stop ipa

IdM サーバー全体を再起動するには、次のコマンドを実行します。

Copy to Clipboard Toggle word wrap
# systemctl restart ipa

IdM を設定するすべてのサービスのステータスを表示するには、ipactl ユーティリティーを使用します。

Copy to Clipboard Toggle word wrap
# ipactl status
重要
  • IdM サービスは、ipactl ユーティリティーで、起動、停止、または再起動しないでください。代わりに systemctl ipa コマンドを使用して、予測可能な環境で ipactl ユーティリティーを呼び出します。
  • ipactl コマンドは、IdM の Web UI では使用できません。

2.4. 個々の Identity Management サービスの開始および停止

IdM 設定ファイルを手動で変更することは推奨されていません。ただし、特定の状況では、管理者が特定のサービスを手動で設定する必要があります。このような場合は、systemctl ユーティリティーを使用して、個々の IdM サービスを停止、開始、または再開します。

たとえば、その他の IdM サービスを変更せずに、Directory Server の挙動をカスタマイズした場合は、systemctl を使用します。

Copy to Clipboard Toggle word wrap
# systemctl restart dirsrv@REALM-NAME.service

また、Active Directory と IdM の信頼を最初にデプロイする場合は、/etc/sssd/sssd.conf ファイルを変更して、以下を追加します。

  • リモートサーバーのレイテンシーが長い環境で、タイムアウト設定オプションを調整するための特定のパラメーター
  • Active Directory サイトのアフィニティーを調整するための特定のパラメーター
  • グローバルの IdM 設定では提供されない特定の設定オプションのオーバーライド

/etc/sssd/sssd.conf ファイルに加えた変更を適用する場合は、次のコマンドを実行します。

Copy to Clipboard Toggle word wrap
# systemctl restart sssd.service

System Security Services Daemon (SSSD) は、設定を自動的に再読み込みまたは再適用しないため、systemctl restart sssd.service を実行する必要があります。

変更が、IdM の ID 範囲に影響を及ぼす場合は、サーバーを完全に再起動することが推奨されます。

重要

複数の IdM ドメインサービスを再起動するには、常に systemctl restart ipa を使用します。IdM サーバーにインストールされているサービス間での依存関係により、サービスを開始および停止する順番は極めて重要です。ipa systemd サービスは、サービスが適切な順序で開始および停止されるようにします。

便利な systemctl コマンド

特定の IdM サービスを開始するには、次のコマンドを実行します。

Copy to Clipboard Toggle word wrap
# systemctl start name.service

特定の IdM サービスを停止するには、次のコマンドを実行します。

Copy to Clipboard Toggle word wrap
# systemctl stop name.service

特定の IdM サービスを再開するには、次のコマンドを実行します。

Copy to Clipboard Toggle word wrap
# systemctl restart name.service

特定の IdM サービスの状態を表示するには、次のコマンドを実行します。

Copy to Clipboard Toggle word wrap
# systemctl status name.service
重要

IdM の Web UI を使用して、IdM サーバーで実行している個々のサービスを開始または停止することはできません。Web UI で可能なのは、IdentityServices に移動してサービスを選択し、Kerberos に対応する設定を修正することです。

2.5. IdM ソフトウェアのバージョンを表示する方法

IdM バージョン番号は次の方法で表示できます。

  • IdM WebUI
  • ipa コマンド
  • rpm コマンド

 

WebUI を介したバージョンの表示

IdM WebUI では、右上のユーザー名メニューから About を選択して、ソフトウェアバージョンを表示できます。

IdM ソフトウェアバージョンの確認
ipa コマンドによるバージョンの表示

コマンドラインから、ipa --version コマンドを使用します。

Copy to Clipboard Toggle word wrap
[root@server ~]# ipa --version
VERSION: 4.8.0, API_VERSION: 2.233
rpm コマンドによるバージョンの表示

IdM サービスが適切に動作していない場合は、rpm ユーティリティーを使用して、現在インストールされている ipa-server パッケージのバージョン番号を確認できます。

Copy to Clipboard Toggle word wrap
[root@server ~]# rpm -q ipa-server
ipa-server-4.8.0-11.module+el8.1.0+4247+9f3fd721.x86_64

第3章 IdM コマンドラインユーティリティーの概要

Identity Management (IdM) コマンドラインユーティリティーの基本的な使用方法を説明します。

前提条件

3.1. IPA コマンドラインインターフェイスとは

IPA コマンドラインインターフェイス (CLI) は、Identity Management (IdM) の管理向けの基本的なコマンドラインインターフェイスです。

新しいユーザーを追加するための ipa user-add コマンドなど、IdM を管理するための多くのサブコマンドがサポートされています。

IPA CLI では以下を行うことができます。

  • ネットワーク内のユーザー、グループ、ホスト、その他のオブジェクトを追加、管理、または削除する。
  • 証明書を管理する。
  • エントリーを検索する。
  • オブジェクトを表示し、オブジェクトリストを表示する。
  • アクセス権を設定する。
  • 正しいコマンド構文でヘルプを取得する。

3.2. IPA のヘルプとは

IPA ヘルプは、IdM サーバー用の組み込みドキュメントシステムです。

IPA コマンドラインインターフェイス (CLI) は、読み込んだ IdM プラグインモジュールから、利用可能なヘルプトピックを生成します。IPA ヘルプユーティリティーを使用するには、以下が必要です。

  • IdM サーバーがインストールされ、実行している。
  • 有効な Kerberos チケットで認証されている。

オプションを指定せずに ipa help コマンドを実行すると、基本的なヘルプの使用方法と、最も一般的なコマンドの例が表示されます。

さまざまな ipa help のユースケースに対して、次のオプションを使用できます。

Copy to Clipboard Toggle word wrap
$ ipa help [TOPIC | COMMAND | topics | commands]
  • [] - 括弧は、すべてのパラメーターが任意であることを示しており、ipa help のみを入力すれば、コマンドが実行できます。
  • |  — パイプ文字は または の意味になります。したがって、基本的な ipa help コマンドを使用して、TOPICCOMMANDtopics または commands を指定できます。

    • topics — コマンド ipa help topics を実行して、IPA ヘルプでカバーされている usercertserver などのトピックのリストを表示できます。
    • TOPIC — 大文字の TOPIC は変数になります。したがって、特定のトピック (ipa help user など) を指定できます。
    • commands — コマンド ipa help commands を入力して、user-addca-enableserver-show などの IPA ヘルプでカバーされているコマンドのリストを表示できます。
    • COMMAND — 大文字の COMMAND は変数になります。したがって、ipa help user-add などの特定のコマンドを指定できます。

3.3. IPA ヘルプトピックの使用

以下の手順では、コマンドラインで IPA ヘルプを使用する方法について説明します。

手順

  1. 端末を開き、IdM サーバーに接続します。
  2. ヘルプに記載されているトピックのリストを表示するには、ipa help topics を実行します。

    Copy to Clipboard Toggle word wrap
    $ ipa help topics
  3. トピックの 1 つを選択し、ipa help [topic_name] のパターンに従ってコマンドを作成します。topic_name 文字列の代わりに、前の手順でリストしたトピックの 1 つを追加します。

    この例では、user トピックを使用します。

    Copy to Clipboard Toggle word wrap
    $ ipa help user
  4. (オプション) IPA ヘルプ出力が長すぎてテキスト全体を表示できない場合は、次の構文を使用します。

    Copy to Clipboard Toggle word wrap
    $ ipa help user | less

    スクロールダウンすれば、ヘルプ全体を表示できます

IPA CLI は、ユーザー トピックのヘルプページを表示します。概要を読むと、トピックのコマンドを使用するパターンに関して、多くの例を確認できます。

3.4. IPA help コマンドの使用

以下の手順では、コマンドラインで IPA help コマンドを作成する方法を説明します。

手順

  1. 端末を開き、IdM サーバーに接続します。
  2. ヘルプで使用できるコマンドのリストを表示するには、ipa help commands コマンドを実行します。

    Copy to Clipboard Toggle word wrap
    $ ipa help commands
  3. コマンドの 1 つを選択し、ipa help <COMMAND> のパターンに従ってヘルプコマンドを作成します。<COMMAND> 文字列の代わりに、前の手順でリストしたコマンドの 1 つを追加します。

    Copy to Clipboard Toggle word wrap
    $ ipa help user-add

関連情報

  • システム上の ipa man ページ

3.5. IPA コマンドの構造

IPA CLI は、以下のタイプのコマンドを区別します。

  • 組み込みコマンド — 組み込みコマンドはすべて、IdM サーバーで利用できます。
  • プラグインにより提供されたコマンド

IPA コマンドの構造を使用すると、さまざまなタイプのオブジェクトを管理できます。以下に例を示します。

  • ユーザー
  • ホスト
  • DNS レコード
  • 証明書

その他にも多数あります。

このようなほとんどのオブジェクトでは、IPA CLI に、以下を行うためのコマンドが含まれます。

  • 追加 (add)
  • 修正 (mod)
  • 削除 (del)
  • 検索 (find)
  • 表示 (show)

コマンドの構造は次のとおりです。

ipa user-addipa user-modipa user-delipa user-findipa user-show

ipa host-addipa host-modipa host-delipa host-findipa host-show

ipa dnsrecord-addipa dnsrecord-modipa dnsrecord-delipa dnsrecord-findipa dnrecord-show

ipa user-add [options] でユーザーを作成できます。[options] は任意です。ipa user-add コマンドのみを使用する場合、スクリプトは、詳細を 1 つずつ要求します。

[オプション] --raw--structured は相互に排他的であり、一緒に実行してはならないことに注意してください。

既存のオブジェクトを変更するには、オブジェクトを定義する必要があります。そのため、コマンドには、オブジェクト ipa user-mod USER_NAME [options] も含まれます。

3.6. IdM ユーティリティーに値をリスト形式で提供する方法

Identity Management (IdM) は、多値属性の値をリスト形式で保存します。

IdM は、多値リストを提供する次の方法に対応します。

  • 同じコマンド呼び出しで、同じコマンドライン引数を複数回指定します。

    Copy to Clipboard Toggle word wrap
    $ ipa permission-add --right=read --permissions=write --permissions=delete ...
  • または、リストを中括弧で囲むこともできます。この場合、シェルはデプロイメントを実行します。

    Copy to Clipboard Toggle word wrap
    $ ipa permission-add --right={read,write,delete} ...

上記の例では、パーミッションをオブジェクトに追加する permission-add コマンドを表示します。この例では、このオブジェクトについては触れていません。…​ の代わりに、権限を追加するオブジェクトーを追加する必要があります。

このような多値属性をコマンド行から更新すると、IdM は、前の値リストを新しいリストで完全に上書きします。したがって、多値属性を更新するときは、追加する 1 つの値だけでなく、新しいリスト全体を指定する必要があります。

たとえば、上記のコマンドでは、パーミッションのリストには、読み取り、書き込み、および削除が含まれます。permission-mod コマンドでリストを更新する場合は、すべての値を追加する必要があります。すべての値を追加しないと、追加されていない値は削除されます。

例 1: - ipa permission-mod コマンドは、以前に追加した権限をすべて更新します。

Copy to Clipboard Toggle word wrap
$ ipa permission-mod --right=read --right=write --right=delete ...

または

Copy to Clipboard Toggle word wrap
$ ipa permission-mod --right={read,write,delete} ...

例 2  - ipa permission-mod コマンドは、コマンドに含まれないため、--right=delete 引数を削除します。

Copy to Clipboard Toggle word wrap
$ ipa permission-mod --right=read --right=write ...

または

Copy to Clipboard Toggle word wrap
$ ipa permission-mod --right={read,write} ...

3.7. IdM ユーティリティーで特殊文字を使用する方法

特殊文字を含むコマンドライン引数を ipa コマンドに渡す場合は、この文字をバックスラッシュ (\) でエスケープします。たとえば、一般的な特殊文字には、山かっこ (< および >)、アンパサンド (&)、アスタリスク (*)、またはバーティカルバー (|) があります。

たとえば、アスタリスク (*) をエスケープするには、次のコマンドを実行します。

Copy to Clipboard Toggle word wrap
$ ipa certprofile-show certificate_profile --out=exported\*profile.cfg

シェルが特殊文字を正しく解析できないため、エスケープしていない特殊文字をコマンドに含めると、予想通りに機能しなくなります。

第4章 コマンドラインから Identity Management エントリーの検索

次のセクションでは、オブジェクトの検索または表示に役立つ IPA コマンドの使用方法を説明します。

4.1. IdM エントリーのリスト表示の概要

ipa *-find コマンドを使用すると、特定のタイプの IdM エントリーを検索できます。

すべての find コマンドを表示するには、次の ipa help コマンドを使用します。

Copy to Clipboard Toggle word wrap
$ ipa help commands | grep find

特定のユーザーが IdM データベースに含まれているかどうかの確認が必要になる場合があります。次のコマンドを使用すると、ユーザーをリスト表示できます。

Copy to Clipboard Toggle word wrap
$ ipa user-find

指定の属性にキーワードが含まれるユーザーグループのリストを表示するには、次のコマンドを実行します。

Copy to Clipboard Toggle word wrap
$ ipa group-find keyword

たとえば、ipa group-find admin コマンドは、名前または説明に文字列 admin が含まれるグループのリストを表示します。

Copy to Clipboard Toggle word wrap
----------------
3 groups matched
----------------
   Group name: admins
   Description: Account administrators group
   GID: 427200002

   Group name: editors
   Description: Limited admins who can edit other users
   GID: 427200002

   Group name: trust admins
   Description: Trusts administrators group

ユーザーグループの検索の際には、特定のユーザーを含むグループに検索結果を絞り込むことも可能です。

Copy to Clipboard Toggle word wrap
$ ipa group-find --user=user_name

また、特定のユーザーを含まないグループを検索するには、次のコマンドを実行します。

Copy to Clipboard Toggle word wrap
$ ipa group-find --no-user=user_name

4.2. 特定のエントリーの詳細の表示

ipa *-show コマンドを使用して、特定の IdM エントリーの詳細を表示します。

手順

  • ホスト server.example.com に関する詳細を表示します。

    Copy to Clipboard Toggle word wrap
    $ ipa host-show server.example.com
    
    Host name: server.example.com
    Principal name: host/server.example.com@EXAMPLE.COM
    ...

4.3. 検索サイズおよび時間制限の調整

IdM ユーザーのリストを要求するなど、一部のクエリーでは、エントリー数が大量に返される場合があります。この検索操作を調整して、ipa user-find などの ipa *-find コマンドの実行時や、Web UI で対応するリストを表示する際に、全体的なサーバーのパフォーマンスを向上できます。

検索サイズ制限

クライアントの CLI または IdM Web UI にアクセスするブラウザーからサーバーに送信されるリクエストで返される最大エントリー数を定義します。

デフォルト - 100 エントリー

検索時間の制限

検索の実行までにサーバーが待機する最大時間 (秒) を定義します。検索がこの制限に到達したら、サーバーは検索を停止し、停止するまでの期間に検出されたエントリーを返します。

デフォルト - 2 秒

この値が -1 に設定されていると、IdM は、検索時に制限を適用しません。

重要

検索のサイズや時間制限を高く設定しすぎると、サーバーのパフォーマンスに影響を及ぼすことがあります。

4.3.1. コマンドラインで検索サイズおよび時間制限の調整

検索サイズと時間制限をグローバルに、または特定のエントリーに合わせて調整して、検索のパフォーマンスと応答性を最適化できます。

手順

  1. 現在の検索時間およびサイズ制限を CLI で表示するには、ipa config-show コマンドを使用します。

    Copy to Clipboard Toggle word wrap
    $ ipa config-show
    
    Search time limit: 2
    Search size limit: 100
  2. すべてのクエリーに対して グローバルに 制限を調整するには、ipa config-mod コマンドを使用して、--searchrecordslimit および --searchtimelimit のオプションを追加します。以下に例を示します。

    Copy to Clipboard Toggle word wrap
    $ ipa config-mod --searchrecordslimit=500 --searchtimelimit=5
  3. 特定のクエリーに対してのみ 一時的に 制限を調整するには、コマンドに --sizelimit または --timelimit オプションを追加してください。以下に例を示します。

    Copy to Clipboard Toggle word wrap
    $ ipa user-find --sizelimit=200 --timelimit=120

4.3.2. Web UI で検索サイズおよび時間制限の調整

IdM Web UI を使用してグローバル検索のサイズと時間制限を調整し、検索のパフォーマンスと応答性を最適化できます。

手順

  1. IdM Web UI にログインします。
  2. IPA Server をクリックします。
  3. IPA Server タブで、Configuration をクリックします。
  4. Search Options エリアに必要な値を設定します。

    デフォルト値は以下の通りです。

    • 検索サイズの制限 - 100 エントリー
    • 検索時間の制限 - 2 秒
  5. ページ上部にある Save をクリックします。

第5章 Web ブラウザーで IdM Web UI へのアクセス

IdM (Identity Management) Web UI は、IdM 管理用の Web アプリケーションであり、IdM コマンドラインインターフェイス (CLI) のグラフィカルな代替手段です。

5.1. IdM Web UI とは

IdM (Identity Management) Web UI は、IdM 管理用の Web アプリケーションです。IdM Web UI には、以下のユーザーとしてアクセスできます。

  • IdM ユーザー - IdM サーバーでユーザーに付与されている権限に応じて制限されている一連の操作。基本的に、アクティブな IdM ユーザーは IdM サーバーにログインして自身のアカウントを設定できます。その他のユーザーまたは IdM サーバーの設定は変更できません。
  • 管理者 - IdM サーバーへのフルアクセス権
  • Active Directory ユーザー - ユーザーに付与されている権限に応じた一連の操作Active Directory ユーザーが Identity Management の管理可能に詳細は IdM を管理する AD ユーザーの有効化 を参照してください。

5.2. Web UI へのアクセスに対応している Web ブラウザー

Identity Management (IdM) は、Web UI への接続に、以下のブラウザーをサポートします。

  • Mozilla Firefox 38 以降
  • Google Chrome 46 以降

ブラウザーで TLS v1.3 を使用しようとすると、スマートカードで IdM Web UI にアクセスできなくなる場合があります。

Copy to Clipboard Toggle word wrap
[ssl:error] [pid 125757:tid 140436077168384] [client 999.999.999.999:99999] AH: verify client post handshake
[ssl:error] [pid 125757:tid 140436077168384] [client 999.999.999.999:99999] AH10158: cannot perform post-handshake authentication
[ssl:error] [pid 125757:tid 140436077168384] SSL Library Error: error:14268117:SSL routines:SSL_verify_client_post_handshake:extension not received

これは、最新バージョンのブラウザーで TLS Post-Handshake Authentication (PHA) がデフォルトで有効になっていないか、PHA をサポートしていないためです。スマートカード認証で IdM Web UI にアクセスする場合など、Web サイトの一部にのみ TLS クライアント証明書を必要とする場合は、PHA が必要です。

Mozilla Firefox 68 以降でこの問題を解決するには、TLS PHA を有効にします。

  1. アドレスバーに about:config と入力して、Mozilla Firefox 設定メニューにアクセスします。
  2. 検索バーに security.tls.enable_post_handshake_auth と入力します。
  3. トグルボタンをクリックして、パラメーターを true に設定します。

現在 PHA をサポートしていない Chrome でこの問題を解決するには、TLS v1.3 を無効にします。

  1. /etc/httpd/conf.d/ssl.conf 設定ファイルを開きます。
  2. -TLSv1.3SSLProtocol オプションに追加します。

    Copy to Clipboard Toggle word wrap
    SSLProtocol all -TLSv1 -TLSv1.1 -TLSv1.3
  3. httpd サービスを再起動します。

    Copy to Clipboard Toggle word wrap
    service httpd restart

IdM は ssl.conf ファイルを管理するため、パッケージの更新時にそのコンテンツが上書きされる可能性があることに注意してください。IdM パッケージの更新後に、カスタム設定を確認します。

5.3. Web UI へのアクセス

次の手順では、パスワードを使用して、IdM (Identity Management) Web UI に最初にログインする方法を説明します。

最初のログイン後に、IdM サーバーを認証するように設定できます。

手順

  1. ブラウザーのアドレスバーに、IdM サーバーの URL を入力します。名前は次の例のようになります。

    Copy to Clipboard Toggle word wrap
    https://server.example.com

    server.example.com を、IdM サーバーの DNS 名に変更するだけです。

    これで、ブラウザーに IdM Web UI ログイン画面が開きます。

    Screenshot of the IdM Web UI accessed within a web browser displaying a "Username" field and a "Password" field. There is a blue "Log in" button below and to the right of those two fields.

    • サーバーが応答しない、またはログイン画面が開かない場合は、接続している IdM サーバーの DNS 設定を確認してください。
    • 自己署名証明書を使用する場合は、ブラウザーに警告が表示されます。証明書を確認し、セキュリティー例外を許可して、ログインを続行します。

      セキュリティーの例外を回避するために、認証局が署名した証明書をインストールします。

  2. Web UI ログイン画面で、IdM サーバーのインストール時に追加した管理者アカウントの認証情報を入力します。

    詳細は Identity Management サーバーのインストール: 統合 DNS と統合 CA の場合 を参照してください。

    IdM サーバーに、個人アカウントの認証情報がすでに入力されている場合は、それを入力できます。

    A Screenshot of the IdM Web UI with the "Username" field filled in with "admin" and the "Password" field displays several black circles obfuscating the password by replacing the characters tat were typed in.

  3. Log in をクリックします。

ログインに成功したら、IdM サーバーの設定を開始できます。

第6章 Web UI で IdM にログイン: Kerberos チケットの使用

IdM Web UI への Kerberos ログインと、Kerberos 認証を使用した IdM へのアクセスを有効にするように環境を設定する方法を詳しく説明します。

前提条件

6.1. Identity Management における Kerberos 認証

Identity Management (IdM) は、シングルサインオンに対応する Kerberos プロトコルを使用します。シングルサインオン認証により、ユーザーが正しいユーザー名およびパスワードを一度入力すれば、再度システムに認証情報を求められることなく、Identity Management サービスにアクセスできます。

DNS および証明書の設定が適切に設定されている場合は、インストール直後に、IdM サーバーが Kerberos 認証を提供します。詳細は、Identity Management のインストール を参照してください。

ホストで Kerberos 認証を使用するには、以下をインストールします。

6.2. kinit による IdM への手動ログイン

kinit ユーティリティーを使用して Identity Management (IdM) 環境に対して手動で認証するには、次の手順に従います。kinit ユーティリティーは、IdM ユーザーの代わりに Kerberos の TGT (Ticket-Granting Ticket) を取得して、キャッシュに格納します。

この手順は、最初の Kerberos TGT を破棄したか、有効期限が切れている場合にのみ使用します。ローカルマシンに、IdM ユーザーとしてログインすると、IdM に自動的にログインします。これは、ログイン後に IdM リソースにアクセスするのに kinit ユーティリティーを使用する必要がないことを示しています。

手順

  • 現在ローカルシステムにログインしているユーザーのユーザー名でログインするには、ユーザー名を指定せずに kinit を使用します。たとえば、ローカルシステムに <example_user> としてログインしている場合は次のようになります。

    Copy to Clipboard Toggle word wrap
    [example_user@server ~]$ kinit
    Password for example_user@EXAMPLE.COM:
    [example_user@server ~]$

    ローカルユーザーのユーザー名と、IdM のユーザーエントリーが一致しないと、認証に失敗します。

    Copy to Clipboard Toggle word wrap
    [example_user@server ~]$ kinit
    kinit: Client 'example_user@EXAMPLE.COM' not found in Kerberos database while getting initial credentials
  • ローカルユーザー名に対応しない Kerberos プリンシパルを使用するには、必要なユーザー名を kinit ユーティリティーに渡します。たとえば、admin ユーザーとしてログインするには、次のコマンドを実行します。

    Copy to Clipboard Toggle word wrap
    [example_user@server ~]$ kinit admin
    Password for admin@EXAMPLE.COM:
    [example_user@server ~]$
注記

kinit -kt KDB: user@EXAMPLE.COM を使用したユーザーチケットの要求は無効です。詳細は、ソリューション記事 Why kinit -kt KDB: user@EXAMPLE.COM no longer work after CVE-2024-3183 を参照してください。

検証

  • ログインが成功したことを確認するには、klist ユーティリティーを使用して、キャッシュされた TGT を表示します。以下の例では、キャッシュに example_user プリンシパルのチケットが含まれています。これは、このホストでは IdM サービスにアクセスするのは、example_user にのみ許可されていることを示しています。

    Copy to Clipboard Toggle word wrap
    $ klist
    Ticket cache: KEYRING:persistent:0:0
    Default principal: example_user@EXAMPLE.COM
    
    Valid starting     	Expires            	Service principal
    11/10/2019 08:35:45  	11/10/2019 18:35:45  	krbtgt/EXAMPLE.COM@EXAMPLE.COM

6.3. Kerberos 認証用のブラウザーの設定

Kerberos チケットによる認証を有効にするには、ブラウザーの設定を変更する必要がある場合があります。

以下の手順は、IdM ドメインにアクセスする Kerberos ネゴシエーションに対応するのに役に立ちます。

各ブラウザーは Kerberos を異なる方法でサポートしており、異なる設定が必要です。IdM Web UI には、次のブラウザーに関するガイドラインが含まれています。

  • Firefox
  • Chrome

手順

  1. Web ブラウザーで、WebUI ログインダイアログを開きます。
  2. Web UI ログイン画面でブラウザー設定のリンクをクリックします。

    A screenshot of the IdM Web UI log in page with empty entry fields for the Username and Password and a blue "Log in" button below those fields. Text to the right of the "Log in" button explains "to log in with Kerberos please make sure you have valid tickets (obtainable via kinit) and configured the browser correctly then click Log in." The URL for the word "configured" has been highlighted.

  3. 設定ページの手順に従います。

    A screenshot of a web browser with instructions for "Browser Kerberos Setup."

セットアップが完了したら、IdM Web UI に戻り、ログイン をクリックします。

6.4. Kerberos チケットで Web UI へのログイン

Kerberos Ticket-Granting Ticket (TGT) を使用して IdM Web UI にログインするには、次の手順に従います。

TGT は、事前定義された時間で有効期限が切れます。デフォルトの時間間隔は 24 時間で、IdM Web UI でそれを変更できます。

期限が切れたら、チケットを更新する必要があります。

  • kinit コマンドの使用。
  • Web UI ログインダイアログで、IdM ログイン認証情報を使用

手順

  • IdM Web UI を開きます。

    Kerberos 認証が正しく機能し、有効なチケットがある場合は、自動的に認証されて Web UI が開きます。

    チケットの有効期限が切れている場合は、最初に認証情報を使用して認証する必要があります。ただし、次からはログインダイアログを開かずに IdM Web UI が自動的に開きます。

    エラーメッセージ Authentication with Kerberos failed が表示された場合は、ブラウザーが Kerberos 認証用に設定されていることを確認してください。Kerberos 認証用のブラウザーの設定 を参照してください。

    ユーザー名とパスワードが空白のフィールドの上にエラーが表示されている IdM Web UI ログイン画面のスクリーンショット。エラーメッセージに、"Authentication with Kerberos failed." と表示されています。

6.5. Kerberos 認証用の外部システムの設定

Identity Management (IdM) ユーザーが Kerberos 認証情報を使用して外部システムから IdM にログインできるように外部システムを設定するには、この手順に従います。

外部システムの Kerberos 認証を有効にすることは、インフラストラクチャーに、複数のレルムまたは重複ドメインが含まれている場合に特に便利です。また、ipa-client-install を実行してシステムを IdM ドメインに登録していない場合にも便利です。

IdM ドメインのメンバーではないシステムから IdM への Kerberos 認証を有効にするには、IdM 固有の Kerberos 設定ファイルを外部システムに定義します。

前提条件

  • 外部システムに krb5-workstation パッケージがインストールされている。

    パッケージがインストールされているかどうかを確認するには、次の CLI コマンドを使用します。

    Copy to Clipboard Toggle word wrap
    # yum list installed krb5-workstation
    Installed Packages
    krb5-workstation.x86_64    1.16.1-19.el8     @BaseOS

手順

  1. IdM サーバーから外部システムに /etc/krb5.conf ファイルをコピーします。以下に例を示します。

    Copy to Clipboard Toggle word wrap
    # scp /etc/krb5.conf root@externalsystem.example.com:/etc/krb5_ipa.conf
    警告

    外部マシンにある既存の krb5.conf ファイルは上書きしないでください。

  2. 外部システムで、コピーした IdM の Kerberos 設定ファイルを使用するように、端末セッションを設定します。

    Copy to Clipboard Toggle word wrap
    $ export KRB5_CONFIG=/etc/krb5_ipa.conf

    KRB5_CONFIG 変数は、ログアウトまで一時的に存在します。ログアウト時に削除されないように、この変数のファイル名を変えてエクスポートします。

  3. /etc/krb5.conf.d/ ディレクトリーの Kerberos 設定部分を、外部システムにコピーします。
  4. Kerberos 認証用のブラウザーの設定 の説明に従って、外部システムでブラウザーを設定します。

外部システムのユーザーが、kinit ユーティリティーを使用して IdM サーバーで認証できるようになりました。

6.6. Active Directory ユーザーの Web UI ログインを有効にする

Active Directory ユーザーに対して Web UI ログインを有効にするには、デフォルトの信頼ビュー で、Active Directory の各ユーザーに対して ID のオーバーライドを定義します。

手順

  • ad_user@ad.example.com の ID オーバーライドを定義するには:

    Copy to Clipboard Toggle word wrap
    [admin@server ~]$ ipa idoverrideuser-add 'Default Trust View' ad_user@ad.example.com

第7章 ワンタイムパスワードを使用した Identity Management Web UI へのログイン

IdM Web UI へのアクセスは、いくつかの方法を使用して保護できます。基本的なものはパスワード認証です。

パスワード認証のセキュリティーを向上させるために、2 つ目の手順を追加して、自動生成ワンタイムパスワード (OTP) を要求できます。最も一般的な使用方法は、ユーザーアカウントに関連付けられたパスワードと、ハードウェアまたはソフトウェアのトークンにより生成された期限付きワンタイムパスワードを組み合わせることです。

以下のセクションでは、次のことができます。

  • IdM で OTP 認証がどう機能するかを理解する。
  • IdM サーバーで OTP 認証を設定する。
  • IdM で OTP バリデーション用に RADIUS サーバーを設定する。
  • OTP トークンを作成し、そのトークンを、電話の FreeOTP アプリと同期する。
  • ユーザーパスワードとワンタイムパスワードの組み合わせて、IdM Web UI に対して認証する。
  • Web UI でトークンを再同期する。
  • OTP ユーザーまたは RADIUS ユーザーとして IdM チケット許可チケットを取得する
  • すべての LDAP クライアントに OTP の使用を強制する

7.1. Identity Management におけるワンタイムパスワード (OTP) 認証

ワンタイムパスワードにより、認証セキュリティーに関する手順が追加されます。認証には、パスワードと自動的に生成されたワンタイムパスワードが使用されます。

ワンタイムパスワードを生成するには、ハードウェアまたはソフトウェアのトークンを使用できます。IdM は、ソフトウェアトークンとハードウェアトークンの両方をサポートします。

アイデンティティー Management は、次の標準 OTP メカニズムをサポートしています。

  • HMAC ベースのワンタイムパスワード (HOTP) アルゴリズムは、カウンターに基づいています。HMAC は、Hashed Message Authentication Code (ハッシュメッセージ認証コード) を表しています。
  • 時間ベースのワンタイムパスワード (TOTP) アルゴリズムは、時間ベースの移動要素に対応する HOTP の拡張機能です。
重要

IdM は、Active Directory 信頼ユーザーの OTP ログインに対応していません。

7.2. Web UI でのワンタイムパスワードの有効化

Identity Management (IdM) 管理者は、IdM ユーザーに対して 2 要素認証 (2FA) をシステム全体でまたは個別に有効にすることができます。ユーザーは、コマンドラインまたは Web UI ログインダイアログの専用フィールドで、通常のパスワードの後にワンタイムパスワード (OTP) を入力します。これらのパスワードの間にはスペースを入れません。

2FA を有効にしても、2FA が強制されるわけではありません。LDAP バインドに基づくログインを使用する場合、IdM ユーザーはパスワードを入力するだけで認証できます。ただし、krb5 ベースのログインを使用する場合は、2FA が強制されます。

すべての LDAP クライアントに OTP の使用を強制することにより、LDAP バインドに 2FA を強制するオプションがあることに注意してください。詳細は、すべての LDAP クライアントに OTP の使用を強制する を参照してください。

IdM Web UI を使用して、個々の example.user IdM ユーザーに対して 2FA を有効にするには、以下の手順を完了します。

前提条件

  • 管理者権限

手順

  1. IdM admin 権限を使用して IdM Web UI にログインします。
  2. Identity → Users → Active users タブを開きます。

    A screenshot of the IdM Web UI displaying the "Active Users" page which is a sub-page of the Users submenu from the Identity tab.

  3. example.user を選択してユーザー設定を開きます。
  4. User authentication types で、Two factor authentication (password + OTP) を選択します。
  5. Save をクリックします。

この時点で、IdM ユーザーに対して OTP 認証が有効になります。

次に、管理者権限を持つユーザーまたは example.user が、example.user アカウントに新しいトークン ID を割り当てる必要があります。

7.3. IdM での OTP バリデーション用の RADIUS サーバー設定

プロプライエタリーのワンタイムパスワード (OTP) ソリューションから Identity Management (IdM) ネイティブの OTP ソリューションへの大規模なデプロイメントの移行を可能にするために、IdM では、ユーザーのサブセットに対して OTP バリデーションをサードパーティーの RADIUS サーバーにオフロードすることができます。管理者は、各プロキシーが単一の RADIUS サーバーのみを参照できる RADIUS プロキシーのセットを作成します。複数のサーバーに対応する必要がある場合は、複数の RADIUS サーバーを参照する仮想 IP ソリューションを作成することが推奨されます。

このようなソリューションは、keepalived デーモンなどを使用して、RHEL IdM の外部でビルドする必要があります。次に、管理者はこれらのプロキシーセットのいずれかをユーザーに割り当てます。ユーザーが RADIUS プロキシーが設定されている限り、IdM は他のすべての認証メカニズムをバイパスします。

注記

IdM は、サードパーティーシステムのトークンに対するトークン管理または同期のサポートを提供しません。

OTP バリデーション用に RADIUS サーバーを設定し、プロキシーサーバーにユーザーを追加する手順を実行します。

前提条件

手順

  1. RADIUS プロキシーを追加します。

    Copy to Clipboard Toggle word wrap
    $ ipa radiusproxy-add proxy_name --secret secret

    このコマンドは、必要な情報を挿入するように求められます。

    RADIUS プロキシーの設定には、クライアントとサーバーとの間の共通のシークレットを使用して認証情報をラップする必要があります。--secret パラメーターにこのシークレットを指定します。

  2. 追加したプロキシーにユーザーを割り当てます。

    Copy to Clipboard Toggle word wrap
    ipa user-mod radiususer --radius=proxy_name
  3. 必要に応じて、RADIUS に送信するユーザー名を設定します。

    Copy to Clipboard Toggle word wrap
    ipa user-mod radiususer --radius-username=radius_user

これにより、RADIUS プロキシーサーバーがユーザーの OTP 認証の処理を開始します。

ユーザーが IdM ネイティブ OTP システムに移行する準備ができたら、ユーザーの RADIUS プロキシー割り当てを削除するだけです。

7.3.1. 低速ネットワークで RADIUS サーバーを実行する場合の KDC タイムアウト値の変更

低速ネットワークで RADIUS プロキシーを実行している場合などの特定の状況では、ユーザーがトークンを入力するのを待機している間に接続がタイムアウトして、RADIUS サーバーが応答する前に Identity Management (IdM) Kerberos Distribution Center (KDC) が接続を閉じます。

KDC のタイムアウト設定を変更するには、以下を実行します。

  1. /var/kerberos/krb5kdc/kdc.conf ファイルの [otp] セクションで timeout パラメーターの値を変更します。たとえば、タイムアウトを 120 秒に設定するには、以下のようにします。

    Copy to Clipboard Toggle word wrap
    [otp]
    DEFAULT = {
      timeout = 120
      ...
    }
  2. krb5kdc サービスを再起動します。

    Copy to Clipboard Toggle word wrap
    # systemctl restart krb5kdc

関連情報

7.4. Web UI での OTP トークンの追加

次のセクションでは、IdM Web UI とソフトウェアトークンジェネレーターにトークンを追加する方法について説明します。

前提条件

  • IdM サーバーでアクティブなユーザーアカウント。
  • 管理者が、IdM Web UI の特定のユーザーアカウントに対して OTP を有効にしている。
  • FreeOTP などの OTP トークンを生成するソフトウェアデバイス。

手順

  1. ユーザー名とパスワードを使用して IdM Web UI にログインします。
  2. Authentication → OTP Tokens タブを開いて、携帯電話でトークンを作成します。
  3. Add をクリックします。

    Screenshot of the IdM Web UI highlighting the Add button near the upper-right of the OTP Tokens page which is a sub-page of the Authentication section

  4. Add OTP token ダイアログボックスに何も入力せず、Add をクリックします。

    この段階で、IdM サーバーはデフォルトパラメーターを使用してトークンを作成し、QR コード付きページを開きます。

  5. QR コードを携帯電話にコピーします。
  6. OK をクリックして QR コードを閉じます。

これで、ワンタイムパスワードを生成して、IdM Web UI にログインできるようになりました。

Screenshot of the FreeOTP application from a mobile telephone displaying two entries for OTP tokens. The first OTP token is for the example.user@IDM.EXAMPLE.COM domain and its entry displays a 6-digit OTP while its timer is running out.

7.5. ワンタイムパスワードで Web UI にログイン

ワンタイムパスワード (OTP) を使用して IdM Web UI に初めてログインする際には、この手順に従います。

前提条件

  • OTP 認証を使用しているユーザーアカウントに対して、Identity Management サーバーで OTP 設定が有効になっている。管理者およびユーザー自身が、OTP を有効にできる。

    OTP 設定を有効にする場合は、Web UI でワンタイムパスワードの有効化 を参照してください。

  • 設定された OTP トークンを生成するハードウェアまたはソフトウェアのデバイス

手順

  1. Identity Management ログイン画面で、自身のユーザー名、または IdM サーバー管理者アカウントのユーザー名を入力します。
  2. 上記で入力したユーザーのパスワードを追加します。
  3. デバイスでワンタイムパスワードを生成します。
  4. スペースを入れずにパスワードの直後にワンタイムパスワードを入力します。
  5. Log in をクリックします。

    認証に失敗した場合は、OTP トークンを同期します。

    CA が自己署名証明書を使用する場合は、ブラウザーに警告が表示されます。証明書を確認し、セキュリティー例外を許可して、ログインを続行します。

    IdM Web UI が開かない場合は、Identity Management サーバーの DNS 設定を確認してください。

ログインに成功すると、IdM Web UI が開きます。

7.6. Web UI で OTP トークンの同期

OTP (ワンタイムパスワード) でのログインに失敗した場合、OTP トークンは正しく同期しません。

以下のテキストは、トークンの再同期を説明します。

前提条件

  • OTP トークンを生成するデバイス。

手順

  1. IdM Web UI ログイン画面で、Sync OTP Token をクリックします。

    A screenshot of the IdM Web UI log in page. The "Username" and "Password" fields are empty. A link to "Sync OTP Token" at the bottom right next to the "Log In" button is highlighted.

  2. ログイン画面で、ユーザー名と、Identity Management パスワードを入力します。
  3. ワンタイムパスワードを生成し、First OTP フィールドに入力します。
  4. ワンタイムパスワードをもう一度生成し、Second OTP フィールドに入力します。
  5. オプション: トークン ID を入力します。

    A screenshot of the screen to change the OTP token. The "Username" field has been filled in with "admin". The password in the "Password" field has been obfuscated with solid circles. The "First OTP" and "Second OTP" fields also have their 6-character entries obfuscated. The last field is labeled "Token ID" and has 16 hexadecimal characters such as "18c5d06cfcbd4927". There are "Cancel" and "Sync OTP Token" buttons at the bottom right.

  6. Sync OTP Token をクリックします。

同期が成功すると、IdM サーバーにログインできます。

7.7. 期限切れパスワードの変更

アイデンティティー Management の管理者は、次回のログイン時にパスワードの変更を強制できます。この場合、パスワードを変更するまで IdM Web UI に正常にログインすることはできません。

パスワードの有効期限は、Web UI に初めてログインしたときに発生する可能性があります。

有効期限のパスワードのダイアログが表示されたら、手順の指示に従ってください。

前提条件

  • IdM サーバー上のアクティブなアカウント。

手順

  1. パスワード有効期限のログイン画面に、ユーザー名を入力します。
  2. 上記で入力したユーザーのパスワードを追加します。
  3. ワンタイムパスワード認証を使用する場合は、OTP フィールドでワンタイムパスワードを生成します。
  4. 確認のために新しいパスワードを 2 回入力します。
  5. Reset Password をクリックします。

    A screenshot of the IdM Web UI with a banner across the top that states "Your password has expired. Please enter a new password." The "Username" field displays "example.user" and cannot be edited. The following fields have been filled in but their contents have been replaced with dots to obfuscate the passwords: "Current Password" - "OTP" - "New Password" - "Verify Password."

パスワードの変更が成功すると、通常のログインダイアログが表示されます。新しいパスワードでログインします。

7.8. OTP または RADIUS ユーザーとして IdM チケット許可チケットを取得する

OTP ユーザーとして Kerberos TGT (Ticket-granting ticket) を取得するには、匿名の Kerberos チケットを要求し、Secure Tunneling (FAST) チャネルを介したフレキシブル認証を有効にして、Kerberos クライアントと Kerberos ディストリビューションセンター (KDC) 間のセキュアな接続を提供します。

前提条件

  • IdM クライアントと IdM サーバーが RHEL 8.7 以降を使用している。
  • IdM クライアントと IdM サーバーが SSSD 2.7.0 以降を使用している。
  • 必要なユーザーアカウントに対して OTP が有効になっている。

手順

  1. 次のコマンドを実行して認証情報キャッシュを初期化します。

    Copy to Clipboard Toggle word wrap
    [root@client ~]# kinit -n @IDM.EXAMPLE.COM -c FILE:armor.ccache

    このコマンドは、新しい Kerberos チケットを要求するたびに指定する必要がある armor.ccache ファイルを作成することに注意してください。

  2. 次のコマンドを実行して Kerberos チケットを要求します。

    Copy to Clipboard Toggle word wrap
    [root@client ~]# kinit -T FILE:armor.ccache <username>@IDM.EXAMPLE.COM
    Enter your OTP Token Value.

検証

  • Kerberos チケット情報を表示します。

    Copy to Clipboard Toggle word wrap
    [root@client ~]# klist -C
    Ticket cache: KCM:0:58420
    Default principal: <username>@IDM.EXAMPLE.COM
    
    Valid starting     Expires            Service principal
    05/09/22 07:48:23  05/10/22 07:03:07  krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM
    config: fast_avail(krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM) = yes
    08/17/2022 20:22:45  08/18/2022 20:22:43  krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM
    config: pa_type(krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM) = 141

    pa_type = 141 は OTP/RADIUS 認証を示します。

7.9. すべての LDAP クライアントに OTP の使用を強制する

RHEL IdM では、2 要素 (OTP) 認証が設定されたユーザーアカウントの LDAP サーバー認証のデフォルトの動作を設定できます。OTP が強制されている場合、LDAP クライアントは、関連付けられた OTP トークンを持つユーザーに対して、単一要素認証 (パスワード) を使用して LDAP サーバーに対して認証することはできません。RHEL IdM は、データなしの OID 2.16.840.1.113730.3.8.10.7 を使用した特別な LDAP 制御を使用して、Kerberos バックエンドを通じてこの方法をすでに実施しています。

手順

  • すべての LDAP クライアントに OTP の使用を強制するには、次のコマンドを使用します。

    Copy to Clipboard Toggle word wrap
    $ ipa config-mod --addattr ipaconfigstring=EnforceLDAPOTP
  • すべての LDAP クライアントに対して以前の OTP 動作に戻すには、次のコマンドを使用します。

    Copy to Clipboard Toggle word wrap
    $ ipa config-mod --delattr ipaconfigstring=EnforceLDAPOTP

第8章 IdM で SSSD を使用した認証のトラブルシューティング

Identity Management (IdM) 環境の認証には、さまざまなコンポーネントが含まれます。

IdM クライアントで、以下を行います。

  • SSSD サービス
  • Name Services Switch (NSS)
  • PAM (プラグ可能な認証モジュール)

IdM サーバーで、以下を行います。

  • SSSD サービス
  • IdM Directory Server。
  • IdM Kerberos Key Distribution Center (KDC)

Active Directory (AD) ユーザーとして認証している場合は、以下を行います。

  • AD ドメインコントローラー上の Directory Server。
  • AD ドメインコントローラー上の Kerberos サーバー

ユーザーを認証するには、SSSD サービスで以下の機能を実行できる必要があります。

  • 認証サーバーからユーザー情報を取得します。
  • ユーザーに認証情報を求められ、それらの認証情報を認証サーバーに渡し、結果を処理します。

トラブルシューティングを実行するには、SSSD サービスとユーザー情報を保存するサーバー間で情報がどのように流れるかを把握する必要があります。これにより、問題が発生している場所を特定し、潜在的な原因を絞り込むことができます。

8.1. SSSD で IdM ユーザー情報を取得するデータフロー

以下の図は、getent passwd <idm_user_name> コマンドを使用して IdM ユーザー情報の要求時に IdM クライアントと IdM サーバーとの間の情報フローを簡単に説明します。

getent passwd を使用してユーザー情報を取得する場合の IdM クライアントとサーバー間の情報フロー

A diagram with numbered arrows representing the flow of information between an IdM client and an IdM server. The following numbered list describes each step in the process.

  1. getent コマンドは、libc ライブラリーから getpwnam 呼び出しをトリガーします。
  2. libc ライブラリーは、/etc/nsswitch.conf 設定ファイルを参照して、どのサービスがユーザー情報を提供するかを確認し、SSSD サービスのエントリー sss を検出します。
  3. libc ライブラリーは、nss_sss モジュールを開きます。
  4. nss_sss モジュールは、ユーザー情報のメモリーマップキャッシュを確認します。データがキャッシュに存在する場合は、nss_sss モジュールがそれを返します。
  5. ユーザー情報が memory-mapped キャッシュにない場合、リクエストは SSSD sssd_nss レスポンダープロセスに渡されます。
  6. SSSD サービスはキャッシュをチェックします。データがキャッシュに存在し、有効な場合は、sssd_nss レスポンダーがキャッシュからデータを読み取って、アプリケーションに返します。
  7. データがキャッシュにない場合や期限切れである場合、sssd_nss レスポンダーは適切なバックエンドプロセスに対してクエリーを実行し、応答を待機します。SSSD サービスは、sssd.conf 設定ファイルで id_provider=ipa を設定して有効にした、IdM 環境の IPA バックエンドを使用します。
  8. sssd_be バックエンドプロセスは IdM サーバーに接続して、IdM LDAP Directory Server から情報を要求します。
  9. IdM サーバーの SSSD バックエンドは、IdM クライアントの SSSD バックエンドプロセスに対応します。
  10. クライアントの SSSD バックエンドは、生成されるデータを SSSD キャッシュに保存し、キャッシュが更新されたレスポンダープロセスを警告します。
  11. sssd_nss フロントエンドレスプロセスが SSSD キャッシュから情報を取得します。
  12. sssd_nss レスポンダーは、nss_sss レスポンダーにユーザー情報を送信し、リクエストを完了します。
  13. libc ライブラリーは、要求したアプリケーションにユーザー情報を返します。

8.2. SSSD で AD ユーザー情報を取得する際のデータフロー

IdM 環境と Active Directory( AD) ドメインとの間でフォレスト間の信頼を確立した場合は、IdM クライアントの AD ユーザー情報を取得する際に情報フローが、AD ユーザーデータベースへの追加の手順とともに、IdM クライアントの AD ユーザー情報の取得時に非常に似ています。

次の図は、ユーザーが getent passwd <user_name@ad.example.com> コマンドを使用して AD ユーザーに関する情報を要求した場合の情報フローを簡略化したものです。この図には、SSSD で IdM ユーザー情報を取得するデータフロー が含まれません。IdM クライアントの SSSD サービス、IdM サーバーの SSSD サービス、および AD ドメインコントローラー上の LDAP データベースとの間の通信にフォーカスします。

IdM クライアント、IdM サーバー、および AD ドメインコントローラー間の AD ユーザー情報を取得する場合の情報フロー

A diagram with numbered arrows representing the flow of information between an IdM client, an IdM server, and an AD Domain Controller. The following numbered list describes each step in the process.

  1. IdM クライアントは、AD ユーザー情報に関するローカルの SSSD キャッシュを検索します。
  2. IdM クライアントにユーザー情報がない場合や、情報が古い場合に、クライアントの SSSD サービスが IdM サーバーの extdom_extop プラグインに問い合わせて、LDAP 拡張操作を実行し、情報を要求します。
  3. IdM サーバーの SSSD サービスは、ローカルキャッシュで AD ユーザー情報を検索します。
  4. IdM サーバーに SSSD キャッシュにユーザー情報がない場合や、その情報が古い場合は、LDAP 検索を実行して、AD ドメインコントローラーからユーザー情報を要求します。
  5. IdM サーバーの SSSD サービスは、AD ドメインコントローラーから AD ユーザー情報を受け取り、キャッシュに保存します。
  6. extdom_extop プラグインは、LDAP 拡張操作を完了する IdM サーバーの SSSD サービスから情報を受信します。
  7. IdM クライアントの SSSD サービスは、LDAP 拡張操作から AD ユーザー情報を受信します。
  8. IdM クライアントは、AD ユーザー情報を SSSD キャッシュに保存し、要求したアプリケーションに情報を返します。

8.3. IdM で SSSD を使用してユーザーとして認証する場合にデータフロー

IdM サーバーまたはクライアントでユーザーとして認証するには、以下のコンポーネントが必要です。

  • sshd サービスなど、認証要求を開始するサービス。
  • PAM (プラグ可能な認証モジュール) ライブラリーとそのモジュール。
  • SSSD サービス、そのレスポンダー、およびバックエンド。
  • スマートカード認証が設定されている場合は、スマートカードリーダー。
  • 認証サーバー:

    • IdM ユーザーは、IdM Kerberos Key Distribution Center (KDC) に対して認証されます。
    • Active Directory (AD) ユーザーは、AD ドメインコントローラー (DC) に対して認証されます。

以下の図は、コマンドラインの SSH サービスを介してホストにローカルでログインしようとすると、情報フローを簡単に認証する必要がある場合を示しています。

認証試行中の IdM クライアントと IdM サーバーまたは AD ドメインコントローラー間の情報の流れ

A diagram with numbered arrows representing the flow of information between an IdM client and an IdM server or AD Domain Controller during an authentication attempt. The following numbered list describes each step in the process.

  1. ssh コマンドで認証を試みると、libpam ライブラリーがトリガーされます。
  2. libpam ライブラリーは、認証の試行を要求するサービスに対応する /etc/pam.d/ ディレクトリーの PAM ファイルを参照します。この例では、ローカルホストの SSH サービス経由で認証されている例では、pam_sss.so ライブラリーは /etc/pam.d/system-auth 設定ファイルを確認し、SSSD PAM の pam_sss.so エントリーを検出します。

    Copy to Clipboard Toggle word wrap
    auth    sufficient    pam_sss.so
  3. 利用可能な認証方法を判断するため、libpam ライブラリーは pam_sss モジュールを開き、SSSD サービスの sssd _pam PAM レスポンダーに SSS_PAM_PREAUTH リクエストを送信します。
  4. スマートカード認証が設定されていると、SSSD サービスは一時的な p11_child プロセスを生成し、スマートカードを確認し、そこから証明書を取得します。
  5. ユーザーにスマートカード認証が設定されていると、sssd_pam レスポンダーは、スマートカードの証明書とユーザーを照合します。sssd_pam レスポンダーは、グループメンバーシップがアクセス制御に影響する可能性があるため、ユーザーが属するグループの検索も実行します。
  6. sssd_pam レスポンダーは、SSS_PAM_PREAUTH 要求を sssd_be バックエンドレスに送信し、パスワードや 2 要素認証などのサーバーがサポートする認証方法を表示します。SSSD サービスが IPA レスポンダーを使用する IdM 環境では、デフォルトの認証方法は Kerberos です。この例では、ユーザーは簡単な Kerberos パスワードで認証されます。
  7. sssd_be レスポンダーは一時的な krb5_child プロセスを起動します。
  8. krb5_child プロセスは、IdM サーバーの KDC に連絡して、利用可能な認証方法を確認します。
  9. KDC はリクエストに応答します。

    1. krb5_child プロセスは応答を評価し、結果を sssd_be バックエンドプロセスに送信します。
    2. sssd_be バックエンドプロセスが結果を受け取ります。
    3. sssd_pam レスポンダーは結果を受け取ります。
    4. pam_sss モジュールは結果を受け取ります。
  10. ユーザーにパスワード認証が設定されていると、pam_sss モジュールにより、パスワードの入力が求められます。スマートカード認証が設定されていると、pam_sss モジュールにより、スマートカードの PIN の入力が求められます。
  11. モジュールは、ユーザー名とパスワードを使用して SSS_PAM_ AUTHENTICATE 要求を送信します。これは以下が実行されます。

    1. sssd_pam レスポンダー。
    2. sssd_be バックエンドプロセス。
  12. sssd_be プロセスは、KDC に問い合わせる一時的な krb5_child プロセスを起動します。
  13. krb5_child process は、ユーザー名とパスワードを使用して KDC から Kerberos チケット保証チケット (TGT) の取得を試みます。
  14. krb5_child プロセスは、認証の試行の結果を受け取ります。
  15. krb5_child プロセス:

    1. TGT を認証情報キャッシュに保存します。
    2. sssd_be バックエンドプロセスに認証結果を返します。
  16. 認証結果は sssd_be プロセスから以下を行います。

    1. sssd_pam レスポンダー。
    2. pam_sss モジュール。
  17. pam_sss モジュールは、その他のアプリケーションが参照できるように、環境変数をユーザーの TGT の場所で設定します。

8.4. 認証問題の範囲の制限

ユーザーを正常に認証するには、ユーザー情報を保存するデータベースから SSSD サービスでユーザー情報を取得できる必要があります。以下の手順では、認証プロセスの異なるコンポーネントをテストする手順を説明します。これにより、ユーザーがログインできない場合に認証の問題のスコープを制限する方法を説明します。

手順

  1. SSSD サービスおよびそのプロセスが実行していることを確認します。

    Copy to Clipboard Toggle word wrap
    [root@client ~]# pstree -a | grep sssd
      |-sssd -i --logger=files
      |   |-sssd_be --domain implicit_files --uid 0 --gid 0 --logger=files
      |   |-sssd_be --domain <domain_name> --uid 0 --gid 0 --logger=files
      |   |-sssd_ifp --uid 0 --gid 0 --logger=files
      |   |-sssd_nss --uid 0 --gid 0 --logger=files
      |   |-sssd_pac --uid 0 --gid 0 --logger=files
      |   |-sssd_pam --uid 0 --gid 0 --logger=files
      |   |-sssd_ssh --uid 0 --gid 0 --logger=files
      |   `-sssd_sudo --uid 0 --gid 0 --logger=files
      |-sssd_kcm --uid 0 --gid 0 --logger=files
  2. クライアントが IP アドレスを使用してユーザーデータベースサーバーに接続できることを確認します。

    Copy to Clipboard Toggle word wrap
    [user@client ~]$ ping <IP_address_of_the_database_server>

    この手順が失敗した場合は、ネットワークとファイアウォール設定が、IdM クライアントとサーバー間の直接通信が許可されていることを確認してください。firewalld の使用および設定 を参照してください。

  3. クライアントが、完全修飾ホスト名を使用して IdM LDAP サーバー (IdM ユーザー用) または AD ドメインコントローラー (AD ユーザーの場合) を検出して連絡できることを確認します。

    Copy to Clipboard Toggle word wrap
    [user@client ~]$ dig -t SRV ldap._tcp.<domain>@<server_name>
    [user@client ~]$ ping <fully_qualified_host_name_of_the_server>

    この手順が失敗した場合は、/etc/resolv.conf ファイルを含む Dynamic Name Service (DNS) の設定を確認してください。DNS サーバーの順序の設定 を参照してください。

    注記

    デフォルトでは、SSSD サービスは DNS サービス (SRV) レコードを介して LDAP サーバーと AD DC を自動的に検出しようとします。SSSD を特定のサーバーに制限するには、sssd.conf 設定ファイルで次のオプションを使用してサーバーを定義します。

    • ipa_server = <fully_qualified_host_name_of_the_server>
    • ad_server = <fully_qualified_host_name_of_the_server>
    • ldap_uri = <fully_qualified_host_name_of_the_server>

    このオプションを使用する場合は、そのオプションに記載されているサーバーと通信できることを確認します。

  4. クライアントが LDAP サーバーに対して認証でき、ldapsearch コマンドでユーザー情報を取得できることを確認します。

    1. LDAP サーバーが server.example.com などの IdM サーバーである場合は、ホストの Kerberos チケットを取得し、ホスト Kerberos プリンシパルで認証されるデータベース検索を実行します。

      Copy to Clipboard Toggle word wrap
      [user@client ~]$ kinit -k 'host/client.example.com@EXAMPLE.COM'
      [user@client ~]$ ldapsearch -LLL -Y GSSAPI -h server.example.com -b “dc=example,dc=com” uid=<idm_user>
    2. LDAP サーバーが server.example.com などの Active Directory (AD) Domain Controller (DC) サーバーである場合は、ホストの Kerberos チケットを取得し、ホスト Kerberos プリンシパルで認証されるデータベース検索を実行します。

      Copy to Clipboard Toggle word wrap
      [user@client ~]$ kinit -k 'CLIENT$@AD.EXAMPLE.COM'
      [user@client ~]$ ldapsearch -LLL -Y GSSAPI -h server.ad.example.com -b “dc=example,dc=com” sAMAccountname=<idm_user>
    3. LDAP サーバーがプレーン LDAP サーバーであり、sssd.conf ファイルに ldap_default_bind_dn および ldap_default_authtok オプションを設定した場合は、同じ ldap_default_bind_dn アカウントとして認証されます。

      Copy to Clipboard Toggle word wrap
      [user@client ~]$ ldapsearch -xLLL -D "cn=ldap_default_bind_dn_value" -W -h ldapserver.example.com -b “dc=example,dc=com” uid=<idm_user>

    この手順が失敗した場合は、データベース設定で、ホストが LDAP サーバーを検索できることを確認します。

  5. SSSD サービスは Kerberos 暗号化を使用するため、ログインできないユーザーとして Kerberos チケットを取得できます。

    1. LDAP サーバーが IdM サーバーの場合:

      Copy to Clipboard Toggle word wrap
      [user@client ~]$ kinit <idm_user>
    2. LDAP サーバーデータベースが AD サーバーの場合:

      Copy to Clipboard Toggle word wrap
      [user@client ~]$ kinit <ad_user@AD.EXAMPLE.COM>

    この手順が失敗した場合は、Kerberos サーバーが適切に動作し、すべてのサーバーが同期され、ユーザーアカウントがロックされていないことを確認します。

  6. コマンドラインに関するユーザー情報を取得できることを確認します。

    Copy to Clipboard Toggle word wrap
    [user@client ~]$ getent passwd <idm_user>
    [user@client ~]$ id <idm_user>

    この手順が失敗した場合は、クライアントの SSSD サービスがユーザーデータベースから情報を受信できることを確認します。

    1. /var/log/messages ログファイルのエラーを確認します。
    2. SSSD サービスで詳細なロギングを有効にし、デバッグログを収集して、問題のソースに関するログを確認します。
    3. (オプション) Red Hat テクニカルサポートケースを作成し、収集したトラブルシューティング情報を提供します。
  7. ホスト上で sudo 権限を持っている場合は、sssctl ユーティリティーを使用して、ユーザーがログインできるかどうかを確認します。

    Copy to Clipboard Toggle word wrap
    [user@client ~]$ sudo sssctl user-checks -a auth -s ssh <idm_user>

    この手順が失敗した場合は、PAM 設定、IdM HBAC ルール、IdM RBAC ルールなどの認可設定を確認します。

    1. ユーザーの UID が、/etc/login.defs ファイルで定義されている UID_MIN 以上であることを確認してください。
    2. /var/log/secure ログファイルおよび /var/log/messages ログファイルで認証エラーを確認します。
    3. SSSD サービスで詳細なロギングを有効にし、デバッグログを収集して、問題のソースに関するログを確認します。
    4. (オプション) Red Hat テクニカルサポートケースを作成し、収集したトラブルシューティング情報を提供します。

8.5. SSSD ログファイルおよびログレベル

それぞれの SSSD サービスは、/var/log/sssd/ ディレクトリーに独自のログファイルを記録します。example.com IdM ドメインの IdM サーバーのログファイルは、以下のようになります。

Copy to Clipboard Toggle word wrap
[root@server ~]# ls -l /var/log/sssd/
total 620
-rw-------.  1 root root      0 Mar 29 09:21 krb5_child.log
-rw-------.  1 root root  14324 Mar 29 09:50 ldap_child.log
-rw-------.  1 root root 212870 Mar 29 09:50 sssd_example.com.log
-rw-------.  1 root root      0 Mar 29 09:21 sssd_ifp.log
-rw-------.  1 root root      0 Mar 29 09:21 sssd_implicit_files.log
-rw-------.  1 root root      0 Mar 29 09:21 sssd.log
-rw-------.  1 root root 219873 Mar 29 10:03 sssd_nss.log
-rw-------.  1 root root      0 Mar 29 09:21 sssd_pac.log
-rw-------.  1 root root  13105 Mar 29 09:21 sssd_pam.log
-rw-------.  1 root root   9390 Mar 29 09:21 sssd_ssh.log
-rw-------.  1 root root      0 Mar 29 09:21 sssd_sudo.log
SSSD ログファイルの目的
krb5_child.log
Kerberos 認証に関連する有効期限の短いヘルパープロセスのログファイル。
ldap_child.log
LDAP サーバーとの通信用の Kerberos チケットの取得に関連する短期ヘルパープロセスのログファイル。
sssd_<domain_name>.log

sssd.conf ファイルのドメインセクションごとに、SSSD サービスは LDAP サーバーとの通信に関する情報を別のログファイルに記録します。たとえば、example.com という名前の IdM ドメインがある環境では、SSSD サービスは sssd_example.com.log という名前のファイルのログにその情報を記録します。ホストが ad.example.com という名前の AD ドメインと直接統合されている場合は、sssd_ad.example.com.log という名前のファイルのログに情報が記録されます。

注記

IdM 環境と、AD ドメインを持つフォレスト間の信頼があると、AD ドメインに関する情報は引き続き IdM ドメインのログファイルに記録されます。

同様に、ホストが AD ドメインに直接統合されている場合は、プライマリードメインのログファイルに、子ドメインに関する情報が書き込まれます。

selinux_child.log
SELinux 情報を取得および設定する短期間ヘルパープロセスのログファイル。
sssd.log
SSSD を監視して、レスポンダーおよびバックエンドプロセスと通信するためのログファイル。
sssd_ifp.log
InfoPipe レスポンダーのログファイル。システムバスからアクセス可能なパブリック D-Bus インターフェイスを提供します。
sssd_nss.log
ユーザーおよびグループ情報を取得する Name Services Switch (NSS) レスポンダーのログファイル。
sssd_pac.log
AD Kerberos チケットから PAC を収集する Microsoft Privilege Attribute Certificate (PAC) レスポンダー用のログファイルは、PAC から PAC に関する情報を取得します。これにより、AD ユーザーを直接要求しないようにします。
sssd_pam.log
PAM (Pluggable Authentication Module) レスポンダー用のログファイルです。
sssd_ssh.log
SSH レスポンダープロセスのログファイル。
SSSD ロギングレベル

デバッグレベルを設定すると、それ下のすべてのデバッグレベルが有効になります。たとえば、debug レベルを 6 に設定すると、デバッグレベル 0 から 5 も有効になります。

表8.1 SSSD ロギングレベル
レベル説明

0

致命的な障害が発生しました。SSSD サービスが起動しなかったり、終了しないようにするエラー。これは、RHEL 8.3 以前のデフォルトのデバッグログレベルです。

1

重大なエラーSSSD サービスを終了しないものの、主要な機能は 1 つ以上正しく機能しません。

2

深刻なエラー。特定の要求または操作が失敗したことを示すエラー。これは、RHEL 8.4 以降のデフォルトのデバッグログレベルです。

3

マイナーな障害が発生しました。レベル 2 で操作の失敗がキャプチャーされたエラー。

4

設定

5

関数 データ。

6

操作関数のメッセージを追跡します。

7

内部制御 関数のメッセージトレース。

8

関数内部 変数の内容。

9

非常に 低いレベルのトレース 情報。

8.6. sssd.conf ファイルで SSSD の詳細なロギングの有効化

デフォルトでは、RHEL 8.4 以降の SSSD サービスは、重大な失敗 (デバッグレベル 2) のみをログに記録しますが、認証問題のトラブルシューティングに必要な詳細レベルではログに記録されません。

SSSD サービスの再起動時に詳細なロギングを有効にするには、/etc/sssd/sssd.conf 設定ファイルの各セクションに debug_level=<integer> オプションを追加します。ここで、<integer> の値は 0 から 9 の数字になります。デバッグレベルは最大 3 つのログで、最大 3 つのログで、レベル 8 以上では、多くの詳細なログメッセージを提供します。レベル 6 は、認証の問題のデバッグに役立ちます。

前提条件

  • sssd.conf 設定ファイルを編集し、SSSD サービスを再起動するには、root パスワードが必要です。

手順

  1. テキストエディターで /etc/sssd/sssd.conf ファイルを開きます。
  2. debug_level オプションをファイルのすべてのセクションに追加し、デバッグレベルを、選択した詳細に設定します。

    Copy to Clipboard Toggle word wrap
    [domain/<domain_name>]
    debug_level = 6
    id_provider = ipa
    ...
    
    [sssd]
    debug_level = 6
    services = nss, pam, ifp, ssh, sudo
    domains = <domain_name>
    
    [nss]
    debug_level = 6
    
    [pam]
    debug_level = 6
    
    [sudo]
    debug_level = 6
    
    [ssh]
    debug_level = 6
    
    [pac]
    debug_level = 6
    
    [ifp]
    debug_level = 6
  3. sssd.conf ファイルを保存して閉じます。
  4. SSSD サービスを再起動して、新しい設定を読み込みます。

    Copy to Clipboard Toggle word wrap
    [root@server ~]# systemctl restart sssd

8.7. sssctl コマンドを使用した SSSD の詳細なロギングの有効化

デフォルトでは、RHEL 8.4 以降の SSSD サービスは、重大な失敗 (デバッグレベル 2) のみをログに記録しますが、認証問題のトラブルシューティングに必要な詳細レベルではログに記録されません。

sssctl debug-level <integer> コマンドを使用して、コマンドラインで SSSD サービスのデバッグレベルを変更できます。ここで、<integer> の値は 0 から 9 の数字になります。デバッグレベルは最大 3 つのログで、最大 3 つのログで、レベル 8 以上では、多くの詳細なログメッセージを提供します。レベル 6 は、認証の問題のデバッグに役立ちます。

前提条件

  • sssctl コマンドを実行するには、root パスワードが必要です。

手順

  • sssctl debug-level コマンドを使用して、デバッグレベルを目的の詳細度に設定します。以下に例を示します。

    Copy to Clipboard Toggle word wrap
    [root@server ~]# sssctl debug-level 6

8.8. SSSD サービスからデバッグログを収集し、IdM サーバーによる認証問題のトラブルシューティング

IdM ユーザーが IdM サーバーへの認証を試行する際に問題が発生した場合は、サーバー上の SSSD サービスで詳細なデバッグロギングを有効にし、ユーザーに関する情報の取得を試行するログを収集します。

前提条件

  • root 権限がある。

手順

  1. IdM サーバーで詳細な SSSD デバッグロギングを有効にします。

    Copy to Clipboard Toggle word wrap
    [root@server ~]# sssctl debug-level 6
  2. 認証問題が発生しているユーザーの SSSD キャッシュでオブジェクトを無効にするため、LDAP サーバーを省略し、SSSD がすでにキャッシュされている情報を取得しません。

    Copy to Clipboard Toggle word wrap
    [root@server ~]# sssctl cache-expire -u <idm_user>
  3. 古い SSSD ログを削除して、トラブルシューティングのデータセットを最小限に抑える。

    Copy to Clipboard Toggle word wrap
    [root@server ~]# sssctl logs-remove
  4. 認証問題が発生し、試行前後にタイムスタンプを収集する際に、ユーザーが認証問題が発生しようと試みます。これらのタイムスタンプは、データセットのスコープをさらに絞り込むことができます。

    Copy to Clipboard Toggle word wrap
    [root@server sssd]# date; su <idm_user>; date
    Mon Mar 29 15:33:48 EDT 2021
    su: user idm_user does not exist
    Mon Mar 29 15:33:49 EDT 2021
  5. (オプション) 詳細な SSSD ログの収集を続行しない場合は、デバッグレベルを下げます。

    Copy to Clipboard Toggle word wrap
    [root@server ~]# sssctl debug-level 2
  6. 障害のある要求に関する情報を SSSD ログで確認します。たとえば、/var/log/sssd/sssd_example.com.log ファイルを確認すると、SSSD サービスが cn=accounts,dc=example,dc=com LDAP サブツリーでユーザーを見つけられなかったことを示しています。これは、ユーザーが存在しないか、別の場所に存在することを示しています。

    Copy to Clipboard Toggle word wrap
    (Mon Mar 29 15:33:48 2021) [sssd[be[example.com]]] [dp_get_account_info_send] (0x0200): Got request for [0x1][BE_REQ_USER][name=idm_user@example.com]
    ...
    (Mon Mar 29 15:33:48 2021) [sssd[be[example.com]]] [sdap_get_generic_ext_step] (0x0400): calling ldap_search_ext with [(&(uid=idm_user)(objectclass=posixAccount)(uid=)(&(uidNumber=)(!(uidNumber=0))))][cn=accounts,dc=example,dc=com].
    (Mon Mar 29 15:33:48 2021) [sssd[be[example.com]]] [sdap_get_generic_op_finished] (0x0400): Search result: Success(0), no errmsg set
    (Mon Mar 29 15:33:48 2021) [sssd[be[example.com]]] [sdap_search_user_process] (0x0400): Search for users, returned 0 results.
    (Mon Mar 29 15:33:48 2021) [sssd[be[example.com]]] [sysdb_search_by_name] (0x0400): No such entry
    (Mon Mar 29 15:33:48 2021) [sssd[be[example.com]]] [sysdb_delete_user] (0x0400): Error: 2 (No such file or directory)
    (Mon Mar 29 15:33:48 2021) [sssd[be[example.com]]] [sysdb_search_by_name] (0x0400): No such entry
    (Mon Mar 29 15:33:49 2021) [sssd[be[example.com]]] [ipa_id_get_account_info_orig_done] (0x0080): Object not found, ending request
  7. 認証問題の原因を判断できない場合は、以下を行います。

    1. 最近生成した SSSD ログを収集します。

      Copy to Clipboard Toggle word wrap
      [root@server ~]# sssctl logs-fetch sssd-logs-Mar29.tar
    2. Red Hat テクニカルサポートケースを作成し、以下を提供します。

      1. SSSD ログ: sssd-logs-Mar29.tar
      2. ログに対応する要求のタイムスタンプおよびユーザー名を含むコンソールの出力。

        Copy to Clipboard Toggle word wrap
        [root@server sssd]# date; id <idm_user>; date
        Mon Mar 29 15:33:48 EDT 2021
        id: 'idm_user': no such user
        Mon Mar 29 15:33:49 EDT 2021

8.9. SSSD サービスからデバッグログを収集し、IdM クライアントによる認証問題のトラブルシューティング

IdM クライアントに IdM ユーザーとして認証を試行する際に問題が発生した場合は、IdM サーバーでユーザー情報を取得できることを確認します。IdM サーバーでユーザー情報を取得できない場合は、(IdM サーバーから情報を取得する) IdM クライアントでそれを取得できなくなります。

認証の問題が IdM サーバーから生成されていないことを確認したら、IdM サーバーと IdM クライアントの両方から SSSD デバッグログを収集していました。

前提条件

  • IdM サーバーではなく、IdM クライアントで認証の問題のみがあります。
  • sssctl コマンドを実行して SSSD サービスを再起動するには、root パスワードが必要です。

手順

  1. クライアントで、テキストエディターで /etc/sssd/sssd.conf ファイルを開きます。
  2. クライアントで、ファイルの [domain] セクションに ipa_server オプションを追加し、このオプションを完全修飾ドメイン名 (FQDN) を使用して IdM サーバーに設定します。これにより、IdM クライアントは他の IdM サーバーの自動検出を避け、このテストを 1 つのクライアントおよびサーバー 1 台だけに制限します。

    Copy to Clipboard Toggle word wrap
    [domain/<idm_domain_name>]
    ipa_server = <idm_server_fqdn>
    ...
  3. クライアントsssd.conf ファイルを保存して閉じます。
  4. クライアントで SSSD サービスを再起動して、設定の変更を読み込みます。

    Copy to Clipboard Toggle word wrap
    [root@client ~]# systemctl restart sssd
  5. サーバーおよびクライアントで、詳細な SSSD デバッグロギングを有効にします。

    Copy to Clipboard Toggle word wrap
    [root@server ~]# sssctl debug-level 6
    Copy to Clipboard Toggle word wrap
    [root@client ~]# sssctl debug-level 6
  6. サーバーおよびクライアントで、認証問題が発生しているユーザーの SSSD キャッシュの検証オブジェクトでは、LDAP データベースを迂回せず、SSSD がすでにキャッシュされています。

    Copy to Clipboard Toggle word wrap
    [root@server ~]# sssctl cache-expire -u <idm_user>
    Copy to Clipboard Toggle word wrap
    [root@client ~]# sssctl cache-expire -u <idm_user>
  7. サーバーおよびクライアントで、古い SSSD ログを削除して、トラブルシューティングのデータセットを最小限に抑える。

    Copy to Clipboard Toggle word wrap
    [root@server ~]# sssctl logs-remove
    Copy to Clipboard Toggle word wrap
    [root@server ~]# sssctl logs-remove
  8. クライアントで、認証問題が発生し、試行前後にタイムスタンプを収集する際に、ユーザーが認証問題が発生しようと試みます。これらのタイムスタンプは、データセットのスコープをさらに絞り込むことができます。

    Copy to Clipboard Toggle word wrap
    [root@client sssd]# date; su <idm_user>; date
    Mon Mar 29 16:20:13 EDT 2021
    su: user idm_user does not exist
    Mon Mar 29 16:20:14 EDT 2021
  9. (オプション) サーバーおよびクライアント 詳細な SSSD ログの収集したくない場合はデバッグレベルを下げます。

    Copy to Clipboard Toggle word wrap
    [root@server ~]# sssctl debug-level 0
    Copy to Clipboard Toggle word wrap
    [root@client ~]# sssctl debug-level 0
  10. サーバーおよびクライアントで、失敗した要求に関する情報を SSSD ログを確認します。

    1. クライアントログのクライアントからの要求を確認します。
    2. サーバーログのクライアントからの要求を確認します。
    3. サーバーログでリクエストの結果を確認します。
    4. サーバーからリクエストの結果を受信するクライアントの結果を確認します。
  11. 認証問題の原因を判断できない場合は、以下を行います。

    1. IdM サーバーおよび IdM クライアントで最近生成した SSSD ログを収集します。ホスト名またはロールに応じてラベルを付けます。

      Copy to Clipboard Toggle word wrap
      [root@server ~]# sssctl logs-fetch sssd-logs-server-Mar29.tar
      Copy to Clipboard Toggle word wrap
      [root@client ~]# sssctl logs-fetch sssd-logs-client-Mar29.tar
    2. Red Hat テクニカルサポートケースを作成し、以下を提供します。

      1. SSSD デバッグログ:

        1. サーバーから sssd-logs-server-Mar29.tar
        2. クライアントからの sssd-logs-client-Mar29.tar
      2. ログに対応する要求のタイムスタンプおよびユーザー名を含むコンソールの出力。

        Copy to Clipboard Toggle word wrap
        [root@client sssd]# date; su <idm_user>; date
        Mon Mar 29 16:20:13 EDT 2021
        su: user idm_user does not exist
        Mon Mar 29 16:20:14 EDT 2021

8.10. SSSD バックエンドでのクライアント要求の追跡

SSSD はリクエストを非同期的に処理し、別々の要求のメッセージを同じログファイルに追加します。バックエンドログでクライアント要求を追跡するには、一意の要求識別子 RID#<integer> とクライアント ID [CID #<integer>] を使用できます。これらの識別子は、複数の SSSD コンポーネントからのログファイルにわたる個々の要求を最初から最後まで追跡するために、ログを分離するのに役立ちます。

前提条件

  • デバッグロギングを有効にし、IdM クライアントから要求が送信されている。
  • root 権限がある。

手順

  1. SSSD のログファイルを確認するために、less ユーティリティーを使用してログファイル /var/log/sssd/sssd_<domain_name>.log を開きます。以下に例を示します。

    Copy to Clipboard Toggle word wrap
    [root@server ~]# less /var/log/sssd/sssd_example.com.log
  2. クライアント要求に関する情報は、SSSD ログを確認します。

    Copy to Clipboard Toggle word wrap
    (2021-07-26 18:26:37): [be[testidm.com]] [dp_req_destructor] (0x0400): [RID#3] Number of active DP request: 0
    (2021-07-26 18:26:37): [be[testidm.com]] [dp_req_reply_std] (0x1000): [RID#3] DP Request AccountDomain #3: Returning [Internal Error]: 3,1432158301,GetAccountDomain() not supported
    (2021-07-26 18:26:37): [be[testidm.com]] [dp_attach_req] (0x0400): [RID#4] DP Request Account #4: REQ_TRACE: New request. [sssd.nss CID #1] Flags [0x0001].
    (2021-07-26 18:26:37): [be[testidm.com]] [dp_attach_req] (0x0400): [RID#4] Number of active DP request: 1

    SSSD ログファイルからのこの出力例は、2 つの異なる要求について一意の識別子の RID#3 および RID#4 を示しています。

ただし、SSSD クライアントインターフェイスへの 1 つのクライアント要求が、バックエンドで複数の要求をトリガーすることが多いため、クライアント要求とバックエンドの要求との間に 1 対 1 の相関関係がなくなります。バックエンド内の複数のリクエストには異なる RID 番号がありますが、最初の各バックエンドリクエストには一意のクライアント ID が含まれているため、管理者は単一のクライアントリクエストに対して複数の RID 番号を追跡できます。

以下の例は、1 つのクライアントリクエスト [sssd.nss CID #1] と、バックエンドで生成された複数のリクエスト ([RID#5] から [RID#13]) を示しています。

Copy to Clipboard Toggle word wrap
(2021-10-29 13:24:16): [be[ad.vm]] [dp_attach_req] (0x0400): [RID#5] DP Request [Account #5]: REQ_TRACE: New request. [sssd.nss CID #1] Flags [0x0001].
(2021-10-29 13:24:16): [be[ad.vm]] [dp_attach_req] (0x0400): [RID#6] DP Request [AccountDomain #6]: REQ_TRACE: New request. [sssd.nss CID #1] Flags [0x0001].
(2021-10-29 13:24:16): [be[ad.vm]] [dp_attach_req] (0x0400): [RID#7] DP Request [Account #7]: REQ_TRACE: New request. [sssd.nss CID #1] Flags [0x0001].
(2021-10-29 13:24:17): [be[ad.vm]] [dp_attach_req] (0x0400): [RID#8] DP Request [Initgroups #8]: REQ_TRACE: New request. [sssd.nss CID #1] Flags [0x0001].
(2021-10-29 13:24:17): [be[ad.vm]] [dp_attach_req] (0x0400): [RID#9] DP Request [Account #9]: REQ_TRACE: New request. [sssd.nss CID #1] Flags [0x0001].
(2021-10-29 13:24:17): [be[ad.vm]] [dp_attach_req] (0x0400): [RID#10] DP Request [Account #10]: REQ_TRACE: New request. [sssd.nss CID #1] Flags [0x0001].
(2021-10-29 13:24:17): [be[ad.vm]] [dp_attach_req] (0x0400): [RID#11] DP Request [Account #11]: REQ_TRACE: New request. [sssd.nss CID #1] Flags [0x0001].
(2021-10-29 13:24:17): [be[ad.vm]] [dp_attach_req] (0x0400): [RID#12] DP Request [Account #12]: REQ_TRACE: New request. [sssd.nss CID #1] Flags [0x0001].
(2021-10-29 13:24:17): [be[ad.vm]] [dp_attach_req] (0x0400): [RID#13] DP Request [Account #13]: REQ_TRACE: New request. [sssd.nss CID #1] Flags [0x0001].

8.11. ログアナライザーツールを使用したクライアント要求の追跡

System Security Services Daemon (SSSD) には、複数の SSSD コンポーネントからのログファイルにわたり、要求を最初から最後まで追跡するに使用できるログ解析ツールが組み込まれています。

8.11.1. ログアナライザツールのしくみ

ログ解析ツールを使用すると、複数の SSSD コンポーネントからのログファイル全体で SSSD リクエストを最初から最後まで追跡できます。sssctl analyze コマンドを使用してアナライザーツールを実行します。

ログアナライザツールは、SSSD の NSS および PAM の問題をトラブルシューティングし、SSSD デバッグログをより簡単に確認するのに役立ちます。SSSD プロセス全体の特定のクライアントリクエストにのみ関連する SSSD ログを抽出して出力できます。

SSSD は、ユーザー認証 (sussh) 情報とは別に、ユーザーおよびグループの ID 情報 (idgetent) を追跡します。NSS レスポンダのクライアント ID(CID) は PAM レスポンダーの CID とは独立しており、NSS と PAM のリクエストを解析すると重複した数値が表示されます。--pam オプションを sssctl analyze コマンドとともに使用して、PAM リクエストを確認します。

注記

SSSD メモリーキャッシュから返されたリクエストはログに記録されず、ログアナライザツールで追跡できません。

関連情報

  • sudo sssctl analyze request --help
  • sudo sssctl analyze --help
  • システム上の sssd.conf および sssctl man ページ

8.11.2. ログアナライザツールの実行

ログ解析ツールを使用して、SSSD 内のクライアント要求を追跡および分析します。

前提条件

  • ログ解析機能を有効にするには、/etc/sssd/sssd.conf ファイルの [$responder] セクションと [domain/$domain] セクションで debug_level を 7 以上に設定する必要があります。
  • 分析するログは、libtevent チェーン ID をサポートする互換性のあるバージョンの SSSD、つまり RHEL 8.5 以降の SSSD からのものである必要がある。

手順

  1. ログ解析ツールを list モードで実行して、追跡対象の要求のクライアント ID を特定し、-v オプションを追加して詳細な出力を表示します。

    Copy to Clipboard Toggle word wrap
    # sssctl analyze request list -v

    SSSD に対して行われた最近のクライアントリクエストの詳細なリストが表示されます。

    注記

    PAM リクエストを分析する場合は、sssctl analyze request list コマンドを -pam オプション付きで実行します。

  2. show [unique client ID] オプションを指定してログアナライザツールを実行し、指定したクライアント ID 番号に関連するログを表示します。

    Copy to Clipboard Toggle word wrap
    # sssctl analyze request show 20
  3. 必要に応じて、ログファイルに対してログアナライザツールを実行できます。次に例を示します。

    Copy to Clipboard Toggle word wrap
    # sssctl analyze request --logdir=/tmp/var/log/sssd

関連情報

  • sssctl analyze request list --help
  • sssctl analyze request show --help
  • システム上の sssctl man ページ

8.12. 関連情報

第9章 Ansible Playbook を使用して IdM を管理する環境の準備

Identity Management (IdM) を管理するシステム管理者は、Red Hat Ansible Engine を使用する際に以下を行うことが推奨されます。

  • ホームディレクトリーに Ansible Playbook 専用のサブディレクトリー (例: ~/MyPlaybooks) を作成します。
  • /usr/share/doc/ansible-freeipa/*/usr/share/doc/rhel-system-roles/* ディレクトリーおよびサブディレクトリーから ~/MyPlaybooks ディレクトリーにサンプル Ansible Playbook をコピーして調整します。
  • ~/MyPlaybooks ディレクトリーにインベントリーファイルを追加します。

このプラクティスを使用すると、すべての Playbook を 1 か所で見つけることができます。

注記

マネージドノードで root 権限を呼び出さずに ansible-freeipa Playbook を実行できます。例外には、ipaserveripareplicaipaclientipasmartcard_serveripasmartcard_client、および ipabackup ansible-freeipa ロールを使用する Playbook が含まれます。これらのロールには、ディレクトリーおよび dnf ソフトウェアパッケージマネージャーへの特権アクセスが必要です。

Red Hat Enterprise Linux IdM ドキュメントの Playbook は、次の セキュリティー設定 を前提としています。

  • IdM admin は、管理ノードのリモート Ansible ユーザーです。
  • Ansible vault に暗号化された IdM admin パスワードを保存します。
  • Ansible vault を保護するパスワードをパスワードファイルに配置しました。
  • ローカルの ansible ユーザーを除く全員に対して、vault パスワードファイルへのアクセスをブロックします。
  • vault パスワードファイルを定期的に削除して再作成します。

別のセキュリティー設定 も検討してください。

9.1. Ansible Playbook を使用して IdM を管理するためのコントロールノードと管理ノードの準備

~/MyPlaybooks ディレクトリーを作成し、それを使用して Ansible Playbook を保存および実行できるように設定するには、次の手順に従います。

前提条件

  • マネージドノードに IdM サーバー (server.idm.example.com および replica.idm.example.com) をインストールした。
  • DNS およびネットワークを設定し、コントロールノードから直接マネージドノード (server.idm.example.com および replica.idm.example.com) にログインすることができる。
  • IdM admin のパスワードを把握している。

手順

  1. ~/MyPlaybooks/ ディレクトリーに移動します。

    Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks
  2. ~/MyPlaybooks/ansible.cfg ファイルを以下の内容で作成します。

    Copy to Clipboard Toggle word wrap
    [defaults]
    inventory = /home/your_username/MyPlaybooks/inventory
    remote_user = admin
  3. ~/MyPlaybooks/inventory ファイルを以下の内容で作成します。

    Copy to Clipboard Toggle word wrap
    [eu]
    server.idm.example.com
    
    [us]
    replica.idm.example.com
    
    [ipaserver:children]
    eu
    us

    この設定は、これらの場所にあるホストの 2 つのホストグループ (euus) を定義します。さらに、この設定は、eu および us グループのすべてのホストを含む ipaserver ホストグループを定義します。

  4. オプション: SSH 公開鍵および秘密鍵を作成します。テスト環境でのアクセスを簡素化するには、秘密鍵にパスワードを設定しないでください。

    Copy to Clipboard Toggle word wrap
    $ ssh-keygen
  5. 各マネージドノードの IdM admin アカウントに SSH 公開鍵をコピーします。

    Copy to Clipboard Toggle word wrap
    $ ssh-copy-id admin@server.idm.example.com
    $ ssh-copy-id admin@replica.idm.example.com

    これらのコマンドでは、IdM 管理者 パスワードを入力します。

  6. Vault パスワードを含む password_file ファイルを作成します。

    Copy to Clipboard Toggle word wrap
    redhat
  7. ファイルを変更する権限を変更します。

    Copy to Clipboard Toggle word wrap
    $ chmod 0600 password_file
  8. IdM の admin パスワードを保存する secret.yml Ansible Vault を作成します。

    1. Vault パスワードを保存するように password_file を設定します。

      Copy to Clipboard Toggle word wrap
      $ ansible-vault create --vault-password-file=password_file secret.yml
    2. プロンプトが表示されたら、secret.yml ファイルの内容を入力します。

      Copy to Clipboard Toggle word wrap
      ipaadmin_password: Secret123
注記

Playbook で暗号化された ipaadmin_password を使用するには、vars_file ディレクティブを使用する必要があります。たとえば、IdM ユーザーを削除する単純な Playbook は次のようになります。

Copy to Clipboard Toggle word wrap
---
- name: Playbook to handle users
  hosts: ipaserver

  vars_files:
  - /home/user_name/MyPlaybooks/secret.yml

  tasks:
  - name: Delete user robot
    ipauser:
      ipaadmin_password: "{{ ipaadmin_password }}"
      name: robot
      state: absent

Playbook を実行するときに、--vault-password-file=password_file オプションを追加して、Ansible に Vault パスワードを使用して ipaadmin_password を復号するように指示します。以下に例を示します。

Copy to Clipboard Toggle word wrap
ansible-playbook -i inventory --vault-password-file=password_file del-user.yml
警告

セキュリティー上の理由から、各セッションの終了時に Vault パスワードファイルを削除し、新しいセッションの開始時に手順 6 - 8 を繰り返してください。

9.2.

  • スクリプトで Ansible Playbook を使用している場合は、Ansible Vault を対話的に保護するパスワードを入力する必要がないのは便利です。

短所:

  • 機密性の高いプレーンテキストパスワードを含むファイルは、ファイルのアクセス許可やその他のセキュリティー対策によって保護することが重要です。

パスワードを Ansible Vault に保存し、Vault のパスワードを対話的に入力する

利点:

  • ユーザーパスワードは暗号化されて保存されます。
  • Vault のパスワードはどこにも保存されていないため、誰も盗むことはできません。
  • 新しい Ansible Vault を作成することで、ユーザーパスワードを簡単に更新できます。
  • ansible-vault rekey file_name コマンドを使用して、Vault パスワードも簡単に更新できます。

短所:

  • スクリプトで Ansible Playbook を使用している場合は、Vault のパスワードを対話的に入力する必要があると不便な場合があります。

第10章 Ansible Playbook でのグローバル IdM 設定

Ansible 設定 モジュールを使用すると、Identity Management (IdM) のグローバル設定パラメーターを取得および設定できます。

10.1. Ansible Playbook での IdM 設定の取得

以下の手順では、Ansible Playbook を使用して、現在のグローバル IdM 設定に関する情報を取得する方法を説明します。

前提条件

  • コントロールノードでは、

    • Ansible バージョン 2.15 以降を使用している。
    • ansible-freeipa パッケージをインストールしている。
    • この例では、~/MyPlaybooks/ ディレクトリーに、IdM サーバーの完全修飾ドメイン名 (FQDN) を使用して Ansible インベントリーファイル を作成したことを前提としている。

  1. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to handle global IdM configuration
      hosts: ipaserver
      become: no
      gather_facts: no
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Query IPA global configuration
        ipaconfig:
          ipaadmin_password: "{{ ipaadmin_password }}"
        register: serverconfig
    
      - debug:
          msg: "{{ serverconfig }}"
  2. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/config/retrieve-config.yml
    [...]
    TASK [debug]
    ok: [server.idm.example.com] => {
        "msg": {
            "ansible_facts": {
                "discovered_interpreter_
            },
            "changed": false,
            "config": {
                "ca_renewal_master_server": "server.idm.example.com",
                "configstring": [
                    "AllowNThash",
                    "KDC:Disable Last Success"
                ],
                "defaultgroup": "ipausers",
                "defaultshell": "/bin/bash",
                "emaildomain": "idm.example.com",
                "enable_migration": false,
                "groupsearch": [
                    "cn",
                    "description"
                ],
                "homedirectory": "/home",
                "maxhostname": "64",
                "maxusername": "64",
                "pac_type": [
                    "MS-PAC",
                    "nfs:NONE"
                ],
                "pwdexpnotify": "4",
                "searchrecordslimit": "100",
                "searchtimelimit": "2",
                "selinuxusermapdefault": "unconfined_u:s0-s0:c0.c1023",
                "selinuxusermaporder": [
                    "guest_u:s0$xguest_u:s0$user_
                ],
                "usersearch": [
                    "uid",
                    "givenname",
                    "sn",
                    "telephonenumber",
                    "ou",
                    "title"
                ]
            },
            "failed": false
        }
    }

10.2.

  1. Copy to Clipboard Toggle word wrap
    $ ipa config-show | grep 'CA renewal'
      IPA CA renewal master: server.idm.example.com
  2. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to handle global DNS configuration
      hosts: ipaserver
      become: no
      gather_facts: no
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
    
      tasks:
      - name: set ca_renewal_master_server
        ipaconfig:
          ipaadmin_password: "{{ ipaadmin_password }}"
          ca_renewal_master_server: carenewal.idm.example.com
  4. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/config/set-ca-renewal-master-server.yml

  1. Copy to Clipboard Toggle word wrap
    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. Copy to Clipboard Toggle word wrap
    $ ipa config-show | grep ‘CA renewal’
    IPA CA renewal master:  carenewal.idm.example.com

10.3.

  1. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  2. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to ensure some config options are set
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
    
      tasks:
      # Set defaultlogin and maxusername
      - ipaconfig:
          ipaadmin_password: "{{ ipaadmin_password }}"
          defaultshell: /bin/bash
          maxusername: 64
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/config/ensure-config-options-are-set.yml

  1. Copy to Clipboard Toggle word wrap
    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. Copy to Clipboard Toggle word wrap
    [admin@server /]$ echo "$SHELL"
    /bin/sh

10.4.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to change IdM domain netbios name
      hosts: ipaserver
      become: no
      gather_facts: no
    
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
    
      tasks:
        - name: Set IdM domain netbios name
          ipaconfig:
            ipaadmin_password: "{{ ipaadmin_password }}"
            netbios_name: IPADOM
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory netbios-domain-name-present.yml

10.5.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to ensure SIDs are enabled and users and groups have SIDs
      hosts: ipaserver
      become: no
      gather_facts: no
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
    
      tasks:
        - name: Enable SID and generate users and groups SIDS
          ipaconfig:
            ipaadmin_password: "{{ ipaadmin_password }}"
            enable_sid: true
            add_sids: true

    注記

  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory sids-for-users-and-groups-present.yml

10.6.

第11章

11.1.

重要

警告

警告

11.2.

警告

  1. Copy to Clipboard Toggle word wrap
    $ ipa user-add user_login --first=first_name --last=last_name --email=email_address

    Copy to Clipboard Toggle word wrap
    [a-zA-Z0-9_.][a-zA-Z0-9_.-]{0,252}[a-zA-Z0-9_.$-]?
    注記

    Copy to Clipboard Toggle word wrap
    $ ipa config-mod --maxusername=64
     Maximum username length: 64
     ...

    Copy to Clipboard Toggle word wrap
    $ ipa help user-add

Copy to Clipboard Toggle word wrap
$ ipa user-find

11.3.

  1. Copy to Clipboard Toggle word wrap
    $ ipa stageuser-activate user_login
    -------------------------
    Stage user user_login activated
    -------------------------
    ...

Copy to Clipboard Toggle word wrap
$ ipa user-find

11.4.

  1. Copy to Clipboard Toggle word wrap
    $ ipa user-del --preserve user_login
    --------------------
    Deleted user "user_login"
    --------------------
    注記

11.5.

Copy to Clipboard Toggle word wrap
$ ipa user-del --continue user1 user2 user3

  1. Copy to Clipboard Toggle word wrap
    $ ipa user-del user_login
    --------------------
    Deleted user "user_login"
    --------------------

11.6.

  1. Copy to Clipboard Toggle word wrap
    $ ipa user-undel user_login
    ------------------------------
    Undeleted user account "user_login"
    ------------------------------

    Copy to Clipboard Toggle word wrap
    $ ipa user-stage user_login
    ------------------------------
    Staged user account "user_login"
    ------------------------------

  • Copy to Clipboard Toggle word wrap
    $ ipa user-find

第12章

12.1.

重要

警告

警告

12.2.

警告

12.3.

12.4.

注記

12.5.

12.6.

12.7.

12.8.

第13章

13.1.

重要

警告

警告

13.2.

  1. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  2. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to handle users
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Create user idm_user
        ipauser:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: idm_user
          first: Alice
          last: Acme
          uid: 1000111
          gid: 10011
          phone: "+555123457"
          email: idm_user@acme.com
          passwordexpiration: "2023-01-19 23:59:59"
          password: "Password123"
          update_password: on_create

    注記

  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-IdM-user.yml

    1. Copy to Clipboard Toggle word wrap
      $ ssh admin@server.idm.example.com
      Password:
      [admin@server /]$
    2. Copy to Clipboard Toggle word wrap
      $ kinit admin
      Password for admin@IDM.EXAMPLE.COM:
    3. Copy to Clipboard Toggle word wrap
      $ ipa user-show idm_user
        User login: idm_user
        First name: Alice
        Last name: Acme
        ....

13.3.

  1. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  2. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to handle users
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Create user idm_users
        ipauser:
          ipaadmin_password: "{{ ipaadmin_password }}"
          users:
          - name: idm_user_1
            first: Alice
            last: Acme
            uid: 10001
            gid: 10011
            phone: "+555123457"
            email: idm_user@acme.com
            passwordexpiration: "2023-01-19 23:59:59"
            password: "Password123"
          - name: idm_user_2
            first: Bob
            last: Acme
            uid: 100011
            gid: 10011
          - name: idm_user_3
            first: Eve
            last: Acme
            uid: 1000111
            gid: 10011
    注記

  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-users.yml

    1. Copy to Clipboard Toggle word wrap
      $ ssh administrator@server.idm.example.com
      Password:
      [admin@server /]$
    2. Copy to Clipboard Toggle word wrap
      $ ipa user-show idm_user_1
        User login: idm_user_1
        First name: Alice
        Last name: Acme
        Password: True
        ....

13.4.

  1. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
Copy to Clipboard Toggle word wrap
---
- name: Ensure users' presence
  hosts: ipaserver

  vars_files:
  - /home/user_name/MyPlaybooks/secret.yml
  tasks:
  - name: Include users_present.json
    include_vars:
      file: users_present.json

  - name: Users present
    ipauser:
      ipaadmin_password: "{{ ipaadmin_password }}"
      users: "{{ users }}"
  1. Copy to Clipboard Toggle word wrap
    {
      "users": [
       {
        "name": "idm_user_1",
        "first": "First 1",
        "last": "Last 1",
        "password": "Password123"
       },
       {
        "name": "idm_user_2",
        "first": "First 2",
        "last": "Last 2"
       },
       {
        "name": "idm_user_3",
        "first": "First 3",
        "last": "Last 3"
       }
      ]
    }
  2. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-users-present-jsonfile.yml

    1. Copy to Clipboard Toggle word wrap
      $ ssh administrator@server.idm.example.com
      Password:
      [admin@server /]$
    2. Copy to Clipboard Toggle word wrap
      $ ipa user-show idm_user_1
        User login: idm_user_1
        First name: Alice
        Last name: Acme
        Password: True
        ....

13.5.

  1. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  2. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to handle users
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Delete users idm_user_1, idm_user_2, idm_user_3
        ipauser:
          ipaadmin_password: "{{ ipaadmin_password }}"
          users:
          - name: idm_user_1
          - name: idm_user_2
          - name: idm_user_3
          state: absent
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/delete-users.yml

  1. Copy to Clipboard Toggle word wrap
    $ ssh administrator@server.idm.example.com
    Password:
    [admin@server /]$
  2. Copy to Clipboard Toggle word wrap
    $ ipa user-show idm_user_1
    ipa: ERROR: idm_user_1: user not found

13.6.

第14章

14.1.

表14.1
  

警告

14.2.

図14.1

14.3.

  • Copy to Clipboard Toggle word wrap
    $ ipa group-add group_a
    ---------------------
    Added group "group_a"
    ---------------------
      Group name: group_a
      GID: 1133400009

14.4.

14.5.

  • Copy to Clipboard Toggle word wrap
    $ ipa group-del group_a
    --------------------------
    Deleted group "group_a"
    --------------------------

14.6.

    Copy to Clipboard Toggle word wrap
    $ ipa group-add-member group_a --groups=group_b
    Group name: group_a
    GID: 1133400009
    Member users: user_a
    Member groups: group_b
    Indirect Member users: user_b
    -------------------------
    Number of members added 1
    -------------------------

重要

注記

14.7.

14.7.1.

注記

14.7.2.

  • Copy to Clipboard Toggle word wrap
    $ ipa user-add jsmith --first=John --last=Smith --noprivate --gid 10000

14.7.3.

  1. Copy to Clipboard Toggle word wrap
    $ kinit admin
  2. Copy to Clipboard Toggle word wrap
    $ ipa-managed-entries --list
  3. Copy to Clipboard Toggle word wrap
    $ ipa-managed-entries -e "UPG Definition" disable
    Disabling Plugin

  4. Copy to Clipboard Toggle word wrap
    $ sudo systemctl restart dirsrv.target

  • Copy to Clipboard Toggle word wrap
    $ ipa-managed-entries -e "UPG Definition" disable
    Plugin already disabled

14.7.4.

14.8.

  • Copy to Clipboard Toggle word wrap
    $ ipa group-add-member-manager group_a --users=test
    Group name: group_a
    GID: 1133400009
    Membership managed by users: test
    -------------------------
    Number of members added 1
    -------------------------

  • Copy to Clipboard Toggle word wrap
    $ ipa group-add-member-manager group_a --groups=group_admins
    Group name: group_a
    GID: 1133400009
    Membership managed by groups: group_admins
    Membership managed by users: test
    -------------------------
    Number of members added 1
    -------------------------

注記

  • Copy to Clipboard Toggle word wrap
    $ ipa group-show group_a
    Group name: group_a
    GID: 1133400009
    Membership managed by groups: group_admins
    Membership managed by users: test

14.9.

  • Copy to Clipboard Toggle word wrap
    $ ipa group-show group_a
      ...
      Member users: user_a
      Member groups: group_b
      Indirect Member users: user_b
    注記

14.10.

    Copy to Clipboard Toggle word wrap
    $ ipa group-remove-member group_name --users=user1 --users=user2 --groups=group1

14.11.

  • Copy to Clipboard Toggle word wrap
    $ ipa group-remove-member-manager group_a --users=test
    Group name: group_a
    GID: 1133400009
    Membership managed by groups: group_admins
    ---------------------------
    Number of members removed 1
    ---------------------------

  • Copy to Clipboard Toggle word wrap
    $ ipa group-remove-member-manager group_a --groups=group_admins
    Group name: group_a
    GID: 1133400009
    ---------------------------
    Number of members removed 1
    ---------------------------

注記

  • Copy to Clipboard Toggle word wrap
    $ ipa group-show group_a
    Group name: group_a
    GID: 1133400009

14.12.

  1. Copy to Clipboard Toggle word wrap
    # Allow initgroups to default to the setting for group.
    initgroups: sss [SUCCESS=merge] files
  2. Copy to Clipboard Toggle word wrap
    # ipa user-add idmuser
    First name: idm
    Last name: user
    ---------------------
    Added user "idmuser"
    ---------------------
    User login: idmuser
    First name: idm
    Last name: user
    Full name: idm user
    Display name: idm user
    Initials: tu
    Home directory: /home/idmuser
    GECOS: idm user
    Login shell: /bin/sh
    Principal name: idmuser@IPA.TEST
    Principal alias: idmuser@IPA.TEST
    Email address: idmuser@ipa.test
    UID: 19000024
    GID: 19000024
    Password: False
    Member of groups: ipausers
    Kerberos keys available: False
  3. Copy to Clipboard Toggle word wrap
    $ getent group audio
    ---------------------
    audio:x:63
  4. Copy to Clipboard Toggle word wrap
    $ ipa group-add audio --gid 63
    -------------------
    Added group "audio"
    -------------------
    Group name: audio
    GID: 63
    注記

  5. Copy to Clipboard Toggle word wrap
    $ ipa group-add-member audio --users=idmuser
    Group name: audio
    GID: 63
    Member users: idmuser
    -------------------------
    Number of members added 1
    -------------------------

  1. Copy to Clipboard Toggle word wrap
    $ id idmuser
    uid=1867800003(idmuser) gid=1867800003(idmuser) groups=1867800003(idmuser),63(audio),10(wheel)

14.13.

  1. Copy to Clipboard Toggle word wrap
    [...]
    # Allow initgroups to default to the setting for group.
    initgroups: sss [SUCCESS=merge] files
  2. Copy to Clipboard Toggle word wrap
    $ getent group audio
    ---------------------
    audio:x:63
  3. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to manage idoverrideuser
      hosts: ipaserver
      become: false
    
      tasks:
      - name: Add aduser@addomain.com user to the Default Trust View
        ipaidoverrideuser:
          ipaadmin_password: "{{ ipaadmin_password }}"
          idview: "Default Trust View"
          anchor: aduser@addomain.com
  4. Copy to Clipboard Toggle word wrap
      - name: Add the audio group with the aduser member and GID of 63
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: audio
          idoverrideuser:
          - aduser@addomain.com
          gidnumber: 63
  5. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory add-aduser-to-audio-group.yml

  1. Copy to Clipboard Toggle word wrap
    $ ssh aduser@addomain.com@client.idm.example.com
  2. Copy to Clipboard Toggle word wrap
    $ id aduser@addomain.com
    uid=702801456(aduser@addomain.com) gid=63(audio) groups=63(audio)

第15章

15.1.

表15.1
  

警告

15.2.

図15.1

15.3.

15.4.

15.5.

15.6.

注記

15.7.

15.8.

15.9.

注記

第16章

16.1.

表16.1
  

警告

16.2.

図16.1

16.3.

  1. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  2. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to handle groups
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Create group ops with gid 1234
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: ops
          gidnumber: 1234
    
      - name: Create group sysops
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: sysops
          user:
          - idm_user
    
      - name: Create group appops
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: appops
    
      - name: Add group members sysops and appops to group ops
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: ops
          group:
          - sysops
          - appops
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-group-members.yml

  1. Copy to Clipboard Toggle word wrap
    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. Copy to Clipboard Toggle word wrap
    ipaserver]$ ipa group-show ops
      Group name: ops
      GID: 1234
      Member groups: sysops, appops
      Indirect Member users: idm_user

16.4.

  1. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to add nonposix and external groups
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
    
      tasks:
      - name: Add nonposix group sysops and external group appops
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          groups:
          - name: sysops
            nonposix: true
          - name: appops
            external: true
  2. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/hosts <path_to_playbooks_directory>/add-nonposix-and-external-groups.yml

16.5.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to ensure presence of users in a group
      hosts: ipaserver
    
    
      - name: Ensure the ad_user@ad.example.com user ID override is a member of the admins group:
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: admins
          idoverrideuser:
          - ad_user@ad.example.com

  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory add-useridoverride-to-group.yml

16.6.

  1. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  2. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to handle membership management
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure user test is present for group_a
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: group_a
          membermanager_user: test
    
      - name: Ensure group_admins is present for group_a
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: group_a
          membermanager_group: group_admins
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-member-managers-user-groups.yml

  1. Copy to Clipboard Toggle word wrap
    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. Copy to Clipboard Toggle word wrap
    ipaserver]$ ipa group-show group_a
      Group name: group_a
      GID: 1133400009
      Membership managed by groups: group_admins
      Membership managed by users: test

16.7.

  1. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  2. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to handle membership management
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure member manager user and group members are absent for group_a
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: group_a
          membermanager_user: test
          membermanager_group: group_admins
          action: member
          state: absent
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-member-managers-are-absent.yml

  1. Copy to Clipboard Toggle word wrap
    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. Copy to Clipboard Toggle word wrap
    ipaserver]$ ipa group-show group_a
      Group name: group_a
      GID: 1133400009

第17章

17.1.

17.2.

注記

17.3.

注記

    Copy to Clipboard Toggle word wrap
    $ ipa automember-add
    Automember Rule: user_group
    Grouping Type: group
    --------------------------------
    Added automember rule "user_group"
    --------------------------------
        Automember Rule: user_group

17.4.

    Copy to Clipboard Toggle word wrap
    $ ipa automember-add-condition
    Automember Rule: user_group
    Attribute Key: uid
    Grouping Type: group
    [Inclusive Regex]: .*
    [Exclusive Regex]:
    ----------------------------------
    Added condition(s) to "user_group"
    ----------------------------------
      Automember Rule: user_group
      Inclusive Regex: uid=.*
    ----------------------------
    Number of conditions added 1
    ----------------------------

    Copy to Clipboard Toggle word wrap
    $ ipa automember-add-condition
    Automember Rule: ad_users
    Attribute Key: objectclass
    Grouping Type: group
    [Inclusive Regex]: ntUser
    [Exclusive Regex]:
    -------------------------------------
    Added condition(s) to "ad_users"
    -------------------------------------
      Automember Rule: ad_users
      Inclusive Regex: objectclass=ntUser
    ----------------------------
    Number of conditions added 1
    ----------------------------

17.5.

    Copy to Clipboard Toggle word wrap
    $ ipa automember-find
    Grouping Type: group
    ---------------
    1 rules matched
    ---------------
      Automember Rule: user_group
      Inclusive Regex: uid=.*
    ----------------------------
    Number of entries returned 1
    ----------------------------

17.6.

17.7.

    Copy to Clipboard Toggle word wrap
    $ ipa automember-remove-condition
    Automember Rule: user_group
    Attribute Key: uid
    Grouping Type: group
    [Inclusive Regex]: .*
    [Exclusive Regex]:
    -----------------------------------
    Removed condition(s) from "user_group"
    -----------------------------------
      Automember Rule: user_group
    ------------------------------
    Number of conditions removed 1
    ------------------------------

17.8.

    • Copy to Clipboard Toggle word wrap
      $ ipa automember-rebuild --type=group
      --------------------------------------------------------
      Automember rebuild task finished. Processed (9) entries.
      --------------------------------------------------------
    • Copy to Clipboard Toggle word wrap
      $ ipa automember-rebuild --users=target_user1 --users=target_user2
      --------------------------------------------------------
      Automember rebuild task finished. Processed (2) entries.
      --------------------------------------------------------

17.9.

    • Copy to Clipboard Toggle word wrap
      $ ipa automember-default-group-set
      Default (fallback) Group: default_user_group
      Grouping Type: group
      ---------------------------------------------------
      Set default (fallback) group for automember "default_user_group"
      ---------------------------------------------------
        Default (fallback) Group: cn=default_user_group,cn=groups,cn=accounts,dc=example,dc=com
    注記

  • Copy to Clipboard Toggle word wrap
    $ ipa automember-default-group-show
    Grouping Type: group
      Default (fallback) Group: cn=default_user_group,cn=groups,cn=accounts,dc=example,dc=com

第18章

18.1.

18.2.

注記

18.3.

18.4.

18.5.

18.6.

18.7.

18.8.

18.8.1.

18.8.2.

18.9.

18.10.

第19章

19.1.

注記

  1. Copy to Clipboard Toggle word wrap
    $ mkdir ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks
  3. Copy to Clipboard Toggle word wrap
    [defaults]
    inventory = /home/your_username/MyPlaybooks/inventory
    
    [privilege_escalation]
    become=True
  4. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
    
    [ipareplicas]
    replica1.idm.example.com
    replica2.idm.example.com
    
    [ipacluster:children]
    ipaserver
    ipareplicas
    
    [ipacluster:vars]
    ipaadmin_password=SomeADMINpassword
    
    [ipaclients]
    ipaclient1.example.com
    ipaclient2.example.com
    
    [ipaclients:vars]
    ipaadmin_password=SomeADMINpassword

  5. Copy to Clipboard Toggle word wrap
    $ ssh-keygen
  6. Copy to Clipboard Toggle word wrap
    $ ssh-copy-id admin@server.idm.example.com
    $ ssh-copy-id admin@replica.idm.example.com

19.2.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/automember/automember-group-present.yml automember-group-present-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Automember group present example
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure group automember rule admins is present
        ipaautomember:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: testing_group
          automember_type: group
          state: present
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory automember-group-present-copy.yml

19.3.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/automember/automember-hostgroup-rule-present.yml automember-usergroup-rule-present.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Automember user group rule member present
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure an automember condition for a user group is present
        ipaautomember:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: testing_group
          automember_type: group
          state: present
          action: member
          inclusive:
            - key: UID
              expression: .*
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory automember-usergroup-rule-present.yml

  1. Copy to Clipboard Toggle word wrap
    $ kinit admin
  2. Copy to Clipboard Toggle word wrap
    $ ipa user-add user101 --first user --last 101
    -----------------------
    Added user "user101"
    -----------------------
      User login: user101
      First name: user
      Last name: 101
      ...
      Member of groups: ipausers, testing_group
      ...

19.4.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/automember/automember-hostgroup-rule-absent.yml automember-usergroup-rule-absent.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Automember user group rule member absent
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure an automember condition for a user group is absent
        ipaautomember:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: testing_group
          automember_type: group
          state: absent
          action: member
          inclusive:
            - key: initials
              expression: dp
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory automember-usergroup-rule-absent.yml

  1. Copy to Clipboard Toggle word wrap
    $ kinit admin
  2. Copy to Clipboard Toggle word wrap
    $ ipa automember-show --type=group testing_group
     Automember Rule: testing_group

19.5.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/automember/automember-group-absent.yml automember-group-absent-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Automember group absent example
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure group automember rule admins is absent
        ipaautomember:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: testing_group
          automember_type: group
          state: absent
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory automember-group-absent.yml

19.6.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/automember/automember-hostgroup-rule-present.yml automember-hostgroup-rule-present-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Automember user group rule member present
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure an automember condition for a user group is present
        ipaautomember:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: primary_dns_domain_hosts
          automember_type: hostgroup
          state: present
          action: member
          inclusive:
            - key: fqdn
              expression: .*.idm.example.com
          exclusive:
            - key: fqdn
              expression: .*.example.org
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory automember-hostgroup-rule-present-copy.yml

19.7.

第20章

表20.1
  

20.1.

表20.2
   

 

20.2.

注記

20.3.

  1. 重要

20.4.

  • Copy to Clipboard Toggle word wrap
    # set -o braceexpand

  • Copy to Clipboard Toggle word wrap
    [bjensen@server ~]$ ipa config-mod --userobjectclasses={person,organizationalperson,inetorgperson,inetuser,posixaccount,krbprincipalaux,krbticketpolicyaux,ipaobject,ipasshuser,mepOriginEntry,top,mailRecipient}

    重要

20.5.

  1. 重要

20.6.

  • Copy to Clipboard Toggle word wrap
    # set -o braceexpand

  • Copy to Clipboard Toggle word wrap
    [bjensen@server ~]$ ipa config-mod --groupobjectclasses={top,groupofnames,nestedgroup,ipausergroup,ipaobject,ipasshuser,employeegroup}

    重要

    注記

20.7.

表20.3
   

 

 

20.8.

20.9.

  • Copy to Clipboard Toggle word wrap
    [bjensen@server ~]$ ipa config-show --all
    dn: cn=ipaConfig,cn=etc,dc=example,dc=com
    Maximum username length: 32
    Home directory base: /home
    Default shell: /bin/sh
    Default users group: ipausers
    Default e-mail domain: example.com
    Search time limit: 2
    Search size limit: 100
    User search fields: uid,givenname,sn,telephonenumber,ou,title
    Group search fields: cn,description
    Enable migration mode: FALSE
    Certificate Subject base: O=EXAMPLE.COM
    Default group objectclasses: top, groupofnames, nestedgroup, ipausergroup, ipaobject
    Default user objectclasses: top, person, organizationalperson, inetorgperson, inetuser, posixaccount, krbprincipalaux, krbticketpolicyaux, ipaobject, ipasshuser
    Password Expiration Notification (days): 4
    Password plugin features: AllowNThash
    SELinux user map order: guest_u:s0$xguest_u:s0$user_u:s0$staff_u:s0-s0:c0.c1023$unconfined_u:s0-s0:c0.c1023
    Default SELinux user: unconfined_u:s0-s0:c0.c1023
    Default PAC types: MS-PAC, nfs:NONE
    cn: ipaConfig
    objectclass: nsContainer, top, ipaGuiConfig, ipaConfigObject
  • Copy to Clipboard Toggle word wrap
    [bjensen@server ~]$ ipa config-mod --defaultshell "/bin/bash"

20.10.

第21章

21.1.

21.2.

第22章

22.1.

警告

22.2.

Copy to Clipboard Toggle word wrap
$ ipa selfservice-add "Users can manage their own name details" --permissions=write --attrs=givenname --attrs=displayname --attrs=title --attrs=initials
-----------------------------------------------------------
Added selfservice "Users can manage their own name details"
-----------------------------------------------------------
    Self-service name: Users can manage their own name details
    Permissions: write
    Attributes: givenname, displayname, title, initials

22.3.

Copy to Clipboard Toggle word wrap
$ ipa selfservice-mod "Users can manage their own name details" --attrs=givenname --attrs=displayname --attrs=title --attrs=initials --attrs=surname
--------------------------------------------------------------
Modified selfservice "Users can manage their own name details"
--------------------------------------------------------------
Self-service name: Users can manage their own name details
Permissions: write
Attributes: givenname, displayname, title, initials
重要

Copy to Clipboard Toggle word wrap
$ ipa selfservice-show "Users can manage their own name details"
--------------------------------------------------------------
Self-service name: Users can manage their own name details
Permissions: write
Attributes: givenname, displayname, title, initials

22.4.

Copy to Clipboard Toggle word wrap
$ ipa selfservice-del "Users can manage their own name details"
-----------------------------------------------------------
Deleted selfservice "Users can manage their own name details"
-----------------------------------------------------------

第23章

23.1.

警告

23.2.

23.3.

23.4.

第24章

24.1.

警告

24.2.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/selfservice/selfservice-present.yml selfservice-present-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Self-service present
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure self-service rule "Users can manage their own name details" is present
        ipaselfservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: "Users can manage their own name details"
          permission: read, write
          attribute:
          - givenname
          - displayname
          - title
          - initials
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory selfservice-present-copy.yml

24.3.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/selfservice/selfservice-absent.yml selfservice-absent-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Self-service absent
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure self-service rule "Users can manage their own name details" is absent
        ipaselfservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: "Users can manage their own name details"
          state: absent
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory selfservice-absent-copy.yml

24.4.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/selfservice/selfservice-member-present.yml selfservice-member-present-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Self-service member present
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure selfservice "Users can manage their own name details" member attribute surname is present
        ipaselfservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: "Users can manage their own name details"
          attribute:
          - surname
          action: member
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory selfservice-member-present-copy.yml

24.5.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/selfservice/selfservice-member-absent.yml selfservice-member-absent-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Self-service member absent
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure selfservice "Users can manage their own name details" member attributes givenname and surname are absent
        ipaselfservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: "Users can manage their own name details"
          attribute:
          - givenname
          - surname
          action: member
          state: absent
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory selfservice-member-absent-copy.yml

第25章

25.1.

25.2.

Copy to Clipboard Toggle word wrap
$ ipa delegation-add "basic manager attributes" --permissions=read --permissions=write --attrs=businesscategory --attrs=departmentnumber --attrs=employeetype --attrs=employeenumber --group=managers --membergroup=employees
-------------------------------------------
Added delegation "basic manager attributes"
-------------------------------------------
  Delegation name: basic manager attributes
  Permissions: read, write
  Attributes: businesscategory, departmentnumber, employeetype, employeenumber
  Member user group: employees
  User group: managers

25.3.

Copy to Clipboard Toggle word wrap
$ ipa delegation-find
--------------------
1 delegation matched
--------------------
  Delegation name: basic manager attributes
  Permissions: read, write
  Attributes: businesscategory, departmentnumber, employeenumber, employeetype
  Member user group: employees
  User group: managers
----------------------------
Number of entries returned 1
----------------------------

25.4.

重要

  • Copy to Clipboard Toggle word wrap
    $ ipa delegation-mod "basic manager attributes" --attrs=businesscategory --attrs=departmentnumber --attrs=employeetype --attrs=employeenumber --attrs=displayname
    ----------------------------------------------
    Modified delegation "basic manager attributes"
    ----------------------------------------------
      Delegation name: basic manager attributes
      Permissions: read, write
      Attributes: businesscategory, departmentnumber, employeetype, employeenumber, displayname
      Member user group: employees
      User group: managers

25.5.

  • Copy to Clipboard Toggle word wrap
    $ ipa delegation-del
    Delegation name: basic manager attributes
    ---------------------------------------------
    Deleted delegation "basic manager attributes"
    ---------------------------------------------

第26章

26.1.

26.2.

26.3.

26.4.

26.5.

第27章

27.1.

27.2.

  1. Copy to Clipboard Toggle word wrap
    $ mkdir ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks
  3. Copy to Clipboard Toggle word wrap
    [defaults]
    inventory = /home/<username>/MyPlaybooks/inventory
    
    [privilege_escalation]
    become=True
  4. Copy to Clipboard Toggle word wrap
    [eu]
    server.idm.example.com
    
    [us]
    replica.idm.example.com
    
    [ipaserver:children]
    eu
    us

27.3.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/delegation/delegation-present.yml delegation-present-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to manage a delegation rule
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure delegation "basic manager attributes" is present
        ipadelegation:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: "basic manager attributes"
          permission: read, write
          attribute:
          - businesscategory
          - departmentnumber
          - employeenumber
          - employeetype
          group: managers
          membergroup: employees
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory delegation-present-copy.yml

27.4.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks>/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/delegation/delegation-present.yml delegation-absent-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Delegation absent
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure delegation "basic manager attributes" is absent
        ipadelegation:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: "basic manager attributes"
          state: absent
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory delegation-absent-copy.yml

27.5.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/delegation/delegation-member-present.yml delegation-member-present-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Delegation member present
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure delegation "basic manager attributes" member attribute departmentnumber is present
        ipadelegation:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: "basic manager attributes"
          attribute:
          - departmentnumber
          action: member
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory delegation-member-present-copy.yml

27.6.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/delegation/delegation-member-absent.yml delegation-member-absent-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Delegation member absent
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure delegation "basic manager attributes" member attributes employeenumber and employeetype are absent
        ipadelegation:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: "basic manager attributes"
          attribute:
          - employeenumber
          - employeetype
          action: member
          state: absent
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory delegation-member-absent-copy.yml

第28章

28.1.

28.1.1.

  • 注記

注記

28.1.2.

注記

注記

28.1.3.

注記

28.1.4.

重要

注記

28.1.5.

表28.1
   

28.2.

  1. Copy to Clipboard Toggle word wrap
    $ ipa permission-add "dns admin"
    • Copy to Clipboard Toggle word wrap
      $ ipa permission-add "dns admin" --bindtype=all

      注記

    • Copy to Clipboard Toggle word wrap
      $ ipa permission-add "dns admin" --right=read --right=write
      $ ipa permission-add "dns admin" --right={read,write}
      注記

    • Copy to Clipboard Toggle word wrap
      $ ipa permission-add "dns admin" --attrs=description --attrs=automountKey
      $ ipa permission-add "dns admin" --attrs={description,automountKey}

    • Copy to Clipboard Toggle word wrap
      $ ipa permission-add "manage service" --right=all --type=service --attrs=krbprincipalkey --attrs=krbprincipalname --attrs=managedby
    • Copy to Clipboard Toggle word wrap
      $ ipa permission-add "manage automount locations" --subtree="ldap://ldap.example.com:389/cn=automount,dc=example,dc=com" --right=write --attrs=automountmapname --attrs=automountkey --attrs=automountInformation
      注記

    • Copy to Clipboard Toggle word wrap
      $ ipa permission-add "manage Windows groups" --filter="(!(objectclass=posixgroup))" --right=write --attrs=description
    • Copy to Clipboard Toggle word wrap
      $ ipa permission-add ManageShell --right="write" --type=user --attr=loginshell --memberof=engineers
      注記

    • Copy to Clipboard Toggle word wrap
      $ ipa permission-add ManageMembers --right="write" --subtree=cn=groups,cn=accounts,dc=example,dc=test --attr=member --targetgroup=engineers

28.3.

  • Copy to Clipboard Toggle word wrap
     $ ipa permission-show <permission> --raw

28.4.

  1. Copy to Clipboard Toggle word wrap
    $ ipa privilege-add "managing filesystems" --desc="for filesystems"
  2. Copy to Clipboard Toggle word wrap
    $ ipa privilege-add-permission "managing filesystems" --permissions="managing automount" --permissions="managing ftp services"

28.5.

28.6.

  1. Copy to Clipboard Toggle word wrap
    $ ipa role-add --desc="User Administrator" useradmin
    ------------------------
    Added role "useradmin"
    ------------------------
    Role name: useradmin
    Description: User Administrator
  2. Copy to Clipboard Toggle word wrap
    $ ipa role-add-privilege --privileges="user administrators" useradmin
    Role name: useradmin
    Description: User Administrator
    Privileges: user administrators
    ----------------------------
    Number of privileges added 1
    ----------------------------
  3. Copy to Clipboard Toggle word wrap
    $ ipa role-add-member --groups=useradmins useradmin
    Role name: useradmin
    Description: User Administrator
    Member groups: useradmins
    Privileges: user administrators
    -------------------------
    Number of members added 1
    -------------------------

28.7.

第29章

29.1.

29.1.1.

  • 注記

注記

29.1.2.

注記

注記

29.1.3.

注記

29.1.4.

重要

注記

29.1.5.

表29.1
   

29.2.

    • 注記

    • 注記

    • 重要

  1. 注記

29.3.

29.4.

第30章

30.1.

  • 注記

注記

30.2.

注記

注記

30.3.

注記

30.4.

重要

注記

30.5.

表30.1
   

30.6.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/<MyPlaybooks>/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-user-present.yml role-member-user-present-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to manage IPA role with members.
      hosts: ipaserver
      become: true
      gather_facts: no
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - iparole:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: user_and_host_administrator
          user: idm_user01
          group: idm_group01
          privilege:
          - Group Administrators
          - User Administrators
          - Stage User Administrators
          - Group Administrators
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-member-user-present-copy.yml

30.7.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/<MyPlaybooks>/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-is-absent.yml role-is-absent-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to manage IPA role with members.
      hosts: ipaserver
      become: true
      gather_facts: no
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - iparole:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: user_and_host_administrator
          state: absent
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-is-absent-copy.yml

30.8.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/<MyPlaybooks>/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-group-present.yml role-member-group-present-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to manage IPA role with members.
      hosts: ipaserver
      become: true
      gather_facts: no
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - iparole:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: helpdesk
          group: junior_sysadmins
          action: member
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-member-group-present-copy.yml

30.9.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/<MyPlaybooks>/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-user-absent.yml role-member-user-absent-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to manage IPA role with members.
      hosts: ipaserver
      become: true
      gather_facts: no
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - iparole:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: helpdesk
          user
          - user_01
          - user_02
          action: member
          state: absent
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-member-user-absent-copy.yml

30.10.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/<MyPlaybooks>/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-service-present-absent.yml role-member-service-present-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to manage IPA role with members.
      hosts: ipaserver
      become: true
      gather_facts: no
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - iparole:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: web_administrator
          service:
          - HTTP/client01.idm.example.com
          action: member
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-member-service-present-copy.yml

30.11.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/<MyPlaybooks>/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-host-present.yml role-member-host-present-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to manage IPA role with members.
      hosts: ipaserver
      become: true
      gather_facts: no
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - iparole:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: web_administrator
          host:
          - client01.idm.example.com
          action: member
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-member-host-present-copy.yml

30.12.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/<MyPlaybooks>/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-hostgroup-present.yml role-member-hostgroup-present-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to manage IPA role with members.
      hosts: ipaserver
      become: true
      gather_facts: no
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - iparole:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: web_administrator
          hostgroup:
          - web_servers
          action: member
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-member-hostgroup-present-copy.yml

第31章

31.1.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/privilege/privilege-present.yml privilege-present-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Privilege present example
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure privilege full_host_administration is present
        ipaprivilege:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: full_host_administration
          description: This privilege combines all IdM permissions related to host administration
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory privilege-present-copy.yml

31.2.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/privilege/privilege-member-present.yml privilege-member-present-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Privilege member present example
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure that permissions are present for the "full_host_administration" privilege
        ipaprivilege:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: full_host_administration
          permission:
          - "System: Add krbPrincipalName to a Host"
          - "System: Enroll a Host"
          - "System: Manage Host Certificates"
          - "System: Manage Host Enrollment Password"
          - "System: Manage Host Keytab"
          - "System: Manage Host Principals"
          - "Retrieve Certificates from the CA"
          - "Revoke Certificate"
          - "System: Add Hosts"
          - "System: Add krbPrincipalName to a Host"
          - "System: Enroll a Host"
          - "System: Manage Host Certificates"
          - "System: Manage Host Enrollment Password"
          - "System: Manage Host Keytab"
          - "System: Manage Host Keytab Permissions"
          - "System: Manage Host Principals"
          - "System: Manage Host SSH Public Keys"
          - "System: Manage Service Keytab"
          - "System: Manage Service Keytab Permissions"
          - "System: Modify Hosts"
          - "System: Remove Hosts"
          - "System: Add Hostgroups"
          - "System: Modify Hostgroup Membership"
          - "System: Modify Hostgroups"
          - "System: Remove Hostgroups"
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory privilege-member-present-copy.yml

31.3.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/privilege/privilege-member-absent.yml privilege-member-absent-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Privilege absent example
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure that the "Request Certificate ignoring CA ACLs" permission is absent from the "Certificate Administrators" privilege
        ipaprivilege:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: Certificate Administrators
          permission:
          - "Request Certificate ignoring CA ACLs"
          action: member
          state: absent
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory privilege-member-absent-copy.yml

31.4.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/privilege/privilege-present.yml rename-privilege.yml
  3. Copy to Clipboard Toggle word wrap
    ---
    - name: Rename a privilege
      hosts: ipaserver
  4. Copy to Clipboard Toggle word wrap
    [...]
    tasks:
    - name: Ensure the full_host_administration privilege is renamed to limited_host_administration
      ipaprivilege:
      [...]

    Copy to Clipboard Toggle word wrap
    ---
    - name: Rename a privilege
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure the full_host_administration privilege is renamed to limited_host_administration
        ipaprivilege:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: full_host_administration
          rename: limited_host_administration
          state: renamed
  5. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory rename-privilege.yml

31.5.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/privilege/privilege-absent.yml privilege-absent-copy.yml
  3. Copy to Clipboard Toggle word wrap
    [...]
    tasks:
    - name: Ensure privilege "CA administrator" is absent
      ipaprivilege:
      [...]

    Copy to Clipboard Toggle word wrap
    ---
    - name: Privilege absent example
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure privilege "CA administrator" is absent
        ipaprivilege:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: CA administrator
          state: absent
  4. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory privilege-absent-copy.yml

31.6.

第32章

32.1.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-present.yml permission-present-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Permission present example
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure that the "MyPermission" permission is present
        ipapermission:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: MyPermission
          object_type: host
          right: all
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory permission-present-copy.yml

32.2.

注記

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-present.yml permission-present-with-attribute.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Permission present example
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure that the "MyPermission" permission is present with an attribute
        ipapermission:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: MyPermission
          object_type: host
          right: all
          attrs: description
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory permission-present-with-attribute.yml

32.3.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-absent.yml permission-absent-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Permission absent example
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure that the "MyPermission" permission is absent
        ipapermission:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: MyPermission
          state: absent
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory permission-absent-copy.yml

32.4.

注記

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-member-present.yml permission-member-present-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Permission member present example
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure that the "gecos" and "description" attributes are present in "MyPermission"
        ipapermission:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: MyPermission
          attrs:
          - description
          - gecos
          action: member
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory permission-member-present-copy.yml

32.5.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-member-absent.yml permission-member-absent-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Permission absent example
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure that an attribute is not a member of "MyPermission"
        ipapermission:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: MyPermission
          attrs: description
          action: member
          state: absent
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory permission-member-absent-copy.yml

32.6.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-renamed.yml permission-renamed-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Permission present example
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Rename the "MyPermission" permission
        ipapermission:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: MyPermission
          rename: MyNewPermission
          state: renamed
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory permission-renamed-copy.yml

32.7.

第33章

33.1.

33.2.

33.3.

33.4.

  1. Copy to Clipboard Toggle word wrap
    # pwdhash -D /etc/dirsrv/slapd-IDM-EXAMPLE-COM password
    {PBKDF2_SHA256}AAAgABU0bKhyjY53NcxY33ueoPjOUWtl4iyYN5uW...

    1. Copy to Clipboard Toggle word wrap
      # ipactl stop
    2. Copy to Clipboard Toggle word wrap
      nsslapd-rootpw: {PBKDF2_SHA256}AAAgABU0bKhyjY53NcxY33ueoPjOUWtl4iyYN5uW...
    Copy to Clipboard Toggle word wrap
    # ipactl start

33.5.

  • Copy to Clipboard Toggle word wrap
    $ ipa user-mod idm_user --password
    Password:
    Enter Password again to verify:
    --------------------
    Modified user "idm_user"
    --------------------
    ...

33.6.

警告

  1. Copy to Clipboard Toggle word wrap
    $ ldapmodify -x -D "cn=Directory Manager" -W -h server.idm.example.com -p 389
    Enter LDAP Password:
  2. Copy to Clipboard Toggle word wrap
    dn: cn=ipa_pwd_extop,cn=plugins,cn=config
  3. Copy to Clipboard Toggle word wrap
    changetype: modify
  4. Copy to Clipboard Toggle word wrap
    add: passSyncManagersDNs
  5. Copy to Clipboard Toggle word wrap
    passSyncManagersDNs: \
    uid=admin,cn=users,cn=accounts,dc=example,dc=com

33.7.

  1. Copy to Clipboard Toggle word wrap
    $ ipa user-status example_user
    -----------------------
    Account disabled: False
    -----------------------
      Server: idm.example.com
      Failed logins: 8
      Last successful authentication: N/A
      Last failed authentication: 20220229080317Z
      Time now: 2022-02-29T08:04:46Z
    ----------------------------
    Number of entries returned 1
    ----------------------------
  2. Copy to Clipboard Toggle word wrap
    $ ipa pwpolicy-show --user example_user
      Group: global_policy
      Max lifetime (days): 90
      Min lifetime (hours): 1
      History size: 0
      Character classes: 0
      Min length: 8
      Max failures: 6
      Failure reset interval: 60
      Lockout duration: 600
      Grace login limit: -1

33.8.

  • Copy to Clipboard Toggle word wrap
    $ ipa user-unlock idm_user
    -----------------------
    Unlocked account "idm_user"
    -----------------------

33.9.

  1. Copy to Clipboard Toggle word wrap
    # ipa config-show | grep "Password plugin features"
      Password plugin features: AllowNThash, KDC:Disable Last Success

  2. Copy to Clipboard Toggle word wrap
    # ipa config-mod --ipaconfigstring='AllowNThash'

  3. Copy to Clipboard Toggle word wrap
    # ipactl restart

第34章

34.1.

34.2.

表34.1
   

重要

34.3.

34.4.

注記

  1. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  2. Copy to Clipboard Toggle word wrap
    ---
    - name: Tests
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure presence of pwpolicy for group ops
        ipapwpolicy:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: ops
          minlife: 7
          maxlife: 49
          history: 5
          priority: 1
          lockouttime: 300
          minlength: 8
          minclasses: 4
          maxfail: 3
          failinterval: 5

  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory_/new_pwpolicy_present.yml

重要

34.5.

34.5.1.

34.5.2.

  1. Copy to Clipboard Toggle word wrap
    $ ipa pwpolicy-add
    Group: group_name
    Priority: priority_level
  2. Copy to Clipboard Toggle word wrap
    $ ipa pwpolicy-find

34.6.

注記

34.7.

  1. Copy to Clipboard Toggle word wrap
    $ ipa pwpolicy-mod --usercheck=True managers
    注記

  2. Copy to Clipboard Toggle word wrap
    $ ipa pwpolicy-mod --maxrepeat=2 managers

  1. Copy to Clipboard Toggle word wrap
    $ ipa user-add test_user
    First name: test
    Last name: user
    ----------------------------
    Added user "test_user"
    ----------------------------
    1. Copy to Clipboard Toggle word wrap
      $ kinit test_user
    2. Copy to Clipboard Toggle word wrap
      Password expired. You must change it now.
      Enter new password:
      Enter it again:
      Password change rejected: Password not changed.
      Unspecified password quality failure while trying to change password.
      Please try again.
    3. Copy to Clipboard Toggle word wrap
      Password change rejected: Password not changed.
      Unspecified password quality failure while trying to change password.
      Please try again.
      
      Enter new password:
      Enter it again:
    4. Copy to Clipboard Toggle word wrap
      Password change rejected: Password not changed.
      Unspecified password quality failure while trying to change password.
      Please try again.
      
      Enter new password:
      Enter it again:
  2. Copy to Clipboard Toggle word wrap
    $ klist
    Ticket cache: KCM:0:33945
    Default principal: test_user@IDM.EXAMPLE.COM
    
    Valid starting       Expires              Service principal
    07/07/2021 12:44:44  07/08/2021 12:44:44  krbtgt@IDM.EXAMPLE.COM@IDM.EXAMPLE.COM

34.8.

  1. Copy to Clipboard Toggle word wrap
    ---
    - name: Tests
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure presence of usercheck and maxrepeat pwpolicy for group managers
        ipapwpolicy:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: managers
          usercheck: True
          maxrepeat: 2
          maxsequence: 3
  2. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory_/manager_pwpolicy_present.yml

  1. Copy to Clipboard Toggle word wrap
    $ ipa user-add test_user
    First name: test
    Last name: user
    ----------------------------
    Added user "test_user"
    ----------------------------
    1. Copy to Clipboard Toggle word wrap
      $ kinit test_user
    2. Copy to Clipboard Toggle word wrap
      Password expired. You must change it now.
      Enter new password:
      Enter it again:
      Password change rejected: Password not changed.
      Unspecified password quality failure while trying to change password.
      Please try again.
    3. Copy to Clipboard Toggle word wrap
      Password change rejected: Password not changed.
      Unspecified password quality failure while trying to change password.
      Please try again.
      
      Enter new password:
      Enter it again:
    4. Copy to Clipboard Toggle word wrap
      Password change rejected: Password not changed.
      Unspecified password quality failure while trying to change password.
      Please try again.
      
      Enter new password:
      Enter it again:
    5. Copy to Clipboard Toggle word wrap
      Password change rejected: Password not changed.
      Unspecified password quality failure while trying to change password.
      Please try again.
      
      Enter new password:
      Enter it again:
  2. Copy to Clipboard Toggle word wrap
    $ klist
    Ticket cache: KCM:0:33945
    Default principal: test_user@IDM.EXAMPLE.COM
    
    Valid starting       Expires              Service principal
    07/07/2021 12:44:44  07/08/2021 12:44:44  krbtgt@IDM.EXAMPLE.COM@IDM.EXAMPLE.COM

第35章

35.1.

注記

35.2.

  • Copy to Clipboard Toggle word wrap
    # yum install ipa-client-epn

35.3.

注記

  1. Copy to Clipboard Toggle word wrap
    # vi /etc/ipa/epn.conf
  2. Copy to Clipboard Toggle word wrap
    notify_ttls = 28, 14, 7, 3, 1
    注記

  3. Copy to Clipboard Toggle word wrap
    smtp_server = localhost
    smtp_port = 25
  4. Copy to Clipboard Toggle word wrap
    mail_from = admin-email@example.com
    • Copy to Clipboard Toggle word wrap
      smtp_client_cert = /etc/pki/tls/certs/client.pem
      注記

    • Copy to Clipboard Toggle word wrap
      smtp_client_key = /etc/pki/tls/certs/client.key
    • Copy to Clipboard Toggle word wrap
      smtp_client_key_pass = Secret123!
  5. Copy to Clipboard Toggle word wrap
    ipa-epn --dry-run
    [
        {
         "uid": "user5",
         "cn": "user 5",
         "krbpasswordexpiration": "2020-04-17 15:51:53",
         "mail": "['user5@ipa.test']"
        }
    ]
    [
        {
         "uid": "user6",
         "cn": "user 6",
         "krbpasswordexpiration": "2020-12-17 15:51:53",
         "mail": "['user5@ipa.test']"
         }
    ]
    The IPA-EPN command was successful
    注記

  6. Copy to Clipboard Toggle word wrap
    ipa-epn
    [
      {
         "uid": "user5",
         "cn": "user 5",
         "krbpasswordexpiration": "2020-10-01 15:51:53",
         "mail": "['user5@ipa.test']"
      }
    ]
    [
      {
        "uid": "user6",
        "cn": "user 6",
        "krbpasswordexpiration": "2020-12-17 15:51:53",
        "mail": "['user5@ipa.test']"
      }
    ]
    The IPA-EPN command was successful
  7. Copy to Clipboard Toggle word wrap
    # ipa-epn --from-nbdays 8 --to-nbdays 12
    注記

35.4.

  • Copy to Clipboard Toggle word wrap
    systemctl start ipa-epn.timer

35.5.

  1. Copy to Clipboard Toggle word wrap
    # vi /etc/ipa/epn/expire_msg.template
  2. Copy to Clipboard Toggle word wrap
    Hi {{ fullname }},
    
    Your password will expire on {{ expiration }}.
    
    Please change it as soon as possible.

第36章

36.1.

重要

36.2.

36.3.

36.4.

  • Copy to Clipboard Toggle word wrap
    $ ipa help idviews
    ID Views
    
    Manage ID Views
    
    IPA allows to override certain properties of users and groups[...]
    [...]
    Topic commands:
      idoverridegroup-add          Add a new Group ID override
      idoverridegroup-del          Delete a Group ID override
    [...]
  • Copy to Clipboard Toggle word wrap
    $ ipa idview-add --help
    Usage: ipa [global-options] idview-add NAME [options]
    
    Add a new ID View.
    Options:
      -h, --help      show this help message and exit
      --desc=STR      Description
    [...]

36.5.

  1. Copy to Clipboard Toggle word wrap
    $ ipa idview-add example_for_host1
    ---------------------------
    Added ID View "example_for_host1"
    ---------------------------
      ID View Name: example_for_host1
    • Copy to Clipboard Toggle word wrap
      $ ipa idoverrideuser-add example_for_host1 idm_user --login=user_1234
      -----------------------------
      Added User ID override "idm_user"
      -----------------------------
        Anchor to override: idm_user
        User login: user_1234

      注記

      Copy to Clipboard Toggle word wrap
      $ ipa idoverrideuser-add-cert example_for_host1 user --certificate="MIIEATCC..."
  2. Copy to Clipboard Toggle word wrap
    $ ipa idview-apply example_for_host1 --hosts=host1.idm.example.com
    -----------------------------
    Applied ID View "example_for_host1"
    -----------------------------
    hosts: host1.idm.example.com
    ---------------------------------------------
    Number of hosts the ID View was applied to: 1
    ---------------------------------------------
    注記

    1. Copy to Clipboard Toggle word wrap
      $ ssh root@host1
      Password:
    2. Copy to Clipboard Toggle word wrap
      root@host1 ~]# sss_cache -E
    Copy to Clipboard Toggle word wrap
    root@host1 ~]# systemctl restart sssd

    1. Copy to Clipboard Toggle word wrap
      [root@r8server ~]# ssh user_1234@host1.idm.example.com
      Password:
      
      Last login: Sun Jun 21 22:34:25 2020 from 192.168.122.229
      [user_1234@host1 ~]$
    2. Copy to Clipboard Toggle word wrap
      [user_1234@host1 ~]$ pwd
      /home/idm_user/
  • Copy to Clipboard Toggle word wrap
    [root@host1 ~]# id idm_user
    uid=779800003(user_1234) gid=779800003(idm_user) groups=779800003(idm_user)
    [root@host1 ~]# user_1234
    uid=779800003(user_1234) gid=779800003(idm_user) groups=779800003(idm_user)

36.6.

  1. Copy to Clipboard Toggle word wrap
    [root@host1 /]# mkdir /home/user_1234/
  2. Copy to Clipboard Toggle word wrap
    [root@host1 /]# chown idm_user:idm_user /home/user_1234/
  3. Copy to Clipboard Toggle word wrap
    $ ipa idview-show example_for_host1 --all
      dn: cn=example_for_host1,cn=views,cn=accounts,dc=idm,dc=example,dc=com
      ID View Name: example_for_host1
      User object override: idm_user
      Hosts the view applies to: host1.idm.example.com
      objectclass: ipaIDView, top, nsContainer

    • Copy to Clipboard Toggle word wrap
      $ ipa idoverrideuser-mod example_for_host1 idm_user --homedir=/home/user_1234
      -----------------------------
      Modified a User ID override "idm_user"
      -----------------------------
        Anchor to override: idm_user
        User login: user_1234
        Home directory: /home/user_1234/

    1. Copy to Clipboard Toggle word wrap
      $ ssh root@host1
      Password:
    2. Copy to Clipboard Toggle word wrap
      root@host1 ~]# sss_cache -E
    Copy to Clipboard Toggle word wrap
    root@host1 ~]# systemctl restart sssd

  1. Copy to Clipboard Toggle word wrap
    [root@r8server ~]# ssh idm_user@host1.idm.example.com
    Password:
    
    Last login: Sun Jun 21 22:34:25 2020 from 192.168.122.229
    [user_1234@host1 ~]$
  2. Copy to Clipboard Toggle word wrap
    [user_1234@host1 ~]$ pwd
    /home/user_1234/

36.7.

  1. Copy to Clipboard Toggle word wrap
    [root@host1 /]# mkdir /home/user_1234/
  2. Copy to Clipboard Toggle word wrap
    [root@host1 /]# chown idm_user:idm_user /home/user_1234/
  3. Copy to Clipboard Toggle word wrap
    $ ipa idview-add example_for_host1
    ---------------------------
    Added ID View "example_for_host1"
    ---------------------------
      ID View Name: example_for_host1
    Copy to Clipboard Toggle word wrap
    $ ipa idoverrideuser-add example_for_host1 idm_user --homedir=/home/user_1234
    -----------------------------
    Added User ID override "idm_user"
    -----------------------------
      Anchor to override: idm_user
      Home directory: /home/user_1234/
  4. Copy to Clipboard Toggle word wrap
    $ ipa idview-apply example_for_host1 --hosts=host1.idm.example.com
    -----------------------------
    Applied ID View "example_for_host1"
    -----------------------------
    hosts: host1.idm.example.com
    ---------------------------------------------
    Number of hosts the ID View was applied to: 1
    ---------------------------------------------
    注記

    1. Copy to Clipboard Toggle word wrap
      $ ssh root@host1
      Password:
    2. Copy to Clipboard Toggle word wrap
      root@host1 ~]# sss_cache -E
    Copy to Clipboard Toggle word wrap
    root@host1 ~]# systemctl restart sssd

  1. Copy to Clipboard Toggle word wrap
    [root@r8server ~]# ssh idm_user@host1.idm.example.com
    Password:
    Activate the web console with: systemctl enable --now cockpit.socket
    
    Last login: Sun Jun 21 22:34:25 2020 from 192.168.122.229
    [idm_user@host1 /]$
  2. Copy to Clipboard Toggle word wrap
    [idm_user@host1 /]$ pwd
    /home/user_1234/

36.8.

    1. Copy to Clipboard Toggle word wrap
      [root@server ~]# ipa hostgroup-add --desc="Baltimore hosts" baltimore
      ---------------------------
      Added hostgroup "baltimore"
      ---------------------------
      Host-group: baltimore
      Description: Baltimore hosts
    2. Copy to Clipboard Toggle word wrap
      [root@server ~]# ipa hostgroup-add-member --hosts={host102,host103} baltimore
      Host-group: baltimore
      Description: Baltimore hosts
      Member hosts: host102.idm.example.com, host103.idm.example.com
      -------------------------
      Number of members added 2
      -------------------------
  1. Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa idview-apply --hostgroups=baltimore
    ID View Name: example_for_host1
    -----------------------------------------
    Applied ID View "example_for_host1"
    -----------------------------------------
      hosts: host102.idm.example.com, host103.idm.example.com
    ---------------------------------------------
    Number of hosts the ID View was applied to: 2
    ---------------------------------------------
    1. Copy to Clipboard Toggle word wrap
      [root@server ~]# ipa hostgroup-add-member --hosts=somehost.idm.example.com baltimore
        Host-group: baltimore
        Description: Baltimore hosts
        Member hosts:  host102.idm.example.com, host103.idm.example.com,somehost.idm.example.com
      -------------------------
      Number of members added 1
      -------------------------
    2. Copy to Clipboard Toggle word wrap
      [root@server ~]# ipa idview-show example_for_host1 --all
        dn: cn=example_for_host1,cn=views,cn=accounts,dc=idm,dc=example,dc=com
        ID View Name: example_for_host1
      [...]
        Hosts the view applies to: host102.idm.example.com, host103.idm.example.com
        objectclass: ipaIDView, top, nsContainer

    3. Copy to Clipboard Toggle word wrap
      [root@server ~]# ipa idview-apply --host=somehost.idm.example.com
      ID View Name: example_for_host1
      -----------------------------------------
      Applied ID View "example_for_host1"
      -----------------------------------------
        hosts: somehost.idm.example.com
      ---------------------------------------------
      Number of hosts the ID View was applied to: 1
      ---------------------------------------------

  • Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa idview-show example_for_host1 --all
      dn: cn=example_for_host1,cn=views,cn=accounts,dc=idm,dc=example,dc=com
      ID View Name: example_for_host1
    [...]
      Hosts the view applies to: host102.idm.example.com, host103.idm.example.com, somehost.idm.example.com
      objectclass: ipaIDView, top, nsContainer

36.9.

  1. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to manage idoverrideuser
      hosts: ipaserver
      become: false
      gather_facts: false
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
    
      tasks:
      - name: Ensure idview_for_host1 is present
        idview:
          ipaadmin_password: ”{{ ipaadmin_password }}"
          name: idview_for_host1
      - name: Ensure idview_for_host1 is applied to host1.idm.example.com
        idview:
          ipaadmin_password: ”{{ ipaadmin_password }}"
          name: idview_for_host1
          host: host1.idm.example.com
          action: member
      - name: Ensure idm_user is present in idview_for_host1 with homedir /home/user_1234 and name user_1234
        ipaidoverrideuser:
          ipaadmin_password: ”{{ ipaadmin_password }}"
          idview: idview_for_host1
          anchor: idm_user
          name: user_1234
          homedir: /home/user_1234
  2. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/inventory <path_to_playbooks_directory>/add-idoverrideuser-with-name-and-homedir.yml
    1. Copy to Clipboard Toggle word wrap
      $ ssh root@host1
      Password:
    2. Copy to Clipboard Toggle word wrap
      root@host1 ~]# sss_cache -E
    3. Copy to Clipboard Toggle word wrap
      root@host1 ~]# systemctl restart sssd

  1. Copy to Clipboard Toggle word wrap
    [root@r8server ~]# ssh idm_user@host1.idm.example.com
    Password:
    
    Last login: Sun Jun 21 22:34:25 2020 from 192.168.122.229
    [user_1234@host1 ~]$
  2. Copy to Clipboard Toggle word wrap
    [user_1234@host1 ~]$ pwd
    /home/user_1234/

36.10.

注記

  1. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to manage idoverrideuser
      hosts: ipaserver
      become: false
      gather_facts: false
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
    
      tasks:
      - name: Ensure test user idm_user is present in idview idview_for_host1 with sshpubkey
        ipaidoverrideuser:
          ipaadmin_password: ”{{ ipaadmin_password }}"
          idview: idview_for_host1
          anchor: idm_user
          sshpubkey:
          - ssh-rsa AAAAB3NzaC1yc2EAAADAQABAAABgQCqmVDpEX5gnSjKuv97Ay ...
      - name: Ensure idview_for_host1 is applied to host1.idm.example.com
        ipaidview:
          ipaadmin_password:  ”{{ ipaadmin_password }}"
          name: idview_for_host1
          host: host1.idm.example.com
          action: member
  2. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/inventory <path_to_playbooks_directory>/ensure-idoverrideuser-can-login-with-sshkey.yml
    1. Copy to Clipboard Toggle word wrap
      $ ssh root@host1
      Password:
    2. Copy to Clipboard Toggle word wrap
      root@host1 ~]# sss_cache -E
    3. Copy to Clipboard Toggle word wrap
      root@host1 ~]# systemctl restart sssd

  • Copy to Clipboard Toggle word wrap
    [root@r8server ~]# ssh -i ~/.ssh/id_rsa.pub idm_user@host1.idm.example.com
    
    Last login: Sun Jun 21 22:34:25 2023 from 192.168.122.229
    [idm_user@host1 ~]$

36.11.

  1. Copy to Clipboard Toggle word wrap
    [...]
    # Allow initgroups to default to the setting for group.
    initgroups: sss [SUCCESS=merge] files
  2. Copy to Clipboard Toggle word wrap
    $ getent group audio
    ---------------------
    audio:x:63
  3. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to manage idoverrideuser
      hosts: ipaserver
      become: false
    
      tasks:
      - name: Add aduser@addomain.com user to the Default Trust View
        ipaidoverrideuser:
          ipaadmin_password: "{{ ipaadmin_password }}"
          idview: "Default Trust View"
          anchor: aduser@addomain.com
  4. Copy to Clipboard Toggle word wrap
      - name: Add the audio group with the aduser member and GID of 63
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: audio
          idoverrideuser:
          - aduser@addomain.com
          gidnumber: 63
  5. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory add-aduser-to-audio-group.yml

  1. Copy to Clipboard Toggle word wrap
    $ ssh aduser@addomain.com@client.idm.example.com
  2. Copy to Clipboard Toggle word wrap
    $ id aduser@addomain.com
    uid=702801456(aduser@addomain.com) gid=63(audio) groups=63(audio)

36.12.

  1. Copy to Clipboard Toggle word wrap
    ---
    - name: Ensure both local user and IdM user have access to same files
      hosts: ipaserver
      become: false
      gather_facts: false
    
      tasks:
      - name: Ensure idview_for_host1 is applied to host1.idm.example.com
        ipaidview:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: idview_for_host01
          host: host1.idm.example.com
      - name: Ensure idmuser is present in idview_for_host01 with the UID of 20001
        ipaidoverrideuser:
          ipaadmin_password: "{{ ipaadmin_password }}"
          idview: idview_for_host01
          anchor: idm_user
          UID: 20001
  2. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory ensure-idmuser-and-local-user-have-access-to-same-files.yml

36.13.

  1. Copy to Clipboard Toggle word wrap
    ---
    - name: Ensure both local user and IdM user have access to same files
      hosts: ipaserver
      become: false
      gather_facts: false
    
      tasks:
      - name: Ensure idview_for_host1 is applied to host01.idm.example.com
        ipaidview:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: idview_for_host01
          host: host01.idm.example.com
    
      - name: Ensure an IdM user is present in ID view with two certificates
        ipaidoverrideuser:
          ipaadmin_password: "{{ ipaadmin_password }}"
          idview: idview_for_host01
          anchor: idm_user
          certificate:
          - "{{ lookup('file', 'cert1.b64', rstrip=False) }}"
          - "{{ lookup('file', 'cert2.b64', rstrip=False) }}"

  2. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory ensure-idmuser-present-in-idview-with-certificates.yml

36.14.

  1. Copy to Clipboard Toggle word wrap
    $ getent group audio
    ---------------------
    audio:x:63
  2. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to give IdM group access to sound card on IdM client
      hosts: ipaserver
      become: false
    
      tasks:
      - name: Ensure the audio group exists in IdM
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: audio
    
      - name: Ensure idview_for_host01 exists and is applied to host01.idm.example.com
        ipaidview:
          ipaadmin_password:  ”{{ ipaadmin_password }}"
          name: idview_for_host01
          host: host01.idm.example.com
    
      - name: Add an override for the IdM audio group with GID 63 to idview_for_host01
        ipaidoverridegroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          idview: idview_for_host01
          anchor: audio
          GID: 63
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory give-idm-group-access-to-sound-card-on-idm-client.yml

  1. Copy to Clipboard Toggle word wrap
    $ kinit admin
    Password:
  2. Copy to Clipboard Toggle word wrap
    $ ipa user-add testuser --first test --last user --password
    User login [tuser]:
    Password:
    Enter Password again to verify:
    ------------------
    Added user "tuser"
    ------------------
  3. Copy to Clipboard Toggle word wrap
    $ ipa group-add-member --tuser audio
  4. Copy to Clipboard Toggle word wrap
    $ ssh tuser@host01.idm.example.com
  5. Copy to Clipboard Toggle word wrap
    $ id tuser
    uid=702801456(tuser) gid=63(audio) groups=63(audio)

36.15.

  1. Copy to Clipboard Toggle word wrap
    $ ipa idview-show example-view
      ID View Name: example-view
      User object overrides: example-user1
      Group object overrides: example-group

第37章

37.1.

注記

表37.1
    

表37.2
     

注記

37.2.

  1. Copy to Clipboard Toggle word wrap
    # ipa idoverrideuser-add 'Default Trust View' ad_user@ad.example.com --gidnumber=732000006
  2. Copy to Clipboard Toggle word wrap
    # sssctl cache-expire -u ad_user@ad.example.com

  • Copy to Clipboard Toggle word wrap
    # id ad_user@ad.example.com
    uid=702801456(ad_user@ad.example.com) gid=732000006(ad_admins)
    groups=732000006(ad_admins),702800513(domain users@ad.example.com)

37.3.

  1. Copy to Clipboard Toggle word wrap
    $ ipa idview-add example_for_host1
    ---------------------------
    Added ID View "example_for_host1"
    ---------------------------
      ID View Name: example_for_host1
    Copy to Clipboard Toggle word wrap
    $ ipa idoverrideuser-add example_for_host1 ad_user@ad.example.com --gidnumber=732001337
    -----------------------------
    Added User ID override "ad_user@ad.example.com"
    -----------------------------
      Anchor to override: ad_user@ad.example.com
      GID: 732001337
  2. Copy to Clipboard Toggle word wrap
    $ ipa idview-apply example_for_host1 --hosts=host1.idm.example.com
    -----------------------------
    Applied ID View "example_for_host1"
    -----------------------------
    hosts: host1.idm.example.com
    ---------------------------------------------
    Number of hosts the ID View was applied to: 1
    ---------------------------------------------
    注記

  3. Copy to Clipboard Toggle word wrap
    [root@host1 ~]# sssctl cache-expire -u ad_user@ad.example.com

  1. Copy to Clipboard Toggle word wrap
    [root@r8server ~]# ssh ad_user@ad.example.com@host1.idm.example.com
  2. Copy to Clipboard Toggle word wrap
    [ad_user@ad.example.com@host1 ~]$ id ad_user@ad.example.com
    uid=702801456(ad_user@ad.example.com) gid=732001337(admins2)
    groups=732001337(admins2),702800513(domain users@ad.example.com)

37.4.

    1. Copy to Clipboard Toggle word wrap
      [root@server ~]# ipa hostgroup-add --desc="Baltimore hosts" baltimore
      ---------------------------
      Added hostgroup "baltimore"
      ---------------------------
      Host-group: baltimore
      Description: Baltimore hosts
    2. Copy to Clipboard Toggle word wrap
      [root@server ~]# ipa hostgroup-add-member --hosts={host102,host103} baltimore
      Host-group: baltimore
      Description: Baltimore hosts
      Member hosts: host102.idm.example.com, host103.idm.example.com
      -------------------------
      Number of members added 2
      -------------------------
  1. Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa idview-apply --hostgroups=baltimore
    ID View Name: example_for_host1
    -----------------------------------------
    Applied ID View "example_for_host1"
    -----------------------------------------
      hosts: host102.idm.example.com, host103.idm.example.com
    ---------------------------------------------
    Number of hosts the ID View was applied to: 2
    ---------------------------------------------
    1. Copy to Clipboard Toggle word wrap
      [root@server ~]# ipa hostgroup-add-member --hosts=somehost.idm.example.com baltimore
        Host-group: baltimore
        Description: Baltimore hosts
        Member hosts:  host102.idm.example.com, host103.idm.example.com,somehost.idm.example.com
      -------------------------
      Number of members added 1
      -------------------------
    2. Copy to Clipboard Toggle word wrap
      [root@server ~]# ipa idview-show example_for_host1 --all
        dn: cn=example_for_host1,cn=views,cn=accounts,dc=idm,dc=example,dc=com
        ID View Name: example_for_host1
      [...]
        Hosts the view applies to: host102.idm.example.com, host103.idm.example.com
        objectclass: ipaIDView, top, nsContainer

    3. Copy to Clipboard Toggle word wrap
      [root@server ~]# ipa idview-apply --host=somehost.idm.example.com
      ID View Name: example_for_host1
      -----------------------------------------
      Applied ID View "example_for_host1"
      -----------------------------------------
        hosts: somehost.idm.example.com
      ---------------------------------------------
      Number of hosts the ID View was applied to: 1
      ---------------------------------------------

  • Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa idview-show example_for_host1 --all
      dn: cn=example_for_host1,cn=views,cn=accounts,dc=idm,dc=example,dc=com
      ID View Name: example_for_host1
    [...]
      Hosts the view applies to: host102.idm.example.com, host103.idm.example.com, somehost.idm.example.com
      objectclass: ipaIDView, top, nsContainer

第38章

38.1.

38.2.

注記

重要

38.3.

重要

  • Copy to Clipboard Toggle word wrap
    # ipa idrange-find
    ---------------
    1 range matched
    ---------------
      Range name: IDM.EXAMPLE.COM_id_range
      First Posix ID of the range: 882200000
      Number of IDs in the range: 200000
      Range type: local domain range
    ----------------------------
    Number of entries returned 1
    ----------------------------

38.4.

重要

  1. Copy to Clipboard Toggle word wrap
    # ipa idrange-add IDM.EXAMPLE.COM_new_range --base-id 5000 --range-size 1000 --rid-base 300000 --secondary-rid-base 1300000 --type ipa-local
    
    ipa: WARNING: Service dirsrv@IDM-EXAMPLE-COM.service requires restart on IPA server <all IPA servers> to apply configuration changes.
    ------------------------------------------
    Added ID range "IDM.EXAMPLE.COM_new_range"
    ------------------------------------------
      Range name: IDM.EXAMPLE.COM_new_range
      First Posix ID of the range: 5000
      Number of IDs in the range: 1000
      First RID of the corresponding RID range: 300000
      First RID of the secondary RID range: 1300000
      Range type: local domain range
  2. Copy to Clipboard Toggle word wrap
    # systemctl restart dirsrv@IDM-EXAMPLE-COM.service

    1. Copy to Clipboard Toggle word wrap
      # sss_cache -E
    2. Copy to Clipboard Toggle word wrap
      # systemctl restart sssd
      注記

  • Copy to Clipboard Toggle word wrap
    # ipa idrange-find
    ----------------
    2 ranges matched
    ----------------
      Range name: IDM.EXAMPLE.COM_id_range
      First Posix ID of the range: 882200000
      Number of IDs in the range: 200000
      Range type: local domain range
    
      Range name: IDM.EXAMPLE.COM_new_range
      First Posix ID of the range: 5000
      Number of IDs in the range: 1000
      First RID of the corresponding RID range: 300000
      First RID of the secondary RID range: 1300000
      Range type: local domain range
    ----------------------------
    Number of entries returned 2
    ----------------------------

38.5.

Copy to Clipboard Toggle word wrap
$ ipa idrange-show IDM.EXAMPLE.COM_id_range
  Range name: IDM.EXAMPLE.COM_id_range
  First Posix ID of the range: 196600000
  Number of IDs in the range: 200000
  First RID of the corresponding RID range: 1000
  First RID of the secondary RID range: 1000000
  Range type: local domain range

注記

38.6.

注記

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to manage idrange
      hosts: ipaserver
      become: no
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure local idrange is present
        ipaidrange:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: new_id_range
          base_id: 12000000
          range_size: 200000
          rid_base: 1000000
          secondary_rid_base: 200000000
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory idrange-present.yml
  4. Copy to Clipboard Toggle word wrap
    # systemctl restart dirsrv@IDM.EXAMPLE.COM.service

    1. Copy to Clipboard Toggle word wrap
      # sss_cache -E
    2. Copy to Clipboard Toggle word wrap
      # systemctl restart sssd
      注記

Copy to Clipboard Toggle word wrap
# ipa idrange-find
----------------
2 ranges matched
----------------
  Range name: IDM.EXAMPLE.COM_id_range
  First Posix ID of the range: 882200000
  Number of IDs in the range: 200000
  Range type: local domain range

  Range name: IDM.EXAMPLE.COM_new_id_range
  First Posix ID of the range: 12000000
  Number of IDs in the range: 200000
  Range type: local domain range
----------------------------
Number of entries returned 2
----------------------------

38.7.

警告

  1. Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa idrange-find
  2. Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa idrange-del AD.EXAMPLE.COM_id_range
  3. Copy to Clipboard Toggle word wrap
    [root@server ~]# systemctl restart sssd

38.8.

    • Copy to Clipboard Toggle word wrap
      # ipa-replica-manage dnarange-show
      serverA.example.com: 1001-1500
      serverB.example.com: 1501-2000
      serverC.example.com: No range set
      
      # ipa-replica-manage dnarange-show serverA.example.com
      serverA.example.com: 1001-1500
    • Copy to Clipboard Toggle word wrap
      # ipa-replica-manage dnanextrange-show
      serverA.example.com: 2001-2500
      serverB.example.com: No on-deck range set
      serverC.example.com: No on-deck range set
      
      # ipa-replica-manage dnanextrange-show serverA.example.com
      serverA.example.com: 2001-2500

38.9.

注記

38.10.

重要

  • Copy to Clipboard Toggle word wrap
    # ipa-replica-manage dnarange-set serverA.example.com 1250-1499
  • Copy to Clipboard Toggle word wrap
    # ipa-replica-manage dnanextrange-set serverB.example.com 1500-5000

第39章

39.1.

  1. Copy to Clipboard Toggle word wrap
    # ipa subid-find
    • Copy to Clipboard Toggle word wrap
      # ipa subid-generate --owner=idmuser
      
      Added subordinate id "359dfcef-6b76-4911-bd37-bb5b66b8c418"
      
        Unique ID: 359dfcef-6b76-4911-bd37-bb5b66b8c418
        Description: auto-assigned subid
        Owner: idmuser
        SubUID range start: 2147483648
        SubUID range size: 65536
        SubGID range start: 2147483648
        SubGID range size: 65536
    • Copy to Clipboard Toggle word wrap
      # /usr/libexec/ipa/ipa-subids --all-users
      
      Found 2 user(s) without subordinate ids
        Processing user 'user4' (1/2)
        Processing user 'user5' (2/2)
      Updated 2 user(s)
      The ipa-subids command was successful
  2. Copy to Clipboard Toggle word wrap
    # ipa config-mod --user-default-subid=True

  • Copy to Clipboard Toggle word wrap
    # ipa subid-find --owner=idmuser
    
    1 subordinate id matched
    
      Unique ID: 359dfcef-6b76-4911-bd37-bb5b66b8c418
      Owner: idmuser
      SubUID range start: 2147483648
      SubUID range size: 65536
      SubGID range start: 2147483648
      SubGID range size: 65536
    
    Number of entries returned 1

39.2.

39.3.

    • Copy to Clipboard Toggle word wrap
      $ ipa subid-show 359dfcef-6b76-4911-bd37-bb5b66b8c418
      
        Unique ID: 359dfcef-6b76-4911-bd37-bb5b66b8c418
        Owner: idmuser
        SubUID range start: 2147483648
        SubUID range size: 65536
        SubGID range start: 2147483648
        SubGID range size: 65536
    • Copy to Clipboard Toggle word wrap
      $ ipa subid-match --subuid=2147483670
      
      1 subordinate id matched
      
        Unique ID: 359dfcef-6b76-4911-bd37-bb5b66b8c418
        Owner: uid=idmuser
        SubUID range start: 2147483648
        SubUID range size: 65536
        SubGID range start: 2147483648
        SubGID range size: 65536
      
      Number of entries returned 1

39.4.

  1. Copy to Clipboard Toggle word wrap
    [...]
    subid: sss
    注記

  2. Copy to Clipboard Toggle word wrap
    $ getsubids idmuser
    0: idmuser 2147483648 65536

第40章

40.1.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/topology/add-topologysegment.yml add-topologysegment-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to handle topologysegment
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
    - name: Add topology segment
        ipatopologysegment:
          ipaadmin_password: "{{ ipaadmin_password }}"
          suffix: domain
          left: server.idm.example.com
          right: replica.idm.example.com
          state: present
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory add-topologysegment-copy.yml

40.2.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/topology/add-topologysegments.yml add-topologysegments-copy.yml
  3. Copy to Clipboard Toggle word wrap
    ---
    - name: Add topology segments
      hosts: ipaserver
      gather_facts: false
    
      vars:
        ipaadmin_password: "{{ ipaadmin_password }}"
        ipatopology_segments:
        - {suffix: domain, left: replica1.idm.example.com , right: replica2.idm.example.com }
        - {suffix: domain, left: replica2.idm.example.com , right: replica3.idm.example.com }
        - {suffix: domain, left: replica3.idm.example.com , right: replica4.idm.example.com }
        - {suffix: domain+ca, left: replica4.idm.example.com , right: replica1.idm.example.com }
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Add topology segment
        ipatopologysegment:
          ipaadmin_password: "{{ ipaadmin_password }}"
          suffix: "{{ item.suffix }}"
          name: "{{ item.name | default(omit) }}"
          left: "{{ item.left }}"
          right: "{{ item.right }}"
          state: present
        loop: "{{ ipatopology_segments | default([]) }}"
  4. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory add-topologysegments-copy.yml

40.3.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/topology/check-topologysegments.yml check-topologysegments-copy.yml
  3. Copy to Clipboard Toggle word wrap
    ---
    - name: Add topology segments
      hosts: ipaserver
      gather_facts: false
    
      vars:
        ipaadmin_password: "{{ ipaadmin_password }}"
        ipatopology_segments:
        - {suffix: domain, left: replica1.idm.example.com, right: replica2.idm.example.com }
        - {suffix: domain, left: replica2.idm.example.com , right: replica3.idm.example.com }
        - {suffix: domain, left: replica3.idm.example.com , right: replica4.idm.example.com }
        - {suffix: domain+ca, left: replica4.idm.example.com , right: replica1.idm.example.com }
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Check topology segment
        ipatopologysegment:
          ipaadmin_password: "{{ ipaadmin_password }}"
          suffix: "{{ item.suffix }}"
          name: "{{ item.name | default(omit) }}"
          left: "{{ item.left }}"
          right: "{{ item.right }}"
          state: checked
        loop: "{{ ipatopology_segments | default([]) }}"
  4. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory check-topologysegments-copy.yml

40.4.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/topology/ verify-topologysuffix.yml verify-topologysuffix-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to handle topologysuffix
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Verify topology suffix
        ipatopologysuffix:
          ipaadmin_password: "{{ ipaadmin_password }}"
          suffix: domain
          state: verified
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory verify-topologysuffix-copy.yml

40.5.

注記

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/topology/reinitialize-topologysegment.yml reinitialize-topologysegment-copy.yml
    • Copy to Clipboard Toggle word wrap
      ---
      - name: Playbook to handle topologysegment
        hosts: ipaserver
      
        vars_files:
        - /home/user_name/MyPlaybooks/secret.yml
        tasks:
        - name: Reinitialize topology segment
          ipatopologysegment:
            ipaadmin_password: "{{ ipaadmin_password }}"
            suffix: domain
            left: server.idm.example.com
            right: replica.idm.example.com
            direction: left-to-right
            state: reinitialized
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory reinitialize-topologysegment-copy.yml

40.6.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/topology/delete-topologysegment.yml delete-topologysegment-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to handle topologysegment
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
    - name: Delete topology segment
        ipatopologysegment:
          ipaadmin_password: "{{ ipaadmin_password }}"
          suffix: domain
          left: replica01.idm.example.com
          right: replica02.idm.example.com:
          state: absent
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory delete-topologysegment-copy.yml

40.7.

第41章

41.1.

  1. Copy to Clipboard Toggle word wrap
    $ kinit admin
    1. Copy to Clipboard Toggle word wrap
      $ ipa user-add provisionator --first=provisioning --last=account --password
      1. Copy to Clipboard Toggle word wrap
        $ ipa role-add --desc "Responsible for provisioning stage users" "System Provisioning"
      2. Copy to Clipboard Toggle word wrap
        $ ipa role-add-privilege "System Provisioning" --privileges="Stage User Provisioning"
      3. Copy to Clipboard Toggle word wrap
        $ ipa role-add-member --users=provisionator "System Provisioning"
      4. Copy to Clipboard Toggle word wrap
        $ ipa user-find provisionator --all --raw
        --------------
        1 user matched
        --------------
          dn: uid=provisionator,cn=users,cn=accounts,dc=idm,dc=example,dc=com
          uid: provisionator
          [...]
    1. Copy to Clipboard Toggle word wrap
      $ ipa user-add activator --first=activation --last=account --password
    2. Copy to Clipboard Toggle word wrap
      $ ipa role-add-member --users=activator "User Administrator"
  2. Copy to Clipboard Toggle word wrap
    $ ipa group-add application-accounts
  3. Copy to Clipboard Toggle word wrap
    $ ipa pwpolicy-add application-accounts --maxlife=10000 --minlife=0 --history=0 --minclasses=4 --minlength=8 --priority=1 --maxfail=0 --failinterval=1 --lockouttime=0
  4. Copy to Clipboard Toggle word wrap
    $ ipa pwpolicy-show application-accounts
      Group: application-accounts
      Max lifetime (days): 10000
      Min lifetime (hours): 0
      History size: 0
    [...]
  5. Copy to Clipboard Toggle word wrap
    $ ipa group-add-member application-accounts --users={provisionator,activator}
  6. Copy to Clipboard Toggle word wrap
    $ kpasswd provisionator
    $ kpasswd activator

41.2.

重要

  1. Copy to Clipboard Toggle word wrap
    # ipa-getkeytab -s server.idm.example.com -p "activator" -k /etc/krb5.ipa-activation.keytab

  2. Copy to Clipboard Toggle word wrap
    #!/bin/bash
    
    kinit -k -i activator
    
    ipa stageuser-find --all --raw | grep "  uid:" | cut -d ":" -f 2 | while read uid; do ipa stageuser-activate ${uid}; done
  3. Copy to Clipboard Toggle word wrap
    # chmod 755 /usr/local/sbin/ipa-activate-all
    # chown root:root /usr/local/sbin/ipa-activate-all
  4. Copy to Clipboard Toggle word wrap
    [Unit]
    Description=Scan IdM every minute for any stage users that must be activated
    
    [Service]
    Environment=KRB5_CLIENT_KTNAME=/etc/krb5.ipa-activation.keytab
    Environment=KRB5CCNAME=FILE:/tmp/krb5cc_ipa-activate-all
    ExecStart=/usr/local/sbin/ipa-activate-all
  5. Copy to Clipboard Toggle word wrap
    [Unit]
    Description=Scan IdM every minute for any stage users that must be activated
    
    [Timer]
    OnBootSec=15min
    OnUnitActiveSec=1min
    
    [Install]
    WantedBy=multi-user.target
  6. Copy to Clipboard Toggle word wrap
    # systemctl daemon-reload
  7. Copy to Clipboard Toggle word wrap
    # systemctl enable ipa-activate-all.timer
  8. Copy to Clipboard Toggle word wrap
    # systemctl start ipa-activate-all.timer
  9. Copy to Clipboard Toggle word wrap
    # systemctl status ipa-activate-all.timer
    ● ipa-activate-all.timer - Scan IdM every minute for any stage users that must be activated
       Loaded: loaded (/etc/systemd/system/ipa-activate-all.timer; enabled; vendor preset: disabled)
       Active: active (waiting) since Wed 2020-06-10 16:34:55 CEST; 15s ago
      Trigger: Wed 2020-06-10 16:35:55 CEST; 44s left
    
    Jun 10 16:34:55 server.idm.example.com systemd[1]: Started Scan IdM every minute for any stage users that must be activated.

41.3.

  1. Copy to Clipboard Toggle word wrap
    dn: uid=stageidmuser,cn=staged users,cn=accounts,cn=provisioning,dc=idm,dc=example,dc=com
    changetype: add
    objectClass: top
    objectClass: inetorgperson
    uid: stageidmuser
    sn: surname
    givenName: first_name
    cn: full_name
  2. Copy to Clipboard Toggle word wrap
    $ scp add-stageidmuser.ldif provisionator@server.idm.example.com:/provisionator/
    Password:
    add-stageidmuser.ldif                                                                                          100%  364   217.6KB/s   00:00
  3. Copy to Clipboard Toggle word wrap
    $ ssh provisionator@server.idm.example.com
    Password:
    [provisionator@server ~]$
  4. Copy to Clipboard Toggle word wrap
    [provisionator@server ~]$ kinit provisionator
  5. Copy to Clipboard Toggle word wrap
    ~]$ ldapadd -h server.idm.example.com -p 389 -f  add-stageidmuser.ldif
    SASL/GSSAPI authentication started
    SASL username: provisionator@IDM.EXAMPLE.COM
    SASL SSF: 256
    SASL data security layer installed.
    adding the entry "uid=stageidmuser,cn=staged users,cn=accounts,cn=provisioning,dc=idm,dc=example,dc=com"

41.4.

  1. Copy to Clipboard Toggle word wrap
    $ ssh provisionator@server.idm.example.com
    Password:
    [provisionator@server ~]$
  2. Copy to Clipboard Toggle word wrap
    $ kinit provisionator
  3. Copy to Clipboard Toggle word wrap
    # ldapmodify -h server.idm.example.com -p 389 -Y GSSAPI
    SASL/GSSAPI authentication started
    SASL username: provisionator@IDM.EXAMPLE.COM
    SASL SSF: 56
    SASL data security layer installed.
  4. Copy to Clipboard Toggle word wrap
    dn: uid=stageuser,cn=staged users,cn=accounts,cn=provisioning,dc=idm,dc=example,dc=com
  5. Copy to Clipboard Toggle word wrap
    changetype: add
  6. Copy to Clipboard Toggle word wrap
    objectClass: top
    objectClass: inetorgperson

  7. Copy to Clipboard Toggle word wrap
    uid: stageuser
  8. Copy to Clipboard Toggle word wrap
    cn: Babs Jensen
  9. Copy to Clipboard Toggle word wrap
    sn: Jensen
  10. Copy to Clipboard Toggle word wrap
    [Enter]
    
    adding new entry "uid=stageuser,cn=staged users,cn=accounts,cn=provisioning,dc=idm,dc=example,dc=com"

  • Copy to Clipboard Toggle word wrap
    $ ipa stageuser-show stageuser --all --raw
      dn: uid=stageuser,cn=staged users,cn=accounts,cn=provisioning,dc=idm,dc=example,dc=com
      uid: stageuser
      sn: Jensen
      cn: Babs Jensen
      has_password: FALSE
      has_keytab: FALSE
      nsaccountlock: TRUE
      objectClass: top
      objectClass: inetorgperson
      objectClass: organizationalPerson
      objectClass: person

41.5.

第42章

42.1.

  • Copy to Clipboard Toggle word wrap
    dn: uid=user_login,cn=staged users,cn=accounts,cn=provisioning,dc=idm,dc=example,dc=com
    changetype: add
    objectClass: top
    objectClass: inetorgperson
    uid: user_login
    sn: surname
    givenName: first_name
    cn: full_name
  • Copy to Clipboard Toggle word wrap
    dn: uid=user_login,cn=staged users,cn=accounts,cn=provisioning,dc=idm,dc=example,dc=com
    changetype: add
    objectClass: top
    objectClass: person
    objectClass: inetorgperson
    objectClass: organizationalperson
    objectClass: posixaccount
    uid: user_login
    uidNumber: UID_number
    gidNumber: GID_number
    sn: surname
    givenName: first_name
    cn: full_name
    homeDirectory: /home/user_login

  • Copy to Clipboard Toggle word wrap
    dn: distinguished_name
    changetype: modify
    replace: attribute_to_modify
    attribute_to_modify: new_value
  • Copy to Clipboard Toggle word wrap
    dn: distinguished_name
    changetype: modify
    replace: nsAccountLock
    nsAccountLock: TRUE
  • Copy to Clipboard Toggle word wrap
    dn: distinguished_name
    changetype: modify
    replace: nsAccountLock
    nsAccountLock: FALSE

  • Copy to Clipboard Toggle word wrap
    dn: distinguished_name
    changetype: modrdn
    newrdn: uid=user_login
    deleteoldrdn: 0
    newsuperior: cn=deleted users,cn=accounts,cn=provisioning,dc=idm,dc=example,dc=com
注記

Copy to Clipboard Toggle word wrap
[...]
# ldapsearch -LLL -x -D "uid=user_allowed_to_modify_user_entries,cn=users,cn=accounts,dc=idm,dc=example,dc=com" -w "Secret123" -H ldap://r8server.idm.example.com -b "cn=users,cn=accounts,dc=idm,dc=example,dc=com" uid=test_user
dn: uid=test_user,cn=users,cn=accounts,dc=idm,dc=example,dc=com
memberOf: cn=ipausers,cn=groups,cn=accounts,dc=idm,dc=example,dc=com

42.2.

Copy to Clipboard Toggle word wrap
dn: cn=group_name,cn=groups,cn=accounts,dc=idm,dc=example,dc=com
changetype: add
objectClass: top
objectClass: ipaobject
objectClass: ipausergroup
objectClass: groupofnames
objectClass: nestedgroup
objectClass: posixgroup
uid: group_name
cn: group_name
gidNumber: GID_number

  • Copy to Clipboard Toggle word wrap
    dn: group_distinguished_name
    changetype: delete
  • Copy to Clipboard Toggle word wrap
    dn: group_distinguished_name
    changetype: modify
    add: member
    member: uid=user_login,cn=users,cn=accounts,dc=idm,dc=example,dc=com

  • Copy to Clipboard Toggle word wrap
    dn: distinguished_name
    changetype: modify
    delete: member
    member: uid=user_login,cn=users,cn=accounts,dc=idm,dc=example,dc=com
注記

Copy to Clipboard Toggle word wrap
# ldapsearch -YGSSAPI -H ldap://server.idm.example.com -b "cn=groups,cn=accounts,dc=idm,dc=example,dc=com" "cn=group_name"
dn: cn=group_name,cn=groups,cn=accounts,dc=idm,dc=example,dc=com
ipaNTSecurityIdentifier: S-1-5-21-1650388524-2605035987-2578146103-11017
cn: testgroup
objectClass: top
objectClass: groupofnames
objectClass: nestedgroup
objectClass: ipausergroup
objectClass: ipaobject
objectClass: posixgroup
objectClass: ipantgroupattrs
ipaUniqueID: 569bf864-9d45-11ea-bea3-525400f6f085
gidNumber: 1997010017

42.3.

  1. 例42.1

    Copy to Clipboard Toggle word wrap
    # ldapmodify -Y GSSAPI -H ldap://server.example.com
    dn: uid=testuser,cn=users,cn=accounts,dc=example,dc=com
    changetype: modify
    replace: telephoneNumber
    telephonenumber: 88888888

  2. 例42.2

    Copy to Clipboard Toggle word wrap
    # ldapmodify -Y GSSAPI -H ldap://server.example.com -f ~/example.ldif

42.4.

  1. Copy to Clipboard Toggle word wrap
    $ kinit admin
  2. Copy to Clipboard Toggle word wrap
    # ldapmodify -Y GSSAPI
    SASL/GSSAPI authentication started
    SASL username: admin@IDM.EXAMPLE.COM
    SASL SSF: 256
    SASL data security layer installed.
  3. Copy to Clipboard Toggle word wrap
    dn: uid=user1,cn=users,cn=accounts,dc=idm,dc=example,dc=com
  4. Copy to Clipboard Toggle word wrap
    changetype: modrdn
  5. Copy to Clipboard Toggle word wrap
    newrdn: uid=user1
  6. Copy to Clipboard Toggle word wrap
    deleteoldrdn: 0
  7. Copy to Clipboard Toggle word wrap
    newsuperior: cn=deleted users,cn=accounts,cn=provisioning,dc=idm,dc=example,dc=com

  8. Copy to Clipboard Toggle word wrap
    [Enter]
    
    modifying rdn of entry "uid=user1,cn=users,cn=accounts,dc=idm,dc=example,dc=com"

  • Copy to Clipboard Toggle word wrap
    $ ipa user-find --preserved=true
    --------------
    1 user matched
    --------------
      User login: user1
      First name: First 1
      Last name: Last 1
      Home directory: /home/user1
      Login shell: /bin/sh
      Principal name: user1@IDM.EXAMPLE.COM
      Principal alias: user1@IDM.EXAMPLE.COM
      Email address: user1@idm.example.com
      UID: 1997010003
      GID: 1997010003
      Account disabled: True
      Preserved user: True
    ----------------------------
    Number of entries returned 1
    ----------------------------

第43章

43.1.

43.2.

43.3.

43.4.

  • 表43.1

  • 表43.2
     

43.5.

表43.3
    

表43.4
   

43.6.

注記

表43.5
   

43.7.

  • Copy to Clipboard Toggle word wrap
    $ ipa host-add client1.example.com
  • Copy to Clipboard Toggle word wrap
    $ ipa host-add --ip-address=192.168.166.31 client1.example.com
  • Copy to Clipboard Toggle word wrap
    $ ipa host-add --force client1.example.com

43.8.

Copy to Clipboard Toggle word wrap
$ ipa host-del --updatedns client1.example.com

43.9.

43.9.1.

  • Copy to Clipboard Toggle word wrap
    $ kinit admin
    $ ipa host-disable client.example.com

重要

43.9.2.

Copy to Clipboard Toggle word wrap
$  ipa-getkeytab -s server.example.com -p host/client.example.com -k /etc/krb5.keytab -D "cn=directory manager" -w password
注記

43.10.

注記

43.10.1.

  1. Copy to Clipboard Toggle word wrap
    ipa service-add-host principal --hosts=<hostname>

    Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa service-add HTTP/web.example.com
    [root@server ~]# ipa service-add-host HTTP/web.example.com --hosts=client1.example.com
  2. Copy to Clipboard Toggle word wrap
    [root@client1 ~]# kinit -kt /etc/krb5.keytab host/client1.example.com
    [root@client1 ~]# ipa-getkeytab -s server.example.com -k /tmp/test.keytab -p HTTP/web.example.com
    Keytab successfully retrieved and stored in: /tmp/test.keytab
  3. Copy to Clipboard Toggle word wrap
    [root@client1]# kinit -kt /etc/krb5.keytab host/client1.example.com
    [root@client1]# openssl req -newkey rsa:2048 -subj '/CN=web.example.com/O=EXAMPLE.COM' -keyout /etc/pki/tls/web.key -out /tmp/web.csr -nodes
    Generating a 2048 bit RSA private key
    .............................................................+++
    ............................................................................................+++
    Writing new private key to '/etc/pki/tls/private/web.key'
  4. Copy to Clipboard Toggle word wrap
    [root@client1]# ipa cert-request --principal=HTTP/web.example.com web.csr
    Certificate: MIICETCCAXqgA...[snip]
    Subject: CN=web.example.com,O=EXAMPLE.COM
    Issuer: CN=EXAMPLE.COM Certificate Authority
    Not Before: Tue Feb 08 18:51:51 2011 UTC
    Not After: Mon Feb 08 18:51:51 2016 UTC
    Serial number: 1005

43.10.2.

  1. Copy to Clipboard Toggle word wrap
    [root@server ~]# kinit admin
  2. Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa host-add-managedby client2.example.com --hosts=client1.example.com
  3. Copy to Clipboard Toggle word wrap
    [root@client1 ~]# kinit -kt /etc/krb5.keytab host/client1.example.com
  4. Copy to Clipboard Toggle word wrap
    [root@client1 ~]# ipa-getkeytab -s server.example.com -k /tmp/client2.keytab -p host/client2.example.com
    Keytab successfully retrieved and stored in: /tmp/client2.keytab

43.10.3.

  • Copy to Clipboard Toggle word wrap
    [root@server ~]# kinit -kt /etc/krb5.keytab host/ipa.example.com@EXAMPLE.COM
  • Copy to Clipboard Toggle word wrap
    [root@server ~]# kinit -kt /etc/httpd/conf/krb5.keytab HTTP/ipa.example.com@EXAMPLE.COM

43.11.

第44章

44.1.

44.2.

44.3.

44.4.

  • 表44.1

  • 表44.2
     

44.5.

注記

表44.3
   

44.6.

  1. 図44.1

    注記

第45章

45.1.

注記

  1. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  2. Copy to Clipboard Toggle word wrap
    ---
    - name: Host present
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Host host01.idm.example.com present
        ipahost:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: host01.idm.example.com
          state: present
          force: true
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-host-is-present.yml
注記

  1. Copy to Clipboard Toggle word wrap
    $ ssh admin@server.idm.example.com
    Password:
  2. Copy to Clipboard Toggle word wrap
    $ ipa host-show host01.idm.example.com
      Host name: host01.idm.example.com
      Principal name: host/host01.idm.example.com@IDM.EXAMPLE.COM
      Principal alias: host/host01.idm.example.com@IDM.EXAMPLE.COM
      Password: False
      Keytab: False
      Managed by: host01.idm.example.com

45.2.

注記

  1. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  2. Copy to Clipboard Toggle word wrap
    ---
    - name: Host present
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure host01.idm.example.com is present
        ipahost:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: host01.idm.example.com
          description: Example host
          ip_address: 192.168.0.123
          locality: Lab
          ns_host_location: Lab
          ns_os_version: RHEL 7
          ns_hardware_platform: Lenovo T61
          mac_address:
          - "08:00:27:E3:B1:2D"
          - "52:54:00:BD:97:1E"
          state: present
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-host-is-present.yml
注記

  1. Copy to Clipboard Toggle word wrap
    $ ssh admin@server.idm.example.com
    Password:
  2. Copy to Clipboard Toggle word wrap
    $ ipa host-show host01.idm.example.com
      Host name: host01.idm.example.com
      Description: Example host
      Locality: Lab
      Location: Lab
      Platform: Lenovo T61
      Operating system: RHEL 7
      Principal name: host/host01.idm.example.com@IDM.EXAMPLE.COM
      Principal alias: host/host01.idm.example.com@IDM.EXAMPLE.COM
      MAC address: 08:00:27:E3:B1:2D, 52:54:00:BD:97:1E
      Password: False
      Keytab: False
      Managed by: host01.idm.example.com

45.3.

注記

  1. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  2. Copy to Clipboard Toggle word wrap
    ---
    - name: Ensure hosts with random password
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Hosts host01.idm.example.com and host02.idm.example.com present with random passwords
        ipahost:
          ipaadmin_password: "{{ ipaadmin_password }}"
          hosts:
          - name: host01.idm.example.com
            random: true
            force: true
          - name: host02.idm.example.com
            random: true
            force: true
        register: ipahost
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-hosts-are-present.yml
    [...]
    TASK [Hosts host01.idm.example.com and host02.idm.example.com present with random passwords]
    changed: [r8server.idm.example.com] => {"changed": true, "host": {"host01.idm.example.com": {"randompassword": "0HoIRvjUdH0Ycbf6uYdWTxH"}, "host02.idm.example.com": {"randompassword": "5VdLgrf3wvojmACdHC3uA3s"}}}
注記

  1. Copy to Clipboard Toggle word wrap
    $ ssh admin@server.idm.example.com
    Password:
  2. Copy to Clipboard Toggle word wrap
    $ ipa host-show host01.idm.example.com
      Host name: host01.idm.example.com
      Password: True
      Keytab: False
      Managed by: host01.idm.example.com

45.4.

注記

  1. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  2. Copy to Clipboard Toggle word wrap
    ---
    - name: Host member IP addresses present
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure host101.example.com IP addresses present
        ipahost:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: host01.idm.example.com
          ip_address:
          - 192.168.0.123
          - fe80::20c:29ff:fe02:a1b3
          - 192.168.0.124
          - fe80::20c:29ff:fe02:a1b4
          force: true
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-host-with-multiple-IP-addreses-is-present.yml
注記

  1. Copy to Clipboard Toggle word wrap
    $ ssh admin@server.idm.example.com
    Password:
  2. Copy to Clipboard Toggle word wrap
    $ ipa host-show host01.idm.example.com
      Principal name: host/host01.idm.example.com@IDM.EXAMPLE.COM
      Principal alias: host/host01.idm.example.com@IDM.EXAMPLE.COM
      Password: False
      Keytab: False
      Managed by: host01.idm.example.com

    • Copy to Clipboard Toggle word wrap
      $ ipa dnsrecord-show idm.example.com host01
      [...]
        Record name: host01
        A record: 192.168.0.123, 192.168.0.124
        AAAA record: fe80::20c:29ff:fe02:a1b3, fe80::20c:29ff:fe02:a1b4

45.5.

  1. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  2. Copy to Clipboard Toggle word wrap
    ---
    - name: Host absent
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Host host01.idm.example.com absent
        ipahost:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: host01.idm.example.com
          updatedns: true
          state: absent
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-host-absent.yml
注記

  1. Copy to Clipboard Toggle word wrap
    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. Copy to Clipboard Toggle word wrap
    $ ipa host-show host01.idm.example.com
    ipa: ERROR: host01.idm.example.com: host not found

45.6.

第46章

46.1.

46.2.

  1. Copy to Clipboard Toggle word wrap
    $ ipa hostgroup-find
    -------------------
    1 hostgroup matched
    -------------------
      Host-group: ipaservers
      Description: IPA server hosts
    ----------------------------
    Number of entries returned 1
    ----------------------------
  2. Copy to Clipboard Toggle word wrap
    $ ipa hostgroup-find --all
    -------------------
    1 hostgroup matched
    -------------------
      dn: cn=ipaservers,cn=hostgroups,cn=accounts,dc=idm,dc=local
      Host-group: ipaservers
      Description: IPA server hosts
      Member hosts: xxx.xxx.xxx.xxx
      ipauniqueid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
      objectclass: top, groupOfNames, nestedGroup, ipaobject, ipahostgroup
    ----------------------------
    Number of entries returned 1
    ----------------------------

46.3.

  • Copy to Clipboard Toggle word wrap
    $ ipa hostgroup-add --desc 'My new host group' group_name
    ---------------------
    Added hostgroup "group_name"
    ---------------------
      Host-group: group_name
      Description: My new host group
    ---------------------

46.4.

  • Copy to Clipboard Toggle word wrap
    $ ipa hostgroup-del group_name
    --------------------------
    Deleted hostgroup "group_name"
    --------------------------
注記

46.5.

    • Copy to Clipboard Toggle word wrap
      $ ipa hostgroup-add-member group_name --hosts example_member
      Host-group: group_name
      Description: My host group
      Member hosts: example_member
      -------------------------
      Number of members added 1
      -------------------------
    • Copy to Clipboard Toggle word wrap
      $ ipa hostgroup-add-member group_name --hostgroups nested_group
      Host-group: group_name
      Description: My host group
      Member host-groups: nested_group
      -------------------------
      Number of members added 1
      -------------------------
    • Copy to Clipboard Toggle word wrap
      $ ipa hostgroup-add-member group_name --hosts={host1,host2} --hostgroups={group1,group2}
重要

46.6.

    • Copy to Clipboard Toggle word wrap
      $ ipa hostgroup-remove-member group_name --hosts example_member
      Host-group: group_name
      Description: My host group
      -------------------------
      Number of members removed 1
      -------------------------
    • Copy to Clipboard Toggle word wrap
      $ ipa hostgroup-remove-member group_name --hostgroups example_member
      Host-group: group_name
      Description: My host group
      -------------------------
      Number of members removed 1
      -------------------------
      注記

    • Copy to Clipboard Toggle word wrap
      $ ipa hostgroup-remove-member group_name --hosts={host1,host2} --hostgroups={group1,group2}

46.7.

  1. Copy to Clipboard Toggle word wrap
    $ ipa hostgroup-add-member-manager group_name --user example_member
    Host-group: group_name
    Member hosts: server.idm.example.com
    Member host-groups: project_admins
    Member of netgroups: group_name
    Membership managed by users: example_member
    -------------------------
    Number of members added 1
    -------------------------
  2. Copy to Clipboard Toggle word wrap
    $ ipa hostgroup-add-member-manager group_name --groups admin_group
    Host-group: group_name
    Member hosts: server.idm.example.com
    Member host-groups: project_admins
    Member of netgroups: group_name
    Membership managed by groups: admin_group
    Membership managed by users: example_member
    -------------------------
    Number of members added 1
    -------------------------
注記

  • Copy to Clipboard Toggle word wrap
    $ ipa hostgroup-show group_name
    Host-group: group_name
    Member hosts: server.idm.example.com
    Member host-groups: project_admins
    Membership managed by groups: admin_group
    Membership managed by users: example_member

46.8.

  1. Copy to Clipboard Toggle word wrap
    $ ipa hostgroup-remove-member-manager group_name --user example_member
    Host-group: group_name
    Member hosts: server.idm.example.com
    Member host-groups: project_admins
    Member of netgroups: group_name
    Membership managed by groups: nested_group
    ---------------------------
    Number of members removed 1
    ---------------------------
  2. Copy to Clipboard Toggle word wrap
    $ ipa hostgroup-remove-member-manager group_name --groups nested_group
    Host-group: group_name
    Member hosts: server.idm.example.com
    Member host-groups: project_admins
    Member of netgroups: group_name
    ---------------------------
    Number of members removed 1
    ---------------------------
注記

  • Copy to Clipboard Toggle word wrap
    $ ipa hostgroup-show group_name
    Host-group: group_name
    Member hosts: server.idm.example.com
    Member host-groups: project_admins

第47章

47.1.

47.2.

47.3.

47.4.

注記

47.5.

47.6.

47.7.

注記

47.8.

注記

第48章

48.1.

48.2.

注記

  1. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  2. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to handle hostgroups
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      # Ensure host-group databases is present
      - ipahostgroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: databases
          state: present

  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-hostgroup-is-present.yml

  1. Copy to Clipboard Toggle word wrap
    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. Copy to Clipboard Toggle word wrap
    $ kinit admin
    Password for admin@IDM.EXAMPLE.COM:
  3. Copy to Clipboard Toggle word wrap
    $ ipa hostgroup-show databases
      Host-group: databases

48.3.

  1. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  2. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to handle hostgroups
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      # Ensure host-group databases is present
      - ipahostgroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: databases
          host:
          - db.idm.example.com
          action: member

  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-hosts-or-hostgroups-are-present-in-hostgroup.yml

  1. Copy to Clipboard Toggle word wrap
    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. Copy to Clipboard Toggle word wrap
    $ kinit admin
    Password for admin@IDM.EXAMPLE.COM:
  3. Copy to Clipboard Toggle word wrap
    $ ipa hostgroup-show databases
      Host-group: databases
      Member hosts: db.idm.example.com

48.4.

  1. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  2. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to handle hostgroups
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      # Ensure hosts and hostgroups are present in existing databases hostgroup
      - ipahostgroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: databases
          hostgroup:
          - mysql-server
          - oracle-server
          action: member

  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-hosts-or-hostgroups-are-present-in-hostgroup.yml

  1. Copy to Clipboard Toggle word wrap
    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. Copy to Clipboard Toggle word wrap
    $ kinit admin
    Password for admin@IDM.EXAMPLE.COM:
  3. Copy to Clipboard Toggle word wrap
    $ ipa hostgroup-show databases
      Host-group: databases
      Member hosts: db.idm.example.com
      Member host-groups: mysql-server, oracle-server

48.5.

  1. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  2. Copy to Clipboard Toggle word wrap
    ---
    
    - name: Playbook to handle host group membership management
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure member manager user example_member is present for group_name
          ipahostgroup:
            ipaadmin_password: "{{ ipaadmin_password }}"
            name: group_name
            membermanager_user: example_member
    
      - name: Ensure member manager group project_admins is present for group_name
          ipahostgroup:
            ipaadmin_password: "{{ ipaadmin_password }}"
            name: group_name
            membermanager_group: project_admins
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-member-managers-host-groups.yml

  1. Copy to Clipboard Toggle word wrap
    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. Copy to Clipboard Toggle word wrap
    ipaserver]$ ipa hostgroup-show group_name
      Host-group: group_name
      Member hosts: server.idm.example.com
      Member host-groups: testhostgroup2
      Membership managed by groups: project_admins
      Membership managed by users: example_member

48.6.

  1. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  2. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to handle hostgroups
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      # Ensure host-group databases is absent
      - ipahostgroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: databases
          host:
          - db.idm.example.com
          action: member
          state: absent

  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-hosts-or-hostgroups-are-absent-in-hostgroup.yml

  1. Copy to Clipboard Toggle word wrap
    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. Copy to Clipboard Toggle word wrap
    $ kinit admin
    Password for admin@IDM.EXAMPLE.COM:
  3. Copy to Clipboard Toggle word wrap
    $ ipa hostgroup-show databases
      Host-group: databases
      Member host-groups: mysql-server, oracle-server

48.7.

  1. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  2. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to handle hostgroups
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      # Ensure hosts and hostgroups are absent in existing databases hostgroup
      - ipahostgroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: databases
          hostgroup:
          - mysql-server
          - oracle-server
          action: member
          state: absent

  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-hosts-or-hostgroups-are-absent-in-hostgroup.yml

  1. Copy to Clipboard Toggle word wrap
    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. Copy to Clipboard Toggle word wrap
    $ kinit admin
    Password for admin@IDM.EXAMPLE.COM:
  3. Copy to Clipboard Toggle word wrap
    $ ipa hostgroup-show databases
      Host-group: databases

48.8.

注記

  1. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  2. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to handle hostgroups
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - Ensure host-group databases is absent
        ipahostgroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: databases
          state: absent

  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-hostgroup-is-absent.yml

  1. Copy to Clipboard Toggle word wrap
    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. Copy to Clipboard Toggle word wrap
    $ kinit admin
    Password for admin@IDM.EXAMPLE.COM:
  3. Copy to Clipboard Toggle word wrap
    $ ipa hostgroup-show databases
    ipa: ERROR: databases: host group not found

48.9.

  1. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  2. Copy to Clipboard Toggle word wrap
    ---
    
    - name: Playbook to handle host group membership management
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure member manager host and host group members are absent for group_name
        ipahostgroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: group_name
          membermanager_user: example_member
          membermanager_group: project_admins
          action: member
          state: absent
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-member-managers-host-groups-are-absent.yml

  1. Copy to Clipboard Toggle word wrap
    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. Copy to Clipboard Toggle word wrap
    ipaserver]$ ipa hostgroup-show group_name
      Host-group: group_name
      Member hosts: server.idm.example.com
      Member host-groups: testhostgroup2

第49章

49.1.

  • Copy to Clipboard Toggle word wrap
    # ipa user-add-principal <user> <useralias>
    --------------------------------
    Added new aliases to user "user"
    --------------------------------
             User login: user
        Principal alias: user@IDM.EXAMPLE.COM, useralias@IDM.EXAMPLE.COM

    Copy to Clipboard Toggle word wrap
    # kinit -C <useralias>
    Password for <user>@IDM.EXAMPLE.COM:

49.2.

  • Copy to Clipboard Toggle word wrap
    # ipa user-remove-principal <user> <useralias>
    --------------------------------
    Removed aliases from user "user"
    --------------------------------
      User login: user
      Principal alias: user@IDM.EXAMPLE.COM

    Copy to Clipboard Toggle word wrap
    # ipa user-show <user>
      User login: user
      ...
      Principal name: user@IDM.EXAMPLE.COM
      ...
    
    # ipa user-remove-principal user user
    ipa: ERROR: invalid 'krbprincipalname': at least one value equal to the canonical principal name must be present

49.3.

  • Copy to Clipboard Toggle word wrap
    # ipa user-add-principal <user> <user\\@example.com>
    --------------------------------
    Added new aliases to user "user"
    --------------------------------
             User login: user
        Principal alias: user@IDM.EXAMPLE.COM, user\@example.com@IDM.EXAMPLE.COM

    注記

    Copy to Clipboard Toggle word wrap
    ipa: ERROR: The realm for the principal does not match the realm for this IPA server.

    Copy to Clipboard Toggle word wrap
    # kinit -E <user@example.com>
    Password for user\@example.com@IDM.EXAMPLE.COM:

49.4.

  • Copy to Clipboard Toggle word wrap
    # ipa user-remove-principal <user> <user\\@example.com>
    --------------------------------
    Removed aliases from user "user"
    --------------------------------
      User login: user
      Principal alias: user@IDM.EXAMPLE.COM

    注記

    Copy to Clipboard Toggle word wrap
    ipa: ERROR: The realm for the principal does not match the realm for this IPA server

第50章

50.1.

50.2.

50.3.

  • Copy to Clipboard Toggle word wrap
    $ ipa service-mod service/ipa.example.com@EXAMPLE.COM --ok-as-delegate=1
  • Copy to Clipboard Toggle word wrap
    $ ipa service-mod service/ipa.example.com@EXAMPLE.COM --ok-as-delegate=0

50.4.

  1. Copy to Clipboard Toggle word wrap
    $ kvno demo/ipa.example.com@EXAMPLE.COM
  2. Copy to Clipboard Toggle word wrap
    $ klist -f
    Ticket cache: KEYRING:persistent:0:0
    Default principal: admin@EXAMPLE.COM
    
    Valid starting		Expires			Service principal
    02/19/2024 09:59:02	02/20/2024 08:21:33	demo/ipa/example.com@EXAMPLE.COM
        Flags: FATO

第51章

51.1.

51.2.

  • Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa config-mod --enable-sid --add-sids

  • Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa user-show admin --all | grep ipantsecurityidentifier
      ipantsecurityidentifier: S-1-5-21-2633809701-976279387-419745629-500

第52章

52.1.

52.2.

52.3.

[1]

52.4.

図52.1

52.4.1.

  1. Copy to Clipboard Toggle word wrap
    [root@client ~]# ipa service-add testservice/client.example.com
    -------------------------------------------------------------
    Modified service "testservice/client.example.com@EXAMPLE.COM"
    -------------------------------------------------------------
      Principal name: testservice/client.example.com@EXAMPLE.COM
      Principal alias: testservice/client.example.com@EXAMPLE.COM
      Managed by: client.example.com
  2. Copy to Clipboard Toggle word wrap
    [root@client ~]# ipa-getkeytab -k /etc/testservice.keytab -p testservice/client.example.com
    Keytab successfully retrieved and stored in: /etc/testservice.keytab

  1. Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa service-show testservice/client.example.com
      Principal name: testservice/client.example.com@EXAMPLE.COM
      Principal alias: testservice/client.example.com@EXAMPLE.COM
      Keytab: True
      Managed by: client.example.com
  2. Copy to Clipboard Toggle word wrap
    [root@server etc]# klist -ekt /etc/testservice.keytab
    Keytab name: FILE:/etc/testservice.keytab
    KVNO Timestamp           Principal
    ---- ------------------- ------------------------------------------------------
       2 04/01/2020 17:52:55 testservice/client.example.com@EXAMPLE.COM (aes256-cts-hmac-sha1-96)
       2 04/01/2020 17:52:55 testservice/client.example.com@EXAMPLE.COM (aes128-cts-hmac-sha1-96)
       2 04/01/2020 17:52:55 testservice/client.example.com@EXAMPLE.COM (camellia128-cts-cmac)
       2 04/01/2020 17:52:55 testservice/client.example.com@EXAMPLE.COM (camellia256-cts-cmac)

52.4.2.

警告

Copy to Clipboard Toggle word wrap
host/server.example.com@EXAMPLE.COM
HTTP/server.example.com@EXAMPLE.COM
ldap/server.example.com@EXAMPLE.COM
DNS/server.example.com@EXAMPLE.COM
cifs/server.example.com@EXAMPLE.COM

  •   

    Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa service-mod testservice/client.example.com@EXAMPLE.COM --auth-ind otp --auth-ind pkinit
    -------------------------------------------------------------
    Modified service "testservice/client.example.com@EXAMPLE.COM"
    -------------------------------------------------------------
      Principal name: testservice/client.example.com@EXAMPLE.COM
      Principal alias: testservice/client.example.com@EXAMPLE.COM
      Authentication Indicators: otp, pkinit
      Managed by: client.example.com
  • Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa service-mod testservice/client.example.com@EXAMPLE.COM --auth-ind ''
    ------------------------------------------------------
    Modified service "testservice/client.example.com@EXAMPLE.COM"
    ------------------------------------------------------
      Principal name: testservice/client.example.com@EXAMPLE.COM
      Principal alias: testservice/client.example.com@EXAMPLE.COM
      Managed by: client.example.com

  • Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa service-show testservice/client.example.com
      Principal name: testservice/client.example.com@EXAMPLE.COM
      Principal alias: testservice/client.example.com@EXAMPLE.COM
      Authentication Indicators: otp, pkinit
      Keytab: True
      Managed by: client.example.com

52.4.3.

52.4.4.

  • Copy to Clipboard Toggle word wrap
    [root@server ~]# kvno -S testservice client.example.com
    testservice/client.example.com@EXAMPLE.COM: kvno = 1
注記

Copy to Clipboard Toggle word wrap
[root@server ~]# kdestroy

  • Copy to Clipboard Toggle word wrap
    [root@server etc]# klist_
    Ticket cache: KCM:1000
    Default principal: admin@EXAMPLE.COM
    
    Valid starting       Expires              Service principal
    04/01/2020 12:52:42  04/02/2020 12:52:39  krbtgt/EXAMPLE.COM@EXAMPLE.COM
    04/01/2020 12:54:07 04/02/2020 12:52:39 testservice/client.example.com@EXAMPLE.COM

52.4.5.

52.5.

  1. Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa krbtpolicy-mod --maxlife=$((8*60*60)) --maxrenew=$((24*60*60))
      Max life: 28800
      Max renew: 86400

  2. Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa krbtpolicy-reset
      Max life: 86400
      Max renew: 604800

  • Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa krbtpolicy-show
      Max life: 28800
      Max renew: 86640

52.6.

  • Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa krbtpolicy-mod --otp-maxlife=604800 --otp-maxrenew=604800 --pkinit-maxlife=172800 --pkinit-maxrenew=172800

  • Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa krbtpolicy-show
      Max life: 86400
      OTP max life: 604800
      PKINIT max life: 172800
      Max renew: 604800
      OTP max renew: 604800
      PKINIT max renew: 172800

52.7.

  1. Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa krbtpolicy-mod admin --maxlife=172800 --maxrenew=1209600
      Max life: 172800
      Max renew: 1209600
  2. Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa krbtpolicy-reset admin

  • Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa krbtpolicy-show admin
      Max life: 172800
      Max renew: 1209600

52.8.

  1. Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa krbtpolicy-mod admin --otp-maxrenew=$((2*24*60*60))
      OTP max renew: 172800
  2. Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa krbtpolicy-reset username

  • Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa krbtpolicy-show admin
      Max life: 28800
      Max renew: 86640

52.9.

表52.1
   

第53章

53.1.

表53.1
  

53.2.

  • Copy to Clipboard Toggle word wrap
    $ ipa pkinit-status
      Server name: server1.example.com
      PKINIT status: enabled
      [...output truncated...]
      Server name: server2.example.com
      PKINIT status: disabled
      [...output truncated...]

  • Copy to Clipboard Toggle word wrap
    $ ipa config-show
      Maximum username length: 32
      Home directory base: /home
      Default shell: /bin/sh
      Default users group: ipausers
      [...output truncated...]
      IPA masters capable of PKINIT: server1.example.com
      [...output truncated...]

53.3.

  1. Copy to Clipboard Toggle word wrap
    # kinit admin
    
    Password for admin@IDM.EXAMPLE.COM:
    # ipa pkinit-status --server=server.idm.example.com
    1 server matched
    ----------------
    Server name: server.idm.example.com
    PKINIT status:enabled
    ----------------------------
    Number of entries returned 1
    ----------------------------

    Copy to Clipboard Toggle word wrap
    # ipa pkinit-status --server server.idm.example.com
    -----------------
    0 servers matched
    -----------------
    ----------------------------
    Number of entries returned 0
    ----------------------------

    1. Copy to Clipboard Toggle word wrap
      # ipa-cacert-manage install -t CT,C,C ca.pem
    2. Copy to Clipboard Toggle word wrap
      # ipa-certupdate
    3. Copy to Clipboard Toggle word wrap
      # ipa-cacert-manage list
      CN=CA,O=Example Organization
      The ipa-cacert-manage command was successful
      • Copy to Clipboard Toggle word wrap
        # ipa-server-certinstall --kdc kdc.pem kdc.key
        
        # systemctl restart krb5kdc.service
    4. Copy to Clipboard Toggle word wrap
      # ipa pkinit-status
        Server name: server1.example.com
        PKINIT status: enabled
        [...output truncated...]
        Server name: server2.example.com
        PKINIT status: disabled
        [...output truncated...]
  2. Copy to Clipboard Toggle word wrap
    # ipa-pkinit-manage enable
      Configuring Kerberos KDC (krb5kdc)
      [1/1]: installing X509 Certificate for PKINIT
      Done configuring Kerberos KDC (krb5kdc).
      The ipa-pkinit-manage command was successful

53.4.

第54章

54.1.

Copy to Clipboard Toggle word wrap
[root@idmserver ~]# klist -ekt /etc/krb5.keytab
Keytab name: FILE:/etc/krb5.keytab
KVNO Timestamp           Principal
---- ------------------- ------------------------------------------------------
   2 02/24/2022 20:28:09 host/idmserver.idm.example.com@IDM.EXAMPLE.COM (aes256-cts-hmac-sha1-96)
   2 02/24/2022 20:28:09 host/idmserver.idm.example.com@IDM.EXAMPLE.COM (aes128-cts-hmac-sha1-96)
   2 02/24/2022 20:28:09 host/idmserver.idm.example.com@IDM.EXAMPLE.COM (camellia128-cts-cmac)
   2 02/24/2022 20:28:09 host/idmserver.idm.example.com@IDM.EXAMPLE.COM (camellia256-cts-cmac)

54.2.

  1. Copy to Clipboard Toggle word wrap
    [root@server1 ~]# klist -ekt /etc/named.keytab
    Keytab name: FILE:/etc/named.keytab
    KVNO Timestamp           Principal
    ---- ------------------- ------------------------------------------------------
       2 11/26/2021 13:51:11 DNS/server1.idm.example.com@EXAMPLE.COM (aes256-cts-hmac-sha1-96)
       2 11/26/2021 13:51:11 DNS/server1.idm.example.com@EXAMPLE.COM (aes128-cts-hmac-sha1-96)
       2 11/26/2021 13:51:11 DNS/server1.idm.example.com@EXAMPLE.COM (camellia128-cts-cmac)
       2 11/26/2021 13:51:11 DNS/server1.idm.example.com@EXAMPLE.COM (camellia256-cts-cmac)
  2. Copy to Clipboard Toggle word wrap
    [root@server1 ~]# kvno DNS/server1.idm.example.com@EXAMPLE.COM
    DNS/server1.idm.example.com@EXAMPLE.COM: kvno = 3
  3. Copy to Clipboard Toggle word wrap
    [root@server1 ~]# kinit admin
    Password for admin@IDM.EXAMPLE.COM:
  4. Copy to Clipboard Toggle word wrap
    [root@server1 ~]# ipa-getkeytab -s server1.idm.example.com -p DNS/server1.idm.example.com -k /etc/named.keytab

  1. Copy to Clipboard Toggle word wrap
    [root@server1 ~]# klist -ekt /etc/named.keytab
    Keytab name: FILE:/etc/named.keytab
    KVNO Timestamp           Principal
    ---- ------------------- ------------------------------------------------------
       4 08/17/2022 14:42:11 DNS/server1.idm.example.com@EXAMPLE.COM (aes256-cts-hmac-sha1-96)
       4 08/17/2022 14:42:11 DNS/server1.idm.example.com@EXAMPLE.COM (aes128-cts-hmac-sha1-96)
       4 08/17/2022 14:42:11 DNS/server1.idm.example.com@EXAMPLE.COM (camellia128-cts-cmac)
       4 08/17/2022 14:42:11 DNS/server1.idm.example.com@EXAMPLE.COM (camellia256-cts-cmac)
  2. Copy to Clipboard Toggle word wrap
    [root@server1 ~]# kvno DNS/server1.idm.example.com@EXAMPLE.COM
    DNS/server1.idm.example.com@EXAMPLE.COM: kvno = 4

54.3.

表54.1
   

54.4.

  • Copy to Clipboard Toggle word wrap
    # kadmin.local getprinc K/M | grep -E '^Key:'
    Key: vno 1, aes256-cts-hmac-sha1-96

第55章

55.1.

  1. Copy to Clipboard Toggle word wrap
    [realms]
    EXAMPLE.COM = {
      kdc = https://kdc.example.com/KdcProxy
      admin_server = https://kdc.example.com/KdcProxy
      kpasswd_server = https://kdc.example.com/KdcProxy
      default_domain = example.com
    }

  2. Copy to Clipboard Toggle word wrap
    ~]# systemctl restart sssd

55.2.

Copy to Clipboard Toggle word wrap
$ ls -l /etc/httpd/conf.d/ipa-kdc-proxy.conf
lrwxrwxrwx. 1 root root 36 Jun 21  2020 /etc/httpd/conf.d/ipa-kdc-proxy.conf -> /etc/ipa/kdcproxy/ipa-kdc-proxy.conf

55.3.

  1. Copy to Clipboard Toggle word wrap
    # ipa-ldap-updater /usr/share/ipa/kdcproxy-disable.uldif
    Update complete
    The ipa-ldap-updater command was successful
  2. Copy to Clipboard Toggle word wrap
    # systemctl restart httpd.service

  • Copy to Clipboard Toggle word wrap
    $ ls -l /etc/httpd/conf.d/ipa-kdc-proxy.conf
    ls: cannot access '/etc/httpd/conf.d/ipa-kdc-proxy.conf': No such file or directory

55.4.

  1. Copy to Clipboard Toggle word wrap
    # ipa-ldap-updater /usr/share/ipa/kdcproxy-enable.uldif
    Update complete
    The ipa-ldap-updater command was successful
  2. Copy to Clipboard Toggle word wrap
    # systemctl restart httpd.service

  • Copy to Clipboard Toggle word wrap
    $ ls -l /etc/httpd/conf.d/ipa-kdc-proxy.conf
    lrwxrwxrwx. 1 root root 36 Jun 21  2020 /etc/httpd/conf.d/ipa-kdc-proxy.conf -> /etc/ipa/kdcproxy/ipa-kdc-proxy.conf

55.5.

  1. Copy to Clipboard Toggle word wrap
    [global]
    use_dns = false
  2. Copy to Clipboard Toggle word wrap
    [AD.EXAMPLE.COM]
    kerberos = kerberos+tcp://1.2.3.4:88 kerberos+tcp://5.6.7.8:88
    kpasswd = kpasswd+tcp://1.2.3.4:464 kpasswd+tcp://5.6.7.8:464
    重要

  3. Copy to Clipboard Toggle word wrap
    # ipactl restart

55.6.

  1. Copy to Clipboard Toggle word wrap
    [global]
    configs = mit
    use_dns = true

  2. Copy to Clipboard Toggle word wrap
    [realms]
    AD.EXAMPLE.COM = {
        kdc = ad-server.ad.example.com
        kpasswd_server = ad-server.ad.example.com
    }
  3. Copy to Clipboard Toggle word wrap
    # ipactl restart

第56章

56.1.

56.2.

  1. Copy to Clipboard Toggle word wrap
    [root@idmclient ~]# kinit admin
  2. Copy to Clipboard Toggle word wrap
    [root@idmclient ~]# ipa sudocmd-add /usr/sbin/reboot
    -------------------------------------
    Added Sudo Command "/usr/sbin/reboot"
    -------------------------------------
      Sudo Command: /usr/sbin/reboot
  3. Copy to Clipboard Toggle word wrap
    [root@idmclient ~]# ipa sudorule-add idm_user_reboot
    ---------------------------------
    Added Sudo Rule "idm_user_reboot"
    ---------------------------------
      Rule name: idm_user_reboot
      Enabled: TRUE
  4. Copy to Clipboard Toggle word wrap
    [root@idmclient ~]# ipa sudorule-add-allow-command idm_user_reboot --sudocmds '/usr/sbin/reboot'
      Rule name: idm_user_reboot
      Enabled: TRUE
      Sudo Allow Commands: /usr/sbin/reboot
    -------------------------
    Number of members added 1
    -------------------------
  5. Copy to Clipboard Toggle word wrap
    [root@idmclient ~]# ipa sudorule-add-host idm_user_reboot --hosts idmclient.idm.example.com
    Rule name: idm_user_reboot
    Enabled: TRUE
    Hosts: idmclient.idm.example.com
    Sudo Allow Commands: /usr/sbin/reboot
    -------------------------
    Number of members added 1
    -------------------------
  6. Copy to Clipboard Toggle word wrap
    [root@idmclient ~]# ipa sudorule-add-user idm_user_reboot --users idm_user
    Rule name: idm_user_reboot
    Enabled: TRUE
    Users: idm_user
    Hosts: idmclient.idm.example.com
    Sudo Allow Commands: /usr/sbin/reboot
    -------------------------
    Number of members added 1
    -------------------------
    1. Copy to Clipboard Toggle word wrap
      [root@idmclient ~]# ipa sudorule-mod idm_user_reboot --setattr sudonotbefore=20251231123400Z
    2. Copy to Clipboard Toggle word wrap
      [root@idmclient ~]# ipa sudorule-mod idm_user_reboot --setattr sudonotafter=20261231123400Z
注記

  1. Copy to Clipboard Toggle word wrap
    [idm_user@idmclient ~]$ sudo -l
    Matching Defaults entries for idm_user on idmclient:
        !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin,
        env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
        env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
        env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
        env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
        env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY KRB5CCNAME",
        secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
    
    User idm_user may run the following commands on idmclient:
        (root) /usr/sbin/reboot
  2. Copy to Clipboard Toggle word wrap
    [idm_user@idmclient ~]$ sudo /usr/sbin/reboot
    [sudo] password for idm_user:

56.3.

重要

    1. Copy to Clipboard Toggle word wrap
      [root@ipaserver ~]# ipa group-add --desc='AD users external map' ad_users_external --external
      -------------------------------
      Added group "ad_users_external"
      -------------------------------
        Group name: ad_users_external
        Description: AD users external map
      注記

    2. Copy to Clipboard Toggle word wrap
      [root@ipaserver ~]# ipa group-add --desc='AD users' ad_users
      ----------------------
      Added group "ad_users"
      ----------------------
        Group name: ad_users
        Description: AD users
        GID: 129600004
    3. Copy to Clipboard Toggle word wrap
      [root@ipaserver ~]# ipa group-add-member ad_users_external --external "administrator@ad-domain.com"
       [member user]:
       [member group]:
        Group name: ad_users_external
        Description: AD users external map
        External member: S-1-5-21-3655990580-1375374850-1633065477-513
      -------------------------
      Number of members added 1
      -------------------------

    4. Copy to Clipboard Toggle word wrap
      [root@ipaserver ~]# ipa group-add-member ad_users --groups ad_users_external
        Group name: ad_users
        Description: AD users
        GID: 129600004
        Member groups: ad_users_external
      -------------------------
      Number of members added 1
      -------------------------
    1. Copy to Clipboard Toggle word wrap
      [root@idmclient ~]# ipa sudocmd-add /usr/sbin/reboot
      -------------------------------------
      Added Sudo Command "/usr/sbin/reboot"
      -------------------------------------
        Sudo Command: /usr/sbin/reboot
    2. Copy to Clipboard Toggle word wrap
      [root@idmclient ~]# ipa sudorule-add ad_users_reboot
      ---------------------------------
      Added Sudo Rule "ad_users_reboot"
      ---------------------------------
        Rule name: ad_users_reboot
        Enabled: True
    3. Copy to Clipboard Toggle word wrap
      [root@idmclient ~]# ipa sudorule-add-allow-command ad_users_reboot --sudocmds '/usr/sbin/reboot'
        Rule name: ad_users_reboot
        Enabled: True
        Sudo Allow Commands: /usr/sbin/reboot
      -------------------------
      Number of members added 1
      -------------------------
    4. Copy to Clipboard Toggle word wrap
      [root@idmclient ~]# ipa sudorule-add-host ad_users_reboot --hosts idmclient.idm.example.com
      Rule name: ad_users_reboot
      Enabled: True
      Hosts: idmclient.idm.example.com
      Sudo Allow Commands: /usr/sbin/reboot
      -------------------------
      Number of members added 1
      -------------------------
    5. Copy to Clipboard Toggle word wrap
      [root@idmclient ~]# ipa sudorule-add-user ad_users_reboot --groups ad_users
      Rule name: ad_users_reboot
      Enabled: TRUE
      User Groups: ad_users
      Hosts: idmclient.idm.example.com
      Sudo Allow Commands: /usr/sbin/reboot
      -------------------------
      Number of members added 1
      -------------------------
注記

  1. Copy to Clipboard Toggle word wrap
    $ ssh administrator@ad-domain.com@ipaclient
    Password:
  2. Copy to Clipboard Toggle word wrap
    [administrator@ad-domain.com@idmclient ~]$ sudo -l
    Matching Defaults entries for administrator@ad-domain.com on idmclient:
        !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin,
        env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
        env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
        env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
        env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
        env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY KRB5CCNAME",
        secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
    
    User administrator@ad-domain.com may run the following commands on idmclient:
        (root) /usr/sbin/reboot
  3. Copy to Clipboard Toggle word wrap
    [administrator@ad-domain.com@idmclient ~]$ sudo /usr/sbin/reboot
    [sudo] password for administrator@ad-domain.com:

56.4.

注記

  1. Copy to Clipboard Toggle word wrap
    $ sudo /usr/sbin/reboot
    [sudo] password for idm_user:

56.5.

  1. Copy to Clipboard Toggle word wrap
    [root@idmclient ~]# kinit admin
  2. Copy to Clipboard Toggle word wrap
    [root@idmclient ~]# ipa sudocmd-add /opt/third-party-app/bin/report
    ----------------------------------------------------
    Added Sudo Command "/opt/third-party-app/bin/report"
    ----------------------------------------------------
      Sudo Command: /opt/third-party-app/bin/report
  3. Copy to Clipboard Toggle word wrap
    [root@idmclient ~]# ipa sudorule-add run_third-party-app_report
    --------------------------------------------
    Added Sudo Rule "run_third-party-app_report"
    --------------------------------------------
      Rule name: run_third-party-app_report
      Enabled: TRUE
  4. Copy to Clipboard Toggle word wrap
    [root@idmclient ~]# ipa sudorule-add-runasuser run_third-party-app_report --users=thirdpartyapp
      Rule name: run_third-party-app_report
      Enabled: TRUE
      RunAs External User: thirdpartyapp
    -------------------------
    Number of members added 1
    -------------------------

  5. Copy to Clipboard Toggle word wrap
    [root@idmclient ~]# ipa sudorule-add-allow-command run_third-party-app_report --sudocmds '/opt/third-party-app/bin/report'
    Rule name: run_third-party-app_report
    Enabled: TRUE
    Sudo Allow Commands: /opt/third-party-app/bin/report
    RunAs External User: thirdpartyapp
    -------------------------
    Number of members added 1
    -------------------------
  6. Copy to Clipboard Toggle word wrap
    [root@idmclient ~]# ipa sudorule-add-host run_third-party-app_report --hosts idmclient.idm.example.com
    Rule name: run_third-party-app_report
    Enabled: TRUE
    Hosts: idmclient.idm.example.com
    Sudo Allow Commands: /opt/third-party-app/bin/report
    RunAs External User: thirdpartyapp
    -------------------------
    Number of members added 1
    -------------------------
  7. Copy to Clipboard Toggle word wrap
    [root@idmclient ~]# ipa sudorule-add-user run_third-party-app_report --users idm_user
    Rule name: run_third-party-app_report
    Enabled: TRUE
    Users: idm_user
    Hosts: idmclient.idm.example.com
    Sudo Allow Commands: /opt/third-party-app/bin/report
    RunAs External User: thirdpartyapp
    -------------------------
    Number of members added 1
注記

    1. Copy to Clipboard Toggle word wrap
      [idm_user@idmclient ~]$ sudo -l
      Matching Defaults entries for idm_user@idm.example.com on idmclient:
          !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin,
          env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
          env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
          env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
          env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
          env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY KRB5CCNAME",
          secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
      
      User idm_user@idm.example.com may run the following commands on idmclient:
          (thirdpartyapp) /opt/third-party-app/bin/report
    2. Copy to Clipboard Toggle word wrap
      [idm_user@idmclient ~]$ sudo -u thirdpartyapp /opt/third-party-app/bin/report
      [sudo] password for idm_user@idm.example.com:
      Executing report...
      Report successful.

56.6.

注記

    1. Copy to Clipboard Toggle word wrap
      [idm_user@idmclient ~]$ sudo -l
      Matching Defaults entries for idm_user@idm.example.com on idmclient:
          !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin,
          env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
          env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
          env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
          env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
          env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY KRB5CCNAME",
          secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
      
      User idm_user@idm.example.com may run the following commands on idmclient:
          (thirdpartyapp) /opt/third-party-app/bin/report
    2. Copy to Clipboard Toggle word wrap
      [idm_user@idmclient ~]$ sudo -u thirdpartyapp /opt/third-party-app/bin/report
      [sudo] password for idm_user@idm.example.com:
      Executing report...
      Report successful.

56.7.

  1. Copy to Clipboard Toggle word wrap
    [domain/<domain_name>]
    pam_gssapi_services = sudo, sudo-i
  2. Copy to Clipboard Toggle word wrap
    [root@idmclient ~]# systemctl restart sssd
    1. Copy to Clipboard Toggle word wrap
      # authselect current
      Profile ID: sssd
    2. Copy to Clipboard Toggle word wrap
      # authselect enable-feature with-gssapi
    3. Copy to Clipboard Toggle word wrap
      # authselect select sssd with-gssapi
    1. Copy to Clipboard Toggle word wrap
      #%PAM-1.0
      auth sufficient pam_sss_gss.so
      auth       include      system-auth
      account    include      system-auth
      password   include      system-auth
      session    include      system-auth

  1. Copy to Clipboard Toggle word wrap
    [root@idm-client ~]# ssh -l idm_user@idm.example.com localhost
    idm_user@idm.example.com's password:
  2. Copy to Clipboard Toggle word wrap
    [idmuser@idmclient ~]$ klist
    Ticket cache: KCM:1366201107
    Default principal: idm_user@IDM.EXAMPLE.COM
    
    Valid starting       Expires              Service principal
    01/08/2021 09:11:48  01/08/2021 19:11:48  krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM
    	renew until 01/15/2021 09:11:44
  3. Copy to Clipboard Toggle word wrap
    [idm_user@idmclient ~]$ kdestroy -A
    
    [idm_user@idmclient ~]$ kinit idm_user@IDM.EXAMPLE.COM
    Password for idm_user@idm.example.com:
  4. Copy to Clipboard Toggle word wrap
    [idm_user@idmclient ~]$ sudo /usr/sbin/reboot

56.8.

注記

  1. Copy to Clipboard Toggle word wrap
    [domain/<idm_domain_name>]
    pam_gssapi_services = sudo, sudo-i
    pam_gssapi_indicators_map = sudo:pkinit, sudo-i:pkinit
  2. Copy to Clipboard Toggle word wrap
    [root@idmclient ~]# systemctl restart sssd
    1. Copy to Clipboard Toggle word wrap
      # authselect current
      Profile ID: sssd
    2. Copy to Clipboard Toggle word wrap
      # authselect select sssd
    3. Copy to Clipboard Toggle word wrap
      # authselect enable-feature with-gssapi
    4. Copy to Clipboard Toggle word wrap
      # authselect with-smartcard-required
    1. Copy to Clipboard Toggle word wrap
      #%PAM-1.0
      auth sufficient pam_sss_gss.so
      auth       include      system-auth
      account    include      system-auth
      password   include      system-auth
      session    include      system-auth
    2. Copy to Clipboard Toggle word wrap
      #%PAM-1.0
      auth sufficient pam_sss_gss.so
      auth       include      sudo
      account    include      sudo
      password   include      sudo
      session    optional     pam_keyinit.so force revoke
      session    include      sudo

  1. Copy to Clipboard Toggle word wrap
    [root@idmclient ~]# ssh -l idm_user@idm.example.com localhost
    PIN for smart_card
  2. Copy to Clipboard Toggle word wrap
    [idm_user@idmclient ~]$ klist
    Ticket cache: KEYRING:persistent:1358900015:krb_cache_TObtNMd
    Default principal: idm_user@IDM.EXAMPLE.COM
    
    Valid starting       Expires              Service principal
    02/15/2021 16:29:48  02/16/2021 02:29:48  krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM
    	renew until 02/22/2021 16:29:44
  3. Copy to Clipboard Toggle word wrap
    [idm_user@idmclient ~]$ sudo -l
    Matching Defaults entries for idmuser on idmclient:
        !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin,
        env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
        env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
        env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
        env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
        env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY KRB5CCNAME",
        secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
    
    User idm_user may run the following commands on idmclient:
        (root) /usr/sbin/reboot
  4. Copy to Clipboard Toggle word wrap
    [idm_user@idmclient ~]$ sudo /usr/sbin/reboot

56.9.

Copy to Clipboard Toggle word wrap
[pam]
pam_gssapi_services = sudo, sudo-i
pam_gssapi_indicators_map = sudo:otp
pam_gssapi_check_upn = true

Copy to Clipboard Toggle word wrap
[domain/idm.example.com]
pam_gssapi_services = sudo, sudo-i
pam_gssapi_indicators_map = sudo:pkinit, sudo-i:otp
pam_gssapi_check_upn = true
...

[domain/ad.example.com]
pam_gssapi_services = sudo
pam_gssapi_check_upn = false
...

56.10.

  • Copy to Clipboard Toggle word wrap
    Server not found in Kerberos database

    Copy to Clipboard Toggle word wrap
    [idm-user@idm-client ~]$ cat /etc/krb5.conf
    ...
    
    [domain_realm]
     .example.com = EXAMPLE.COM
     example.com = EXAMPLE.COM
     server.example.com = EXAMPLE.COM
  • Copy to Clipboard Toggle word wrap
    No Kerberos credentials available

    Copy to Clipboard Toggle word wrap
    [idm-user@idm-client ~]$ kinit idm-user@IDM.EXAMPLE.COM
    Password for idm-user@idm.example.com:
  • Copy to Clipboard Toggle word wrap
    User with UPN [<UPN>] was not found.
    
    UPN [<UPN>] does not match target user [<username>].

    Copy to Clipboard Toggle word wrap
    [idm-user@idm-client ~]$ cat /etc/sssd/sssd.conf
    ...
    
    pam_gssapi_check_upn = false
    • Copy to Clipboard Toggle word wrap
      [root@idm-client ~]# cat /etc/pam.d/sudo
      #%PAM-1.0
      auth       sufficient   pam_sss_gss.so   debug
      auth       include      system-auth
      account    include      system-auth
      password   include      system-auth
      session    include      system-auth
      Copy to Clipboard Toggle word wrap
      [root@idm-client ~]# cat /etc/pam.d/sudo-i
      #%PAM-1.0
      auth       sufficient   pam_sss_gss.so   debug
      auth       include      sudo
      account    include      sudo
      password   include      sudo
      session    optional     pam_keyinit.so force revoke
      session    include      sudo
    • Copy to Clipboard Toggle word wrap
      [idm-user@idm-client ~]$ sudo ls -l /etc/sssd/sssd.conf
      pam_sss_gss: Initializing GSSAPI authentication with SSSD
      pam_sss_gss: Switching euid from 0 to 1366201107
      pam_sss_gss: Trying to establish security context
      pam_sss_gss: SSSD User name: idm-user@idm.example.com
      pam_sss_gss: User domain: idm.example.com
      pam_sss_gss: User principal:
      pam_sss_gss: Target name: host@idm.example.com
      pam_sss_gss: Using ccache: KCM:
      pam_sss_gss: Acquiring credentials, principal name will be derived
      pam_sss_gss: Unable to read credentials from [KCM:] [maj:0xd0000, min:0x96c73ac3]
      pam_sss_gss: GSSAPI: Unspecified GSS failure.  Minor code may provide more information
      pam_sss_gss: GSSAPI: No credentials cache found
      pam_sss_gss: Switching euid from 1366200907 to 0
      pam_sss_gss: System error [5]: Input/output error

56.11.

  1. Copy to Clipboard Toggle word wrap
    [ipaservers]
    server.idm.example.com
    1. Copy to Clipboard Toggle word wrap
      ---
      - 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
    2. Copy to Clipboard Toggle word wrap
      $ 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
    1. Copy to Clipboard Toggle word wrap
      ---
      - 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
    2. Copy to Clipboard Toggle word wrap
      $ ansible-playbook -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-sudorule-for-idmuser-on-idmclient-is-present.yml

  1. Copy to Clipboard Toggle word wrap
    $ sudo /usr/sbin/reboot
    [sudo] password for idm_user:

第57章

57.1.

注記

57.1.1.

注記

  1. 注記

57.1.2.

重要

  1. 重要

57.1.3.

注記

57.2.

注記

57.2.1.

注記

  1. Copy to Clipboard Toggle word wrap
    $ ipa hbacrule-add
    Rule name: rule_name
    ---------------------------
    Added HBAC rule "rule_name"
    ---------------------------
      Rule name: rule_name
      Enabled: TRUE
  2. Copy to Clipboard Toggle word wrap
    $ ipa hbacrule-add-user --users=sysadmin
    Rule name: rule_name
      Rule name: rule_name
      Enabled: True
      Users: sysadmin
    -------------------------
    Number of members added 1
    -------------------------
    注記

  3. Copy to Clipboard Toggle word wrap
    $ ipa hbacrule-mod rule_name --hostcat=all
    ------------------------------
    Modified HBAC rule "rule_name"
    ------------------------------
      Rule name: rule_name
      Host category: all
      Enabled: TRUE
      Users: sysadmin
    注記

  4. Copy to Clipboard Toggle word wrap
    $ ipa hbacrule-mod rule_name --servicecat=all
    ------------------------------
    Modified HBAC rule "rule_name"
    ------------------------------
      Rule name: rule_name
      Host category: all
      Service category: all
      Enabled: True
      Users: sysadmin
注記

57.2.2.

重要

    • Copy to Clipboard Toggle word wrap
      $ ipa hbactest --user=sysadmin --host=server.idm.example.com --service=sudo --rules=rule_name
      ---------------------
      Access granted: True
      ---------------------
        Matched rules: rule_name
      1. Copy to Clipboard Toggle word wrap
        $ ipa hbacrule-add --hostcat=all rule2_name
        $ ipa hbacrule-add-user --users sysadmin rule2_name
        $ ipa hbacrule-add-service --hbacsvcs=sshd rule2_name
          Rule name: rule2_name
          Host category: all
          Enabled: True
          Users: admin
          HBAC Services: sshd
        -------------------------
        Number of members added 1
        -------------------------
      2. Copy to Clipboard Toggle word wrap
        $ ipa hbactest --user=sysadmin --host=server.idm.example.com --service=sudo --rules=rule_name --rules=rule2_name
        --------------------
        Access granted: True
        --------------------
          Matched rules: rule_name
          Not matched rules: rule2_name

57.2.3.

注記

  • Copy to Clipboard Toggle word wrap
    $ ipa hbacrule-disable allow_all
    ------------------------------
    Disabled HBAC rule "allow_all"
    ------------------------------

57.3.

注記

57.3.1.

57.3.2.

  • Copy to Clipboard Toggle word wrap
    $ ipa hbacsvc-add tftp
    -------------------------
    Added HBAC service "tftp"
    -------------------------
      Service name: tftp

57.4.

57.4.1.

57.4.2.

  1. Copy to Clipboard Toggle word wrap
    $ ipa hbacsvcgroup-add
    Service group name: login
    --------------------------------
    Added HBAC service group "login"
    --------------------------------
      Service group name: login
  2. Copy to Clipboard Toggle word wrap
    $ ipa hbacsvcgroup-add-member
    Service group name: login
    [member HBAC service]: sshd
      Service group name: login
      Member HBAC service: sshd
    -------------------------
    Number of members added 1
    -------------------------

第58章

58.1.

58.2.

  1. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  2. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to handle hbacrules
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      # Ensure idm_user can access client.idm.example.com via the sshd service
      - ipahbacrule:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: login
          user: idm_user
          host: client.idm.example.com
          hbacsvc:
          - sshd
          state: present
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-new-hbacrule-present.yml

第59章

59.1.

図59.1

59.2.

図59.2

59.3.

図59.3

59.4.

図59.4

図59.5

59.5.

  • Copy to Clipboard Toggle word wrap
    $ ipa topologysuffix-find
    ---------------------------
    2 topology suffixes matched
    ---------------------------
      Suffix name: ca
      Managed LDAP suffix DN: o=ipaca
    
      Suffix name: domain
      Managed LDAP suffix DN: dc=example,dc=com
    ----------------------------
    Number of entries returned 2
    ----------------------------

59.6.

  1. Copy to Clipboard Toggle word wrap
    $ ipa topologysegment-find
    Suffix name: domain
    -----------------
    1 segment matched
    -----------------
      Segment name: server1.example.com-to-server2.example.com
      Left node: server1.example.com
      Right node: server2.example.com
      Connectivity: both
    ----------------------------
    Number of entries returned 1
    ----------------------------

  2. Copy to Clipboard Toggle word wrap
    $ ipa topologysegment-show
    Suffix name: domain
    Segment name: server1.example.com-to-server2.example.com
      Segment name: server1.example.com-to-server2.example.com
      Left node: server1.example.com
      Right node: server2.example.com
      Connectivity: both

59.7.

  1. 図59.6

  2. 図59.7

図59.8

59.8.

  1. 図59.9

  2. 図59.10

59.9.

    • Copy to Clipboard Toggle word wrap
      $ ipa topologysegment-add
      Suffix name: domain
      Left node: server1.example.com
      Right node: server2.example.com
      Segment name [server1.example.com-to-server2.example.com]: new_segment
      ---------------------------
      Added segment "new_segment"
      ---------------------------
        Segment name: new_segment
        Left node: server1.example.com
        Right node: server2.example.com
        Connectivity: both

  • Copy to Clipboard Toggle word wrap
    $ ipa topologysegment-show
    Suffix name: domain
    Segment name: new_segment
      Segment name: new_segment
      Left node: server1.example.com
      Right node: server2.example.com
      Connectivity: both

59.10.

  1. Copy to Clipboard Toggle word wrap
    $ ipa topologysegment-find
    Suffix name: domain
    ------------------
    8 segments matched
    ------------------
      Segment name: new_segment
      Left node: server1.example.com
      Right node: server2.example.com
      Connectivity: both
    
    ...
    
    ----------------------------
    Number of entries returned 8
    ----------------------------

  2. Copy to Clipboard Toggle word wrap
    $ ipa topologysegment-del
    Suffix name: domain
    Segment name: new_segment
    -----------------------------
    Deleted segment "new_segment"
    -----------------------------

  • Copy to Clipboard Toggle word wrap
    $ ipa topologysegment-find
    Suffix name: domain
    ------------------
    7 segments matched
    ------------------
      Segment name: server2.example.com-to-server3.example.com
      Left node: server2.example.com
      Right node: server3.example.com
      Connectivity: both
    
    ...
    
    ----------------------------
    Number of entries returned 7
    ----------------------------

59.11.

警告

  1. 図59.11

59.12.

重要

  1. Copy to Clipboard Toggle word wrap
    [user@server2 ~]$ ipa server-del
    Server name: server1.example.com
    Removing server1.example.com from replication topology, please wait...
    ----------------------------------------------------------
    Deleted IPA server "server1.example.com"
    ----------------------------------------------------------
  2. Copy to Clipboard Toggle word wrap
    [root@server1 ~]# ipa server-install --uninstall

59.13.

  1. Copy to Clipboard Toggle word wrap
    $ ipa-replica-manage list-ruv
    
    server1.example.com:389: 6
    server2.example.com:389: 5
    server3.example.com:389: 4
    server4.example.com:389: 12
    重要

  2. Copy to Clipboard Toggle word wrap
    ipa-replica-manage clean-ruv 6
    ipa-replica-manage clean-ruv 5
警告

  1. Copy to Clipboard Toggle word wrap
    dn: cn=clean replica_ID, cn=cleanallruv, cn=tasks, cn=config
    objectclass: extensibleObject
    replica-base-dn: dc=example,dc=com
    replica-id: replica_ID
    replica-force-cleaning: no
    cn: clean replica_ID

59.14.

  • 注記

    図59.12

59.15.

  • Copy to Clipboard Toggle word wrap
    $ ipa config-show
      ...
      IPA masters: server1.example.com, server2.example.com, server3.example.com
      IPA CA servers: server1.example.com, server2.example.com
      IPA CA renewal master: server1.example.com
  • Copy to Clipboard Toggle word wrap
    $ ipa server-show
    Server name: server.example.com
      ...
      Enabled server roles: CA server, DNS server, KRA server
  • Copy to Clipboard Toggle word wrap
    $ ipa server-find --servrole "CA server"
    ---------------------
    2 IPA servers matched
    ---------------------
      Server name: server1.example.com
      ...
    
      Server name: server2.example.com
      ...
    ----------------------------
    Number of entries returned 2
    ----------------------------

59.16.

59.17.

  • Copy to Clipboard Toggle word wrap
    # ipa server-state replica.idm.example.com --state=hidden
  • Copy to Clipboard Toggle word wrap
    # ipa server-state replica.idm.example.com --state=enabled
  • Copy to Clipboard Toggle word wrap
    # ipa config-show

第60章

60.1.

表60.1
    

60.2.

表60.2

60.3.

第61章

61.1.

表61.1
    

  • Copy to Clipboard Toggle word wrap
    $ kinit -X X509_user_identity='PKCS11:opensc-pkcs11.so' idm_user
  • Copy to Clipboard Toggle word wrap
    $ kinit -X X509_user_identity='FILE:`/path/to/cert.pem,/path/to/cert.key`' idm_user

Copy to Clipboard Toggle word wrap
$ openssl x509 -noout -text -in ca.pem

Copy to Clipboard Toggle word wrap
$ diff cert1.crt cert2.crt

Copy to Clipboard Toggle word wrap
$ diff cert1.crt cert2.crt -y

61.2.

61.2.1.

61.2.2.

    • Copy to Clipboard Toggle word wrap
      $ openssl x509 -in cert.crt -inform der -outform pem -out cert.pem
    • Copy to Clipboard Toggle word wrap
      $ openssl pkcs12 -in cert_and_key.p12 -clcerts -nokeys -out cert.pem
      Enter Import Password:
  1. Copy to Clipboard Toggle word wrap
    $ kinit admin
    • Copy to Clipboard Toggle word wrap
      $ ipa user-add-cert some_user --certificate="$(sed -e '/BEGIN CERTIFICATE/d;/END CERTIFICATE/d' cert.pem)"
    • Copy to Clipboard Toggle word wrap
      $ ipa user-add-cert some_user --certificate=MIIDlzCCAn+gAwIBAgIBATANBgkqhki...
      注記

      Copy to Clipboard Toggle word wrap
      $ ipa user-add-cert some_user --cert=some_user_cert.pem

  2. Copy to Clipboard Toggle word wrap
    [idm_user@r8server]$ ipa user-show some_user

61.2.3.

    • Copy to Clipboard Toggle word wrap
      $ openssl x509 -in cert.crt -inform der -outform pem -out cert.pem
    • Copy to Clipboard Toggle word wrap
      $ openssl pkcs12 -in cert_and_key.p12 -clcerts -nokeys -out cert.pem
      Enter Import Password:

61.3.

61.3.1.

  1. Copy to Clipboard Toggle word wrap
    $ pk12util -d ~/certdb -o ~/some_user.p12 -n some_user
    Enter Password or Pin for "NSS Certificate DB":
    Enter password for PKCS12 file:
    Re-enter password:
    pk12util: PKCS12 EXPORT SUCCESSFUL
  2. Copy to Clipboard Toggle word wrap
    # chmod 600 ~/some_user.p12

61.3.2.

  • Copy to Clipboard Toggle word wrap
    $ openssl pkcs12 -export -in certfile.cer -inkey certfile.key -out certfile.p12

61.4.

表61.2
   

 

 

 

 

 

第62章

62.1.

重要

  1. 図62.1

62.2.

重要

  1. Copy to Clipboard Toggle word wrap
    # mkdir ~/certdb/
  2. Copy to Clipboard Toggle word wrap
    # certutil -N -d ~/certdb/
  3. Copy to Clipboard Toggle word wrap
    # certutil -R -d ~/certdb/ -a -g 4096 -s "CN=server.example.com,O=EXAMPLE.COM" -8 server.example.com > certificate_request.csr
  4. Copy to Clipboard Toggle word wrap
    # ipa cert-request certificate_request.csr --principal=host/server.example.com

62.3.

重要

  1. Copy to Clipboard Toggle word wrap
    otherName=1.3.6.1.4.1.311.20.2.3;UTF8:test2/server.example.com@EXAMPLE.COM
    DNS.1 = server.example.com
  2. Copy to Clipboard Toggle word wrap
    openssl req -new -newkey rsa:2048 -keyout test2service.key -sha256 -nodes -out certificate_request.csr -config openssl.conf
  3. Copy to Clipboard Toggle word wrap
    # ipa cert-request certificate_request.csr --principal=host/server.example.com

62.4.

第63章

63.1.

  1. Copy to Clipboard Toggle word wrap
    # openssl req -new -newkey rsa:2048 -days 365 -nodes -keyout new.key -out new.csr -subj '/CN=client.idm.example.com,O=IDM.EXAMPLE.COM'

  2. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to request a certificate
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
    
      tasks:
      - name: Request a certificate for a web server
        ipacert:
          ipaadmin_password: "{{ ipaadmin_password }}"
          state: requested
          csr: |
            -----BEGIN CERTIFICATE REQUEST-----
            MIGYMEwCAQAwGTEXMBUGA1UEAwwOZnJlZWlwYSBydWxlcyEwKjAFBgMrZXADIQBs
            HlqIr4b/XNK+K8QLJKIzfvuNK0buBhLz3LAzY7QDEqAAMAUGAytlcANBAF4oSCbA
            5aIPukCidnZJdr491G4LBE+URecYXsPknwYb+V+ONnf5ycZHyaFv+jkUBFGFeDgU
            SYaXm/gF8cDYjQI=
            -----END CERTIFICATE REQUEST-----
          principal: HTTP/client.idm.example.com
        register: cert

  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/hosts <path_to_playbooks_directory>/request-certificate.yml

63.2.

  1. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to revoke a certificate
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
    
      tasks:
      - name: Revoke a certificate for a web server
        ipacert:
          ipaadmin_password: "{{ ipaadmin_password }}"
          serial_number: 123456789
          revocation_reason: "keyCompromise"
          state: revoked
  2. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/hosts <path_to_playbooks_directory>/revoke-certificate.yml

63.3.

注記

  1. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to restore a certificate
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
    
      tasks:
      - name: Restore a certificate for a web service
        ipacert:
          ipaadmin_password: "{{ ipaadmin_password }}"
          serial_number: 123456789
          state: released
  2. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/hosts <path_to_playbooks_directory>/restore-certificate.yml

63.4.

  1. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to retrieve a certificate and store it locally on the managed node
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
    
      tasks:
      - name: Retrieve a certificate and save it to file 'cert.pem'
        ipacert:
          ipaadmin_password: "{{ ipaadmin_password }}"
          serial_number: 123456789
          certificate_out: cert.pem
          state: retrieved
  2. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/hosts <path_to_playbooks_directory>/retrieve-certificate.yml

第64章

64.1.

  • Copy to Clipboard Toggle word wrap
    $ ipa user-add-cert user --certificate=MIQTPrajQAwg...

注記

Copy to Clipboard Toggle word wrap
$ ipa user-add-cert user --certificate="$(openssl x509 -outform der -in user_cert.pem | base64 -w 0)"

64.2.

  1. 図64.1

64.3.

  • Copy to Clipboard Toggle word wrap
    $ ipa user-remove-cert user --certificate=MIQTPrajQAwg...

注記

Copy to Clipboard Toggle word wrap
$ ipa user-remove-cert user --certificate="$(openssl x509 -outform der -in user_cert.pem | base64 -w 0)"

64.4.

64.5.

第65章

65.1.

65.2.

  1. Copy to Clipboard Toggle word wrap
    $ ipa certprofile-show --out smime.cfg caIPAserviceCert
    ------------------------------------------------
    Profile configuration stored in file 'smime.cfg'
    ------------------------------------------------
      Profile ID: caIPAserviceCert
      Profile description: Standard profile for network services
      Store issued certificates: TRUE
  2. Copy to Clipboard Toggle word wrap
    $ vi  smime.cfg
  3. 注記

  4. Copy to Clipboard Toggle word wrap
    policyset.serverCertSet.7.default.params.exKeyUsageOIDs=1.3.6.1.5.5.7.3.4
  5. Copy to Clipboard Toggle word wrap
    $ ipa certprofile-import smime --file smime.cfg \
      --desc "S/MIME certificates" --store TRUE
    
    ------------------------
    Imported profile "smime"
    ------------------------
      Profile ID: smime
      Profile description: S/MIME certificates
      Store issued certificates: TRUE

  • Copy to Clipboard Toggle word wrap
    $ ipa certprofile-find
    
    ------------------
    4 profiles matched
    ------------------
      Profile ID: caIPAserviceCert
      Profile description: Standard profile for network services
      Store issued certificates: TRUE
    
      Profile ID: IECUserRoles
      Profile description: User profile that includes IECUserRoles extension from request
      Store issued certificates: TRUE
    
      Profile ID: KDCs_PKINIT_Certs
      Profile description: Profile for PKINIT support by KDCs
      Store issued certificates: TRUE
    
      Profile ID: smime
      Profile description: S/MIME certificates
      Store issued certificates: TRUE
    ----------------------------
    Number of entries returned 4
    ----------------------------

65.3.

65.4.

  1. Copy to Clipboard Toggle word wrap
    $ ipa group-add smime_users_group
    ---------------------------------
    Added group "smime users group"
    ---------------------------------
      Group name: smime_users_group
      GID: 75400001
  2. Copy to Clipboard Toggle word wrap
    $ ipa user-add smime_user
    First name: smime
    Last name: user
    ----------------------
    Added user "smime_user"
    ----------------------
      User login: smime_user
      First name: smime
      Last name: user
      Full name: smime user
      Display name: smime user
      Initials: TU
      Home directory: /home/smime_user
      GECOS: smime user
      Login shell: /bin/sh
      Principal name: smime_user@IDM.EXAMPLE.COM
      Principal alias: smime_user@IDM.EXAMPLE.COM
      Email address: smime_user@idm.example.com
      UID: 1505000004
      GID: 1505000004
      Password: False
      Member of groups: ipausers
      Kerberos keys available: False
  3. Copy to Clipboard Toggle word wrap
    $ ipa group-add-member smime_users_group --users=smime_user
      Group name: smime_users_group
      GID: 1505000003
      Member users: smime_user
    -------------------------
    Number of members added 1
    -------------------------
  4. Copy to Clipboard Toggle word wrap
    $ ipa caacl-add smime_acl
    ------------------------
    Added CA ACL "smime_acl"
    ------------------------
      ACL name: smime_acl
      Enabled: TRUE
  5. Copy to Clipboard Toggle word wrap
    $ ipa caacl-add-user smime_acl --group smime_users_group
      ACL name: smime_acl
      Enabled: TRUE
      User Groups: smime_users_group
    -------------------------
    Number of members added 1
    -------------------------
  6. Copy to Clipboard Toggle word wrap
    $ ipa caacl-add-profile smime_acl --certprofile smime
      ACL name: smime_acl
      Enabled: TRUE
      Profiles: smime
      User Groups: smime_users_group
    -------------------------
    Number of members added 1
    -------------------------

  • Copy to Clipboard Toggle word wrap
    $ ipa caacl-show smime_acl
      ACL name: smime_acl
      Enabled: TRUE
      Profiles: smime
      User Groups: smime_users_group
    ...

65.5.

注記

  1. Copy to Clipboard Toggle word wrap
    $ openssl req -new -newkey rsa:2048 -days 365 -nodes -keyout private.key -out cert.csr -subj '/CN=smime_user'
  2. Copy to Clipboard Toggle word wrap
    $ ipa cert-request cert.csr --principal=smime_user --profile-id=smime

  • Copy to Clipboard Toggle word wrap
    $ ipa user-show user
      User login: user
      ...
      Certificate: MIICfzCCAWcCAQA...
      ...

65.6.

  1. Copy to Clipboard Toggle word wrap
    # ipa certprofile-find
    
    ------------------
    4 profiles matched
    ------------------
      Profile ID: caIPAserviceCert
      Profile description: Standard profile for network services
      Store issued certificates: TRUE
    
      Profile ID: IECUserRoles
      ...
    
      Profile ID: smime
      Profile description: S/MIME certificates
      Store issued certificates: TRUE
    --------------------------
    Number of entries returned
    --------------------------
  2. Copy to Clipboard Toggle word wrap
    # ipa certprofile-mod smime --desc "New certificate profile description"
    ------------------------------------
    Modified Certificate Profile "smime"
    ------------------------------------
        Profile ID: smime
        Profile description: New certificate profile description
        Store issued certificates: TRUE
  3. Copy to Clipboard Toggle word wrap
    # vi smime.cfg

  4. Copy to Clipboard Toggle word wrap
    # ipa certprofile-mod _profile_ID_ --file=smime.cfg

  • Copy to Clipboard Toggle word wrap
    $ ipa certprofile-show smime
      Profile ID: smime
      Profile description: New certificate profile description
      Store issued certificates: TRUE

65.7.

Copy to Clipboard Toggle word wrap
policyset.list=serverCertSet
policyset.serverCertSet.list=1,2,3,4,5,6,7,8
policyset.serverCertSet.1.constraint.class_id=subjectNameConstraintImpl
policyset.serverCertSet.1.constraint.name=Subject Name Constraint
policyset.serverCertSet.1.constraint.params.pattern=CN=[^,]+,.+
policyset.serverCertSet.1.constraint.params.accept=true
policyset.serverCertSet.1.default.class_id=subjectNameDefaultImpl
policyset.serverCertSet.1.default.name=Subject Name Default
policyset.serverCertSet.1.default.params.name=CN=$request.req_subject_name.cn$, OU=pki-ipa, O=IPA
policyset.serverCertSet.2.constraint.class_id=validityConstraintImpl
policyset.serverCertSet.2.constraint.name=Validity Constraint
policyset.serverCertSet.2.constraint.params.range=740
policyset.serverCertSet.2.constraint.params.notBeforeCheck=false
policyset.serverCertSet.2.constraint.params.notAfterCheck=false
policyset.serverCertSet.2.default.class_id=validityDefaultImpl
policyset.serverCertSet.2.default.name=Validity Default
policyset.serverCertSet.2.default.params.range=731
policyset.serverCertSet.2.default.params.startTime=0

表65.1
  

第66章

66.1.

66.2.

66.3.

  1. 図66.1

66.4.

  • Copy to Clipboard Toggle word wrap
    $ openssl x509 -noout -text -in ca.pem
    Certificate:
        Data:
            Version: 3 (0x2)
            Serial Number: 1 (0x1)
            Signature Algorithm: sha256WithRSAEncryption
            Issuer: O = IDM.EXAMPLE.COM, CN = Certificate Authority
            Validity
                Not Before: Oct 30 19:39:14 2017 GMT
                Not After : Oct 30 19:39:14 2037 GMT

66.5.

66.5.1.

表66.1
   

 

66.5.2.

  1. 図66.2

66.5.3.

Copy to Clipboard Toggle word wrap
$ ipa cert-revoke 1032 --revocation-reason=1

66.6.

66.6.1.

  1. 図66.3

66.6.2.

  • Copy to Clipboard Toggle word wrap
    $ ipa cert-remove-hold 1032

第67章

注記

67.1.

  1. Copy to Clipboard Toggle word wrap
    [root@server]# mkdir ~/SmartCard/
  2. Copy to Clipboard Toggle word wrap
    [root@server]# cd ~/SmartCard/
  3. Copy to Clipboard Toggle word wrap
    # openssl x509 -in <filename>.der -inform DER -out <filename>.pem -outform PEM
  4. Copy to Clipboard Toggle word wrap
    [root@server SmartCard]# cp /tmp/rootca.pem ~/SmartCard/
    [root@server SmartCard]# cp /tmp/subca.pem ~/SmartCard/
    [root@server SmartCard]# cp /tmp/issuingca.pem ~/SmartCard/
  5. Copy to Clipboard Toggle word wrap
    [root@server SmartCard]# openssl x509 -noout -text -in rootca.pem | more
  6. Copy to Clipboard Toggle word wrap
    [root@server SmartCard]# kinit admin
    [root@server SmartCard]# ipa-advise config-server-for-smart-card-auth > config-server-for-smart-card-auth.sh

  7. Copy to Clipboard Toggle word wrap
    [root@server SmartCard]# chmod +x config-server-for-smart-card-auth.sh
    [root@server SmartCard]# ./config-server-for-smart-card-auth.sh rootca.pem subca.pem issuingca.pem
    Ticket cache:KEYRING:persistent:0:0
    Default principal: admin@IDM.EXAMPLE.COM
    [...]
    Systemwide CA database updated.
    The ipa-certupdate command was successful
    注記

    1. Copy to Clipboard Toggle word wrap
      SSLOCSPEnable off
    2. Copy to Clipboard Toggle word wrap
      [root@server SmartCard]# systemctl restart httpd
    警告

注記

67.2.

  1. Copy to Clipboard Toggle word wrap
    # openssl x509 -in <filename>.der -inform DER -out <filename>.pem -outform PEM

  2. Copy to Clipboard Toggle word wrap
    # openssl x509 -noout -text -in root-ca.pem | more
  3. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  4. Copy to Clipboard Toggle word wrap
    $ mkdir SmartCard/
  5. Copy to Clipboard Toggle word wrap
    # cp /tmp/root-ca.pem ~/MyPlaybooks/SmartCard/
    # cp /tmp/intermediate-ca.pem ~/MyPlaybooks/SmartCard/
    # cp /etc/ipa/ca.crt ~/MyPlaybooks/SmartCard/ipa-ca.crt

    Copy to Clipboard Toggle word wrap
    [ipaserver]
    ipaserver.idm.example.com
    
    [ipareplicas]
    ipareplica1.idm.example.com
    ipareplica2.idm.example.com
    
    [ipacluster:children]
    ipaserver
    ipareplicas
    
    [ipacluster:vars]
    ipaadmin_password= "{{ ipaadmin_password }}"
    ipasmartcard_server_ca_certs=/home/<user_name>/MyPlaybooks/SmartCard/root-ca.pem,/home/<user_name>/MyPlaybooks/SmartCard/intermediate-ca.pem,/home/<user_name>/MyPlaybooks/SmartCard/ipa-ca.crt
  6. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to set up smart card authentication for an IdM server
      hosts: ipaserver
      become: true
    
      roles:
      - role: ipasmartcard_server
        state: present
  7. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory install-smartcard-server.yml

    1. Copy to Clipboard Toggle word wrap
      ssh root@ipaserver.idm.example.com
    2. Copy to Clipboard Toggle word wrap
      SSLOCSPEnable off
    3. Copy to Clipboard Toggle word wrap
      # systemctl restart httpd
    警告

注記

Copy to Clipboard Toggle word wrap
---
- name: Playbook to setup smartcard for IPA server and replicas
  hosts: ipacluster
[...]

67.3.

  1. Copy to Clipboard Toggle word wrap
    [root@server SmartCard]# kinit admin
    [root@server SmartCard]# ipa-advise config-client-for-smart-card-auth > config-client-for-smart-card-auth.sh

  2. Copy to Clipboard Toggle word wrap
    [root@server SmartCard]# scp config-client-for-smart-card-auth.sh root@client.idm.example.com:/root/SmartCard/
    Password:
    config-client-for-smart-card-auth.sh        100%   2419       3.5MB/s   00:00
  3. Copy to Clipboard Toggle word wrap
    [root@server SmartCard]# scp {rootca.pem,subca.pem,issuingca.pem} root@client.idm.example.com:/root/SmartCard/
    Password:
    rootca.pem                          100%   1237     9.6KB/s   00:00
    subca.pem                           100%   2514    19.6KB/s   00:00
    issuingca.pem                       100%   2514    19.6KB/s   00:00
  4. Copy to Clipboard Toggle word wrap
    [root@client SmartCard]# kinit admin
    [root@client SmartCard]# chmod +x config-client-for-smart-card-auth.sh
    [root@client SmartCard]# ./config-client-for-smart-card-auth.sh rootca.pem subca.pem issuingca.pem
    Ticket cache:KEYRING:persistent:0:0
    Default principal: admin@IDM.EXAMPLE.COM
    [...]
    Systemwide CA database updated.
    The ipa-certupdate command was successful
    注記

67.4.

注記

  1. Copy to Clipboard Toggle word wrap
    # openssl x509 -in <filename>.der -inform DER -out <filename>.pem -outform PEM

  2. Copy to Clipboard Toggle word wrap
    # openssl x509 -noout -text -in root-ca.pem | more
  3. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  4. Copy to Clipboard Toggle word wrap
    $ mkdir SmartCard/
  5. Copy to Clipboard Toggle word wrap
    # cp /tmp/root-ca.pem ~/MyPlaybooks/SmartCard/
    # cp /tmp/intermediate-ca.pem ~/MyPlaybooks/SmartCard/
    # cp /etc/ipa/ca.crt ~/MyPlaybooks/SmartCard/ipa-ca.crt

    Copy to Clipboard Toggle word wrap
    [ipaclients]
    ipaclient1.example.com
    ipaclient2.example.com
    
    [ipaclients:vars]
    ipaadmin_password=SomeADMINpassword
    ipasmartcard_client_ca_certs=/home/<user_name>/MyPlaybooks/SmartCard/root-ca.pem,/home/<user_name>/MyPlaybooks/SmartCard/intermediate-ca.pem,/home/<user_name>/MyPlaybooks/SmartCard/ipa-ca.crt
  6. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to set up smart card authentication for an IdM client
      hosts: ipaclients
      become: true
    
      roles:
      - role: ipasmartcard_client
        state: present
  7. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory install-smartcard-clients.yml

注記

67.5.

注記

  1. Copy to Clipboard Toggle word wrap
    [user@client SmartCard]$ cat testuser.crt

67.6.

注記

  1. Copy to Clipboard Toggle word wrap
    [user@client SmartCard]$ kinit admin

    Copy to Clipboard Toggle word wrap
    [user@client SmartCard]$ kinit <smartcard_user>
  2. Copy to Clipboard Toggle word wrap
    [user@client SmartCard]$ export CERT=`openssl x509 -outform der -in testuser.crt | base64 -w0 -`

  3. Copy to Clipboard Toggle word wrap
    [user@client SmartCard]$ ipa user-add-cert <smartcard_user> --certificate=$CERT

67.7.

  1. Copy to Clipboard Toggle word wrap
    # yum -y install opensc gnutls-utils
  2. Copy to Clipboard Toggle word wrap
    # systemctl start pcscd

  • Copy to Clipboard Toggle word wrap
    # systemctl status pcscd

67.8.

  1. Copy to Clipboard Toggle word wrap
    $ pkcs15-init --erase-card --use-default-transport-keys
    Using reader with a card: Reader name
    PIN [Security Officer PIN] required.
    Please enter PIN [Security Officer PIN]:

  2. Copy to Clipboard Toggle word wrap
    $ pkcs15-init --create-pkcs15 --use-default-transport-keys \
        --pin 963214 --puk 321478 --so-pin 65498714 --so-puk 784123
    Using reader with a card: Reader name

  3. Copy to Clipboard Toggle word wrap
    $ pkcs15-init --store-pin --label testuser \
        --auth-id 01 --so-pin 65498714 --pin 963214 --puk 321478
    Using reader with a card: Reader name

  4. Copy to Clipboard Toggle word wrap
    $ pkcs15-init --store-private-key testuser.key --label testuser_key \
        --auth-id 01 --id 01 --pin 963214
    Using reader with a card: Reader name
    注記

  5. Copy to Clipboard Toggle word wrap
    $ pkcs15-init --store-certificate testuser.crt --label testuser_crt \
        --auth-id 01 --id 01 --format pem --pin 963214
    Using reader with a card: Reader name
  6. Copy to Clipboard Toggle word wrap
    $ pkcs15-init --store-public-key testuserpublic.key \
        --label testuserpublic_key --auth-id 01 --id 01 --pin 963214
    Using reader with a card: Reader name
    注記

  7. Copy to Clipboard Toggle word wrap
    $ pkcs15-init -F

67.9.

67.10.

  • Copy to Clipboard Toggle word wrap
    $ klist
    Ticket cache: KEYRING:persistent:1358900015:krb_cache_TObtNMd
    Default principal: example.user@REDHAT.COM
    
    Valid starting       Expires              Service principal
    04/20/2020 13:58:24  04/20/2020 23:58:24  krbtgt/EXAMPLE.COM@EXAMPLE.COM
    	renew until 04/27/2020 08:58:15

67.11.

  • Copy to Clipboard Toggle word wrap
    $ su - <user_name>
    PIN for smart_card

第68章

68.1.

68.2.

注記

  1. Copy to Clipboard Toggle word wrap
    root@idmserver ~]# sftp Administrator@winserver.ad.example.com
    Administrator@winserver.ad.example.com's password:
    Connected to Administrator@winserver.ad.example.com.
    sftp> cd <Path to certificates>
    sftp> ls
    adcs-winserver-ca.cer    aduser1.pfx
    sftp>
    sftp> get adcs-winserver-ca.cer
    Fetching <Path to certificates>/adcs-winserver-ca.cer to adcs-winserver-ca.cer
    <Path to certificates>/adcs-winserver-ca.cer                 100%  1254    15KB/s 00:00
    sftp quit
  2. Copy to Clipboard Toggle word wrap
    [root@client1 ~]# sftp Administrator@winserver.ad.example.com
    Administrator@winserver.ad.example.com's password:
    Connected to Administrator@winserver.ad.example.com.
    sftp> cd /<Path to certificates>
    sftp> get aduser1.pfx
    Fetching <Path to certificates>/aduser1.pfx to aduser1.pfx
    <Path to certificates>/aduser1.pfx                 100%  1254    15KB/s 00:00
    sftp quit

68.3.

  1. Copy to Clipboard Toggle word wrap
    [root@idmserver ~]# ipa-advise config-client-for-smart-card-auth > sc_client.sh
  2. Copy to Clipboard Toggle word wrap
    [root@idmserver ~]# ipa-advise config-server-for-smart-card-auth > sc_server.sh
  3. Copy to Clipboard Toggle word wrap
    [root@idmserver ~]# sh -x sc_server.sh adcs-winserver-ca.cer
  4. Copy to Clipboard Toggle word wrap
    [root@idmserver ~]# scp sc_client.sh root@client1.idm.example.com:/root
    Password:
    sc_client.sh                  100%  2857   1.6MB/s   00:00
  5. Copy to Clipboard Toggle word wrap
    [root@idmserver ~]# scp adcs-winserver-ca.cer root@client1.idm.example.com:/root
    Password:
    adcs-winserver-ca.cer                 100%  1254   952.0KB/s   00:00
  6. Copy to Clipboard Toggle word wrap
    [root@idmclient1 ~]# sh -x sc_client.sh adcs-winserver-ca.cer

68.4.

  1. Copy to Clipboard Toggle word wrap
    [root@idmclient1 ~]# openssl pkcs12 -in aduser1.pfx -out aduser1_cert_only.pem -clcerts -nodes
    Enter Import Password:
  2. Copy to Clipboard Toggle word wrap
    [root@idmclient1 ~]# openssl pkcs12 -in adduser1.pfx -nocerts -out adduser1.pem > aduser1.key
  3. Copy to Clipboard Toggle word wrap
    [root@idmclient1 ~]# openssl pkcs12 -in adduser1.pfx -clcerts -nokeys -out aduser1_cert_only.pem > aduser1.crt

68.5.

  1. Copy to Clipboard Toggle word wrap
    # yum -y install opensc gnutls-utils
  2. Copy to Clipboard Toggle word wrap
    # systemctl start pcscd

  • Copy to Clipboard Toggle word wrap
    # systemctl status pcscd

68.6.

  1. Copy to Clipboard Toggle word wrap
    $ pkcs15-init --erase-card --use-default-transport-keys
    Using reader with a card: Reader name
    PIN [Security Officer PIN] required.
    Please enter PIN [Security Officer PIN]:

  2. Copy to Clipboard Toggle word wrap
    $ pkcs15-init --create-pkcs15 --use-default-transport-keys \
        --pin 963214 --puk 321478 --so-pin 65498714 --so-puk 784123
    Using reader with a card: Reader name

  3. Copy to Clipboard Toggle word wrap
    $ pkcs15-init --store-pin --label testuser \
        --auth-id 01 --so-pin 65498714 --pin 963214 --puk 321478
    Using reader with a card: Reader name

  4. Copy to Clipboard Toggle word wrap
    $ pkcs15-init --store-private-key testuser.key --label testuser_key \
        --auth-id 01 --id 01 --pin 963214
    Using reader with a card: Reader name
    注記

  5. Copy to Clipboard Toggle word wrap
    $ pkcs15-init --store-certificate testuser.crt --label testuser_crt \
        --auth-id 01 --id 01 --format pem --pin 963214
    Using reader with a card: Reader name
  6. Copy to Clipboard Toggle word wrap
    $ pkcs15-init --store-public-key testuserpublic.key \
        --label testuserpublic_key --auth-id 01 --id 01 --pin 963214
    Using reader with a card: Reader name
    注記

  7. Copy to Clipboard Toggle word wrap
    $ pkcs15-init -F

68.7.

  1. Copy to Clipboard Toggle word wrap
    [root@idmclient1 ~]# vim /etc/sssd/sssd.conf
  2. Copy to Clipboard Toggle word wrap
    [pam]
    p11_child_timeout = 60
  3. Copy to Clipboard Toggle word wrap
    [domain/IDM.EXAMPLE.COM]
    krb5_auth_timeout = 60

68.8.

第69章

69.1.

注記

69.2.

Copy to Clipboard Toggle word wrap
# ipa certmaprule-add simple_rule --matchrule '<ISSUER>CN=Smart Card CA,O=EXAMPLE.ORG' --maprule '(ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500})'

69.3.

  1. Copy to Clipboard Toggle word wrap
    # CERT=$(openssl x509 -in /path/to/certificate -outform der|base64 -w0)
  2. Copy to Clipboard Toggle word wrap
    # sssctl cert-eval-rule $CERT --match='<ISSUER>CN=adcs19-WIN1-CA,DC=AD,DC=EXAMPLE,DC=COM' --map='LDAPU1:(altSecurityIdentities=X509:<I>{issuer_dn!ad_x500}<SR>{serial_number!hex_ur})'
    Certificate matches rule.
    Mapping filter:
    
        (altSecurityIdentities=X509:<I>DC=com,DC=example,DC=ad,CN=adcs19-WIN1-CA<SR>0F0000000000DB8852DD7B246C9C0F0000003B)

  3. Copy to Clipboard Toggle word wrap
    # ipa certmaprule-add simple_rule --matchrule '<ISSUER>CN=adcs19-WIN1-CA,DC=AD,DC=EXAMPLE,DC=COM' --maprule 'LDAPU1:(altSecurityIdentities=X509:<I>{issuer_dn!ad_x500}<SR>{serial_number!hex_ur})'

69.4.

69.4.1.

  1. 図69.1

  2. Copy to Clipboard Toggle word wrap
    (ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500})
  3. Copy to Clipboard Toggle word wrap
    <ISSUER>CN=Smart Card CA,O=EXAMPLE.ORG

    図69.2

  4. Copy to Clipboard Toggle word wrap
    # systemctl restart sssd

69.4.2.

  1. Copy to Clipboard Toggle word wrap
    # kinit admin
  2. Copy to Clipboard Toggle word wrap
    # ipa certmaprule-add rule_name --matchrule '<ISSUER>CN=Smart Card CA,O=EXAMPLE.ORG' --maprule '(ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500})'
    -------------------------------------------------------
    Added Certificate Identity Mapping Rule "rule_name"
    -------------------------------------------------------
      Rule name: rule_name
      Mapping rule: (ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500})
      Matching rule: <ISSUER>CN=Smart Card CA,O=EXAMPLE.ORG
      Enabled: TRUE
  3. Copy to Clipboard Toggle word wrap
    # systemctl restart sssd

69.4.3.

      1. Copy to Clipboard Toggle word wrap
        [root@server ~]# cat idm_user_certificate.pem
        -----BEGIN CERTIFICATE-----
        MIIFFTCCA/2gAwIBAgIBEjANBgkqhkiG9w0BAQsFADA6MRgwFgYDVQQKDA9JRE0u
        RVhBTVBMRS5DT00xHjAcBgNVBAMMFUNlcnRpZmljYXRlIEF1dGhvcml0eTAeFw0x
        ODA5MDIxODE1MzlaFw0yMDA5MDIxODE1MzlaMCwxGDAWBgNVBAoMD0lETS5FWEFN
        [...output truncated...]
      2. 図69.3

        図69.4

  1. Copy to Clipboard Toggle word wrap
    # sss_cache -u idm_user
  2. Copy to Clipboard Toggle word wrap
    # ipa certmap-match idm_user_cert.pem
    --------------
    1 user matched
    --------------
     Domain: IDM.EXAMPLE.COM
     User logins: idm_user
    ----------------------------
    Number of entries returned 1
    ----------------------------

69.4.4.

  1. Copy to Clipboard Toggle word wrap
    # kinit admin
    Copy to Clipboard Toggle word wrap
    # CERT=$(openssl x509 -in idm_user_cert.pem -outform der|base64 -w0)
    # ipa user-add-certmapdata idm_user --certificate $CERT
    • Copy to Clipboard Toggle word wrap
      # ipa user-add-certmapdata idm_user --subject "O=EXAMPLE.ORG,CN=test" --issuer "CN=Smart Card CA,O=EXAMPLE.ORG"
      --------------------------------------------
      Added certificate mappings to user "idm_user"
      --------------------------------------------
        User login: idm_user
        Certificate mapping data: X509:<I>O=EXAMPLE.ORG,CN=Smart Card CA<S>CN=test,O=EXAMPLE.ORG

  1. Copy to Clipboard Toggle word wrap
    # sss_cache -u idm_user
  2. Copy to Clipboard Toggle word wrap
    # ipa certmap-match idm_user_cert.pem
    --------------
    1 user matched
    --------------
     Domain: IDM.EXAMPLE.COM
     User logins: idm_user
    ----------------------------
    Number of entries returned 1
    ----------------------------

69.5.

69.6.

注記

69.6.1.

  1. 図69.5

  2. Copy to Clipboard Toggle word wrap
    (userCertificate;binary={cert!bin})
    注記

  3. Copy to Clipboard Toggle word wrap
    <ISSUER>CN=AD-ROOT-CA,DC=ad,DC=example,DC=com

    図69.6

  4. Copy to Clipboard Toggle word wrap
    # systemctl restart sssd

69.6.2.

  1. Copy to Clipboard Toggle word wrap
    # kinit admin
  2. Copy to Clipboard Toggle word wrap
    # ipa certmaprule-add simpleADrule --matchrule '<ISSUER>CN=AD-ROOT-CA,DC=ad,DC=example,DC=com' --maprule '(userCertificate;binary={cert!bin})' --domain ad.example.com
    -------------------------------------------------------
    Added Certificate Identity Mapping Rule "simpleADrule"
    -------------------------------------------------------
      Rule name: simpleADrule
      Mapping rule: (userCertificate;binary={cert!bin})
      Matching rule: <ISSUER>CN=AD-ROOT-CA,DC=ad,DC=example,DC=com
      Domain name: ad.example.com
      Enabled: TRUE
    注記

  3. Copy to Clipboard Toggle word wrap
    # systemctl restart sssd

69.7.

69.7.1.

  1. 図69.7

  2. Copy to Clipboard Toggle word wrap
    (altSecurityIdentities=X509:<I>{issuer_dn!ad_x500}<S>{subject_dn!ad_x500})
  3. Copy to Clipboard Toggle word wrap
    <ISSUER>CN=AD-ROOT-CA,DC=ad,DC=example,DC=com
  4. Copy to Clipboard Toggle word wrap
    ad.example.com

    図69.8

  5. Copy to Clipboard Toggle word wrap
    # systemctl restart sssd

69.7.2.

  1. Copy to Clipboard Toggle word wrap
    # kinit admin
  2. Copy to Clipboard Toggle word wrap
    # ipa certmaprule-add ad_configured_for_mapping_rule --matchrule '<ISSUER>CN=AD-ROOT-CA,DC=ad,DC=example,DC=com' --maprule '(altSecurityIdentities=X509:<I>{issuer_dn!ad_x500}<S>{subject_dn!ad_x500})' --domain=ad.example.com
    -------------------------------------------------------
    Added Certificate Identity Mapping Rule "ad_configured_for_mapping_rule"
    -------------------------------------------------------
      Rule name: ad_configured_for_mapping_rule
      Mapping rule: (altSecurityIdentities=X509:<I>{issuer_dn!ad_x500}<S>{subject_dn!ad_x500})
      Matching rule: <ISSUER>CN=AD-ROOT-CA,DC=ad,DC=example,DC=com
      Domain name: ad.example.com
      Enabled: TRUE
  3. Copy to Clipboard Toggle word wrap
    # systemctl restart sssd

69.7.3.

    Copy to Clipboard Toggle word wrap
    $ ldapsearch -o ldif-wrap=no -LLL -h adserver.ad.example.com \
    -p 389 -D cn=Administrator,cn=users,dc=ad,dc=example,dc=com \
    -W -b cn=users,dc=ad,dc=example,dc=com "(cn=ad_user)" \
    altSecurityIdentities
    Enter LDAP Password:
    dn: CN=ad_user,CN=Users,DC=ad,DC=example,DC=com
    altSecurityIdentities: X509:<I>DC=com,DC=example,DC=ad,CN=AD-ROOT-CA<S>DC=com,DC=example,DC=ad,CN=Users,CN=ad_user

69.8.

69.8.1.

  1. 図69.9

  2. Copy to Clipboard Toggle word wrap
    (userCertificate;binary={cert!bin})
    注記

  3. Copy to Clipboard Toggle word wrap
    <ISSUER>CN=AD-ROOT-CA,DC=ad,DC=example,DC=com
  4. 図69.10

  5. Copy to Clipboard Toggle word wrap
    # systemctl restart sssd

69.8.2.

  1. Copy to Clipboard Toggle word wrap
    # kinit admin
  2. Copy to Clipboard Toggle word wrap
    # ipa certmaprule-add simpleADrule --matchrule '<ISSUER>CN=AD-ROOT-CA,DC=ad,DC=example,DC=com' --maprule '(userCertificate;binary={cert!bin})' --domain ad.example.com
    -------------------------------------------------------
    Added Certificate Identity Mapping Rule "simpleADrule"
    -------------------------------------------------------
      Rule name: simpleADrule
      Mapping rule: (userCertificate;binary={cert!bin})
      Matching rule: <ISSUER>CN=AD-ROOT-CA,DC=ad,DC=example,DC=com
      Domain name: ad.example.com
      Enabled: TRUE
    注記

  3. Copy to Clipboard Toggle word wrap
    # systemctl restart sssd

69.8.3.

  1. 図69.11

  2. 図69.12

  1. Copy to Clipboard Toggle word wrap
    # sss_cache -u ad_user@ad.example.com
  2. Copy to Clipboard Toggle word wrap
    # ipa certmap-match ad_user_cert.pem
    --------------
    1 user matched
    --------------
     Domain: AD.EXAMPLE.COM
     User logins: ad_user@ad.example.com
    ----------------------------
    Number of entries returned 1
    ----------------------------

69.8.4.

  1. Copy to Clipboard Toggle word wrap
    # kinit admin
  2. Copy to Clipboard Toggle word wrap
    # CERT=$(openssl x509 -in /path/to/certificate -outform der|base64 -w0)
  3. Copy to Clipboard Toggle word wrap
    # ipa idoverrideuser-add-cert ad_user@ad.example.com --certificate $CERT

  1. Copy to Clipboard Toggle word wrap
    # sss_cache -u ad_user@ad.example.com
  2. Copy to Clipboard Toggle word wrap
    # ipa certmap-match ad_user_cert.pem
    --------------
    1 user matched
    --------------
     Domain: AD.EXAMPLE.COM
     User logins: ad_user@ad.example.com
    ----------------------------
    Number of entries returned 1
    ----------------------------

69.9.

Copy to Clipboard Toggle word wrap
$ ipa certmaprule-add ad_cert_for_ipa_and_ad_users \
  --maprule='(|(ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500})(altSecurityIdentities=X509:<I>{issuer_dn!ad_x500}<S>{subject_dn!ad_x500}))' \
  --matchrule='<ISSUER>CN=AD-ROOT-CA,DC=ad,DC=example,DC=com' \
  --domain=ad.example.com

Copy to Clipboard Toggle word wrap
$ ipa certmaprule-add ipa_cert_for_ad_users \
  --maprule='(|(userCertificate;binary={cert!bin})(ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500})(altSecurityIdentities=X509:<I>{issuer_dn!ad_x500}<S>{subject_dn!ad_x500}))' \
  --matchrule='<ISSUER>CN=Certificate Authority,O=REALM.EXAMPLE.COM' \
  --domain=idm.example.com --domain=ad.example.com

69.10.

第70章

注記

70.1.

    1. Copy to Clipboard Toggle word wrap
      # kinit admin
      # ipa-advise config-server-for-smart-card-auth > server_certificate_script.sh
    2. Copy to Clipboard Toggle word wrap
      # chmod +x server_certificate_script.sh
    1. Copy to Clipboard Toggle word wrap
      # ./server_certificate_script.sh /etc/ipa/ca.crt
    2. Copy to Clipboard Toggle word wrap
      # ./server_certificate_script.sh /tmp/ca1.pem /tmp/ca2.pem
注記

70.2.

注記

  1. Copy to Clipboard Toggle word wrap
    # mkdir ~/certdb/
    # certutil -N -d ~/certdb/
    Enter a password which will be used to encrypt your keys.
    The password should be at least 8 characters long,
    and should contain at least one non-alphabetic character.
    
    Enter new password:
    Re-enter password:
  2. Copy to Clipboard Toggle word wrap
    # certutil -R -d ~/certdb/ -a -g 4096 -n idm_user -s "CN=idm_user,O=IDM.EXAMPLE.COM" > certificate_request.csr
  3. Copy to Clipboard Toggle word wrap
    Enter Password or Pin for "NSS Certificate DB":
    
    A random seed must be generated that will be used in the
    creation of your key.  One of the easiest ways to create a
    random seed is to use the timing of keystrokes on a keyboard.
    
    To begin, type keys on the keyboard until this progress meter
    is full.  DO NOT USE THE AUTOREPEAT FUNCTION ON YOUR KEYBOARD!
    
    
    Continue typing until the progress meter is full:
  4. Copy to Clipboard Toggle word wrap
    # ipa cert-request certificate_request.csr --principal=idm_user@IDM.EXAMPLE.COM --profile-id=IECUserRoles --certificate-out=~/idm_user.pem
  5. Copy to Clipboard Toggle word wrap
    # certutil -A -d ~/certdb/ -n idm_user -t "P,," -i ~/idm_user.pem
  6. Copy to Clipboard Toggle word wrap
    # certutil -K -d ~/certdb/
    < 0> rsa      5ad14d41463b87a095b1896cf0068ccc467df395   NSS Certificate DB:idm_user
  7. Copy to Clipboard Toggle word wrap
    # pk12util -d ~/certdb -o ~/idm_user.p12 -n idm_user
    Enter Password or Pin for "NSS Certificate DB":
    Enter password for PKCS12 file:
    Re-enter password:
    pk12util: PKCS12 EXPORT SUCCESSFUL
  8. Copy to Clipboard Toggle word wrap
    # scp ~/idm_user.p12 idm_user@client.idm.example.com:/home/idm_user/
  9. Copy to Clipboard Toggle word wrap
    # chmod o-rwx /home/idm_user/
  10. Copy to Clipboard Toggle word wrap
    # rm ~/certdb/
    # rm ~/idm_user.p12

70.3.

注記

70.4.

  1. 図70.1

  2. 図70.2

      • 図70.3

      • 図70.4

      • 図70.5

      • 図70.6

      • 図70.7

70.5.

  1. 図70.8

70.6.

  • Copy to Clipboard Toggle word wrap
    $ kinit -X X509_idm_user='PKCS12:~/idm_user.p12' idm_user
    注記

第71章

71.1.

注記

71.2.

  • Copy to Clipboard Toggle word wrap
    ~]$ kinit admin
    Password for admin@IDM.EXAMPLE.COM:

  1. Copy to Clipboard Toggle word wrap
    ~]$ ipa server-role-find --role 'CA server'
    ----------------------
    2 server roles matched
    ----------------------
      Server name: server.idm.example.com
      Role name: CA server
      Role status: enabled
    
      Server name: replica.idm.example.com
      Role name: CA server
      Role status: enabled
    ----------------------------
    Number of entries returned 2
    ----------------------------

  2. Copy to Clipboard Toggle word wrap
    ~]$ ipa config-show | grep 'CA renewal'
      IPA CA renewal master: server.idm.example.com

  3. Copy to Clipboard Toggle word wrap
    ~]$ ipa config-mod --ca-renewal-master-server replica.idm.example.com | grep 'CA renewal'
      IPA CA renewal master: replica.idm.example.com
    重要

第72章

72.1.

Copy to Clipboard Toggle word wrap
external_CA certificate > IdM CA certificate > LDAP certificate

  1. Copy to Clipboard Toggle word wrap
    # ipa-cacert-manage renew --self-signed
    Renewing CA certificate, please wait
    CA certificate successfully renewed
    The ipa-cacert-manage command was successful
  2. Copy to Clipboard Toggle word wrap
    # ssh root@idmclient01.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    [idmclient01 ~]# ipa-certupdate
    Systemwide CA database updated.
    Systemwide CA database updated.
    The ipa-certupdate command was successful

  1. Copy to Clipboard Toggle word wrap
    [idmclient01 ~]$ openssl crl2pkcs7 -nocrl -certfile /etc/ipa/ca.crt | openssl pkcs7 -print_certs -text -noout
    [...]
    Certificate:
        Data:
            Version: 3 (0x2)
            Serial Number: 39 (0x27)
            Signature Algorithm: sha256WithRSAEncryption
            Issuer: O=IDM.EXAMPLE.COM, CN=Certificate Authority
            Validity
                Not Before: Jul  1 16:32:45 2019 GMT
                Not After : Jul  1 16:32:45 2039 GMT
            Subject: O=IDM.EXAMPLE.COM, CN=Certificate Authority
    [...]

72.2.

72.3.

    • Copy to Clipboard Toggle word wrap
      ~]# ipa-cacert-manage renew --external-ca --external-ca-type=ms-cs [--external-ca-profile=PROFILE]
      Exporting CA certificate signing request, please wait
      The next step is to get /var/lib/ipa/ca.csr signed by your CA and re-run ipa-cacert-manage as:
      ipa-cacert-manage renew --external-cert-file=/path/to/signed_certificate --external-cert-file=/path/to/external_ca_certificate
      The ipa-cacert-manage command was successful
    • Copy to Clipboard Toggle word wrap
      ~]# ipa-cacert-manage renew --external-ca
      Exporting CA certificate signing request, please wait
      The next step is to get /var/lib/ipa/ca.csr signed by your CA and re-run ipa-cacert-manage as:
      ipa-cacert-manage renew --external-cert-file=/path/to/signed_certificate --external-cert-file=/path/to/external_ca_certificate
      The ipa-cacert-manage command was successful

  1. Copy to Clipboard Toggle word wrap
    ~]# ipa-cacert-manage renew --external-cert-file=/path/to/signed_certificate --external-cert-file=/path/to/external_ca_certificate_1 --external-cert-file=/path/to/external_ca_certificate_2
  2. Copy to Clipboard Toggle word wrap
    [client ~]$ ipa-certupdate
    Systemwide CA database updated.
    Systemwide CA database updated.
    The ipa-certupdate command was successful

  1. Copy to Clipboard Toggle word wrap
    [client ~]$ openssl crl2pkcs7 -nocrl -certfile /etc/ipa/ca.crt | openssl pkcs7 -print_certs -text -noout
    [...]
    Certificate:
        Data:
            Version: 3 (0x2)
            Serial Number: 39 (0x27)
            Signature Algorithm: sha256WithRSAEncryption
            Issuer: O=IDM.EXAMPLE.COM, CN=Certificate Authority
            Validity
                Not Before: Jul  1 16:32:45 2019 GMT
                Not After : Jul  1 16:32:45 2039 GMT
            Subject: O=IDM.EXAMPLE.COM, CN=Certificate Authority
    [...]

第73章

73.1.

重要

  1. Copy to Clipboard Toggle word wrap
    # ipa-cert-fix
    ...
    The following certificates will be renewed:
    
    Dogtag sslserver certificate:
      Subject: CN=ca1.example.com,O=EXAMPLE.COM 201905222205
      Serial:  13
      Expires: 2019-05-12 05:55:47
    ...
    Enter "yes" to proceed:
  2. Copy to Clipboard Toggle word wrap
    Enter "yes" to proceed: true
    Proceeding.
    Renewed Dogtag sslserver certificate:
      Subject: CN=ca1.example.com,O=EXAMPLE.COM 201905222205
      Serial:  268369925
      Expires: 2021-08-14 02:19:33
    ...
    
    Becoming renewal master.
    The ipa-cert-fix command was successful

  1. Copy to Clipboard Toggle word wrap
    # ipactl status
    Directory Service: RUNNING
    krb5kdc Service: RUNNING
    kadmin Service: RUNNING
    httpd Service: RUNNING
    ipa-custodia Service: RUNNING
    pki-tomcatd Service: RUNNING
    ipa-otpd Service: RUNNING
    ipa: INFO: The ipactl command was successful

73.2.

  1. Copy to Clipboard Toggle word wrap
    # ipactl restart --force

  2. Copy to Clipboard Toggle word wrap
    # getcert list | egrep '^Request|status:|subject:'
    Request ID '20190522120745':
            status: MONITORING
            subject: CN=IPA RA,O=EXAMPLE.COM 201905222205
    Request ID '20190522120834':
            status: MONITORING
            subject: CN=Certificate Authority,O=EXAMPLE.COM 201905222205
    ...

  3. Copy to Clipboard Toggle word wrap
    Request ID '20190522120835':
            status: CA_UNREACHABLE
            subject: CN=ca2.example.com,O=EXAMPLE.COM 201905222205
    ...
  4. Copy to Clipboard Toggle word wrap
    # ipa-cert-fix
    Dogtag sslserver certificate:
      Subject: CN=ca2.example.com,O=EXAMPLE.COM
      Serial:  3
      Expires: 2019-05-11 12:07:11
    
    Enter "yes" to proceed: true
    Proceeding.
    Renewed Dogtag sslserver certificate:
      Subject: CN=ca2.example.com,O=EXAMPLE.COM 201905222205
      Serial:  15
      Expires: 2019-08-14 04:25:05
    
    The ipa-cert-fix command was successful

第74章

注記

  1. Copy to Clipboard Toggle word wrap
    # ipa-cacert-manage install
  2. Copy to Clipboard Toggle word wrap
    # ipa-certupdate
  3. Copy to Clipboard Toggle word wrap
    $ openssl req -new -newkey rsa:4096 -days 365 -nodes -keyout new.key -out new.csr -addext "subjectAltName = DNS:server.idm.example.com" -subj '/CN=server.idm.example.com,O=IDM.EXAMPLE.COM'

  4. Copy to Clipboard Toggle word wrap
    # ipa-server-certinstall -w --pin=password new.key new.crt

  5. Copy to Clipboard Toggle word wrap
    # ipa-server-certinstall -d --pin=password new.key new.cert

  6. Copy to Clipboard Toggle word wrap
    # systemctl restart httpd.service
  7. Copy to Clipboard Toggle word wrap
    # systemctl restart dirsrv@IDM.EXAMPLE.COM.service
  8. Copy to Clipboard Toggle word wrap
    # ipa-certupdate

第75章

注記

    1. Copy to Clipboard Toggle word wrap
      # ipa-cacert-manage install ca_certificate_chain_file.crt
    2. Copy to Clipboard Toggle word wrap
      # ipa-certupdate
      • Copy to Clipboard Toggle word wrap
        $ openssl req -new -nodes -in /var/lib/ipa/private/httpd.key -out /tmp/http.csr -addext 'subjectAltName = DNS:_server.idm.example.com_, otherName:1.3.6.1.4.1.311.20.2.3;UTF8:HTTP/server.idm.example.com@IDM.EXAMPLE.COM' -subj '/O=IDM.EXAMPLE.COM/CN=server.idm.example.com'
      • Copy to Clipboard Toggle word wrap
        $ openssl req -new -newkey rsa:2048 -nodes -keyout /var/lib/ipa/private/httpd.key -out /tmp/http.csr -addext 'subjectAltName = DNS:server.idm.example.com, otherName:1.3.6.1.4.1.311.20.2.3;UTF8:HTTP/server.idm.example.com@IDM.EXAMPLE.COM' -subj '/O=IDM.EXAMPLE.COM/CN=server.idm.example.com'
    1. Copy to Clipboard Toggle word wrap
      $ openssl req -new -newkey rsa:2048 -nodes -keyout ~/ldap.key -out /tmp/ldap.csr -addext 'subjectAltName = DNS:server.idm.example.com, otherName:1.3.6.1.4.1.311.20.2.3;UTF8:ldap/server.idm.example.com@IDM.EXAMPLE.COM' -subj '/O=IDM.EXAMPLE.COM/CN=server.idm.example.com'
  1. Copy to Clipboard Toggle word wrap
    # cp /path/to/httpd.crt /var/lib/ipa/certs/
    1. Copy to Clipboard Toggle word wrap
      # certutil -d /etc/dirsrv/slapd-IDM-EXAMPLE-COM/ -L
      Certificate Nickname                                         Trust Attributes
                                                                   SSL,S/MIME,JAR/XPI
      
      Server-Cert                                                  u,u,u

    2. Copy to Clipboard Toggle word wrap
      # certutil -D -d /etc/dirsrv/slapd-IDM-EXAMPLE-COM/ -n 'Server-Cert' -f /etc/dirsrv/slapd-IDM-EXAMPLE-COM/pwdfile.txt
    3. Copy to Clipboard Toggle word wrap
      # openssl pkcs12 -export -in ldap.crt -inkey ldap.key -out ldap.p12 -name Server-Cert
    4. Copy to Clipboard Toggle word wrap
      # pk12util -i ldap.p12 -d /etc/dirsrv/slapd-IDM-EXAMPLE-COM/ -k /etc/dirsrv/slapd-IDM-EXAMPLE-COM/pwdfile.txt
    5. Copy to Clipboard Toggle word wrap
      # certutil -L -d /etc/dirsrv/slapd-IDM-EXAMPLE-COM/
  2. Copy to Clipboard Toggle word wrap
    # systemctl restart httpd.service
  3. Copy to Clipboard Toggle word wrap
    # systemctl restart dirsrv@IDM-EXAMPLE-COM.service
    1. Copy to Clipboard Toggle word wrap
      # ipa-server-certinstall -w --pin=password /var/lib/ipa/private/httpd.key /var/lib/ipa/certs/httpd.crt

    2. Copy to Clipboard Toggle word wrap
      # ipa-server-certinstall -d --pin=password /etc/dirsrv/slapd-IDM-EXAMPLE-COM/ldap.key /path/to/ldap.crt

    3. Copy to Clipboard Toggle word wrap
      # systemctl restart httpd.service
    4. Copy to Clipboard Toggle word wrap
      # systemctl restart dirsrv@IDM-EXAMPLE-COM.service

第76章

76.1.

  1. Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa-crlgen-manage status
    CRL generation: enabled
    Last CRL update: 2019-10-31 12:00:00
    Last CRL Number: 6
    The ipa-crlgen-manage command was successful
  2. Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa-crlgen-manage disable
    Stopping pki-tomcatd
    Editing /var/lib/pki/pki-tomcat/conf/ca/CS.cfg
    Starting pki-tomcatd
    Editing /etc/httpd/conf.d/ipa-pki-proxy.conf
    Restarting httpd
    CRL generation disabled on the local host. Please make sure to configure CRL generation on another master with ipa-crlgen-manage enable.
    The ipa-crlgen-manage command was successful
  3. Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa-crlgen-manage status

76.2.

  1. Copy to Clipboard Toggle word wrap
    [root@replica1 ~]# ipa-crlgen-manage enable
    Stopping pki-tomcatd
    Editing /var/lib/pki/pki-tomcat/conf/ca/CS.cfg
    Starting pki-tomcatd
    Editing /etc/httpd/conf.d/ipa-pki-proxy.conf
    Restarting httpd
    Forcing CRL update
    CRL generation enabled on the local host. Please make sure to have only a single CRL generation master.
    The ipa-crlgen-manage command was successful
  2. Copy to Clipboard Toggle word wrap
    [root@replica1 ~]# ipa-crlgen-manage status
    CRL generation: enabled
    Last CRL update: 2019-10-31 12:10:00
    Last CRL Number: 7
    The ipa-crlgen-manage command was successful

76.3.

  1. Copy to Clipboard Toggle word wrap
    # systemctl stop pki-tomcatd@pki-tomcat.service
  2. Copy to Clipboard Toggle word wrap
    ca.crl.MasterCRL.autoUpdateInterval=60
    注記

  3. Copy to Clipboard Toggle word wrap
    # systemctl start pki-tomcatd@pki-tomcat.service

第77章

注記

  1. Copy to Clipboard Toggle word wrap
    [user@server ~]$ kinit admin
    Password for admin@IDM.EXAMPLE.COM:
    1. Copy to Clipboard Toggle word wrap
      [user@server ~]$ ipa config-show | grep 'CA renewal'
        IPA CA renewal master: server.idm.example.com
    2. Copy to Clipboard Toggle word wrap
      [user@server ~]$ ipa-crlgen-manage status
      CRL generation: enabled
      Last CRL update: 2019-10-31 12:00:00
      Last CRL Number: 6
      The ipa-crlgen-manage command was successful

      Copy to Clipboard Toggle word wrap
      [user@replica ~]$ ipa-crlgen-manage status
      CRL generation: disabled
      The ipa-crlgen-manage command was successful

    3. Copy to Clipboard Toggle word wrap
      [user@server ~]$ ipa server-role-find --role 'CA server'
      ----------------------
      2 server roles matched
      ----------------------
        Server name: server.idm.example.com
        Role name: CA server
        Role status: enabled
        Server name: replica.idm.example.com
        Role name: CA server
        Role status: enabled
      ----------------------------
      Number of entries returned 2
      ----------------------------
  2. Copy to Clipboard Toggle word wrap
    [user@server ~]$ ipa config-mod --ca-renewal-master-server replica.idm.example.com
    1. Copy to Clipboard Toggle word wrap
      [root@server ~]# pki-server ca-config-set ca.certStatusUpdateInterval 0
    2. Copy to Clipboard Toggle word wrap
      [root@server ~]# ipactl restart
    1. Copy to Clipboard Toggle word wrap
      [root@replica ~]# pki-server ca-config-unset ca.certStatusUpdateInterval
    2. Copy to Clipboard Toggle word wrap
      [root@replica ~]# ipactl restart
  3. Copy to Clipboard Toggle word wrap
    [user@server ~]$ ipa-crlgen-manage disable
    Stopping pki-tomcatd
    Editing /var/lib/pki/pki-tomcat/conf/ca/CS.cfg
    Starting pki-tomcatd
    Editing /etc/httpd/conf.d/ipa-pki-proxy.conf
    Restarting httpd
    CRL generation disabled on the local host. Please make sure to configure CRL generation on another master with ipa-crlgen-manage enable.
    The ipa-crlgen-manage command was successful
  4. Copy to Clipboard Toggle word wrap
    [user@replica ~]$ ipa-crlgen-manage enable
    Stopping pki-tomcatd
    Editing /var/lib/pki/pki-tomcat/conf/ca/CS.cfg
    Starting pki-tomcatd
    Editing /etc/httpd/conf.d/ipa-pki-proxy.conf
    Restarting httpd
    Forcing CRL update
    CRL generation enabled on the local host. Please make sure to have only a single CRL generation master.
    The ipa-crlgen-manage command was successful
  5. Copy to Clipboard Toggle word wrap
    [root@server ~]# ipactl stop
  6. Copy to Clipboard Toggle word wrap
    [user@replica ~]$ ipa server-del server.idm.example.com
  7. Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa-server-install --uninstall
    ...
    Are you sure you want to continue with the uninstall procedure? [no]: yes

  • Copy to Clipboard Toggle word wrap
    [user@replica ~]$ ipa config-show | grep 'CA renewal'
      IPA CA renewal master: replica.idm.example.com
  • Copy to Clipboard Toggle word wrap
    [user@replica ~]$ ipa-crlgen-manage status
    CRL generation: enabled
    Last CRL update: 2019-10-31 12:10:00
    Last CRL Number: 7
    The ipa-crlgen-manage command was successful

第78章

78.1.

78.2.

    • Copy to Clipboard Toggle word wrap
      # ipa-getcert request -K HTTP/my_company.idm.example.com -k /etc/pki/tls/private/httpd.key -f /etc/pki/tls/certs/httpd.pem -g 2048 -D my_company.idm.example.com -C "systemctl restart httpd"
      New signing request "20190604065735" added.

      注記

  1. Copy to Clipboard Toggle word wrap
    # ipa-getcert list -f /etc/pki/tls/certs/httpd.pem
    Number of certificates and requests being tracked: 3.
    Request ID '20190604065735':
        status: MONITORING
        stuck: no
        key pair storage: type=FILE,location='/etc/pki/tls/private/httpd.key'
        certificate: type=FILE,location='/etc/pki/tls/certs/httpd.crt'
        CA: IPA
    [...]

78.3.

図78.1

図78.2

図78.3

図78.4

図78.5

78.4.

    • Copy to Clipboard Toggle word wrap
      # getcert list -i 20190408143846 -v
      Number of certificates and requests being tracked: 16.
      Request ID '20190408143846':
      	status: MONITORING
      	stuck: no
      	key pair storage: type=NSSDB,location='/etc/dirsrv/slapd-IDM-EXAMPLE-COM',nickname='Server-Cert',token='NSS Certificate DB',pinfile='/etc/dirsrv/slapd-IDM-EXAMPLE-COM/pwdfile.txt'
      	certificate: type=NSSDB,location='/etc/dirsrv/slapd-IDM-EXAMPLE-COM',nickname='Server-Cert',token='NSS Certificate DB'
      	CA: IPA
      	issuer: CN=Certificate Authority,O=IDM.EXAMPLE.COM
      	subject: CN=r8server.idm.example.com,O=IDM.EXAMPLE.COM
      	expires: 2021-04-08 16:38:47 CEST
      	dns: r8server.idm.example.com
      	principal name: ldap/server.idm.example.com@IDM.EXAMPLE.COM
      	key usage: digitalSignature,nonRepudiation,keyEncipherment,dataEncipherment
      	eku: id-kp-serverAuth,id-kp-clientAuth
      	pre-save command:
      	post-save command: /usr/libexec/ipa/certmonger/restart_dirsrv IDM-EXAMPLE-COM
      	track: true
      	auto-renew: true

  • Copy to Clipboard Toggle word wrap
    # getcert list

78.5.

  • Copy to Clipboard Toggle word wrap
    # getcert stop-tracking -i 20190408143846

  • Copy to Clipboard Toggle word wrap
    # getcert start-tracking -c IPA -f /tmp/some_cert.crt -k /tmp/some_key.key

注記

78.6.

  • Copy to Clipboard Toggle word wrap
    # getcert resubmit -i 20190408143846

78.7.

  1. Copy to Clipboard Toggle word wrap
    # export NSSDB_PIN=$(sed -n 's/^internal=//p' /var/lib/pki/pki-tomcat/conf/password.conf)
  2. Copy to Clipboard Toggle word wrap
    # getcert start-tracking -d /etc/pki/pki-tomcat/alias -n "caSigningCert cert-pki-ca" -c 'dogtag-ipa-ca-renew-agent' -P $NSSDB_PIN -B /usr/libexec/ipa/certmonger/stop_pkicad -C '/usr/libexec/ipa/certmonger/renew_ca_cert "caSigningCert cert-pki-ca"' -T caCACert
    
    # getcert start-tracking -d /etc/pki/pki-tomcat/alias -n "auditSigningCert cert-pki-ca" -c 'dogtag-ipa-ca-renew-agent' -P $NSSDB_PIN -B /usr/libexec/ipa/certmonger/stop_pkicad -C '/usr/libexec/ipa/certmonger/renew_ca_cert "auditSigningCert cert-pki-ca"' -T caSignedLogCert
    
    # getcert start-tracking -d /etc/pki/pki-tomcat/alias -n "ocspSigningCert cert-pki-ca" -c 'dogtag-ipa-ca-renew-agent' -P $NSSDB_PIN -B /usr/libexec/ipa/certmonger/stop_pkicad -C '/usr/libexec/ipa/certmonger/renew_ca_cert "ocspSigningCert cert-pki-ca"' -T caOCSPCert
    
    # getcert start-tracking -d /etc/pki/pki-tomcat/alias -n "subsystemCert cert-pki-ca" -c 'dogtag-ipa-ca-renew-agent' -P $NSSDB_PIN -B /usr/libexec/ipa/certmonger/stop_pkicad -C '/usr/libexec/ipa/certmonger/renew_ca_cert "subsystemCert cert-pki-ca"' -T caSubsystemCert
    
    # getcert start-tracking -d /etc/pki/pki-tomcat/alias -n "Server-Cert cert-pki-ca" -c 'dogtag-ipa-ca-renew-agent' -P $NSSDB_PIN -B /usr/libexec/ipa/certmonger/stop_pkicad -C '/usr/libexec/ipa/certmonger/renew_ca_cert "Server-Cert cert-pki-ca"' -T caServerCert
  3. Copy to Clipboard Toggle word wrap
    # getcert start-tracking -f /var/lib/ipa/certs/httpd.crt -k /var/lib/ipa/private/httpd.key -p /var/lib/ipa/passwds/idm.example.com-443-RSA -c IPA -C /usr/libexec/ipa/certmonger/restart_httpd -T caIPAserviceCert
    
    # getcert start-tracking -d /etc/dirsrv/slapd-IDM-EXAMPLE-COM -n "Server-Cert" -c IPA -p /etc/dirsrv/slapd-IDM-EXAMPLE-COM/pwdfile.txt -C '/usr/libexec/ipa/certmonger/restart_dirsrv "IDM-EXAMPLE-COM"' -T caIPAserviceCert
    
    # getcert start-tracking -f /var/lib/ipa/ra-agent.pem -k /var/lib/ipa/ra-agent.key -c dogtag-ipa-ca-renew-agent -B /usr/libexec/ipa/certmonger/renew_ra_cert_pre -C /usr/libexec/ipa/certmonger/renew_ra_cert -T caSubsystemCert
    
    # getcert start-tracking -f /var/kerberos/krb5kdc/kdc.crt -k /var/kerberos/krb5kdc/kdc.key -c dogtag-ipa-ca-renew-agent -B /usr/libexec/ipa/certmonger/renew_ra_cert_pre -C /usr/libexec/ipa/certmonger/renew_kdc_cert -T KDCs_PKINIT_Certs
  4. Copy to Clipboard Toggle word wrap
    # systemctl restart certmonger
  5. Copy to Clipboard Toggle word wrap
    # getcert list

78.8.

78.8.1.

78.8.2.

  1. Copy to Clipboard Toggle word wrap
    [root@client.idm.example.com ~]# getcert add-scep-ca -c SCEP_example -u SCEP_URL
    • 重要

  2. Copy to Clipboard Toggle word wrap
    [root@client.idm.example.com ~]# getcert list-cas -c SCEP_example
    CA 'SCEP_example':
           is-default: no
           ca-type: EXTERNAL
           helper-location: /usr/libexec/certmonger/scep-submit -u http://SCEP_server_enrollment_interface_URL
           SCEP CA certificate thumbprint (MD5): A67C2D4B 771AC186 FCCA654A 5E55AAF7
           SCEP CA certificate thumbprint (SHA1): FBFF096C 6455E8E9 BD55F4A5 5787C43F 1F512279

    • Copy to Clipboard Toggle word wrap
      [root@client.idm.example.com ~]# getcert request -I Example_Task -c SCEP_example -d /etc/pki/nssdb -n ExampleCert -N cn="client.idm.example.com" -L one-time_PIN -D client.idm.example.com

    • Copy to Clipboard Toggle word wrap
      [root@client.idm.example.com ~]# getcert request -I Example_Task -c SCEP_example -f /etc/pki/tls/certs/server.crt -k /etc/pki/tls/private/private.key -N cn="client.idm.example.com" -L one-time_PIN -D client.idm.example.com

    • Copy to Clipboard Toggle word wrap
      [root@client.idm.example.com ~]# getcert list -I Example_Task
      	Request ID 'Example_Task':
              status: MONITORING
              stuck: no
              key pair storage: type=NSSDB,location='/etc/pki/nssdb',nickname='ExampleCert',token='NSS Certificate DB'
              certificate: type=NSSDB,location='/etc/pki/nssdb',nickname='ExampleCert',token='NSS Certificate DB'
              signing request thumbprint (MD5): 503A8EDD DE2BE17E 5BAA3A57 D68C9C1B
              signing request thumbprint (SHA1): B411ECE4 D45B883A 75A6F14D 7E3037F1 D53625F4
              CA: IPA
              issuer: CN=Certificate Authority,O=EXAMPLE.COM
              subject: CN=client.idm.example.com,O=EXAMPLE.COM
              expires: 2018-05-06 10:28:06 UTC
              key usage: digitalSignature,keyEncipherment
              eku: iso.org.dod.internet.security.mechanisms.8.2.2
              certificate template/profile: IPSECIntermediateOffline
              pre-save command:
              post-save command:
              track: true
      	auto-renew: true
    • Copy to Clipboard Toggle word wrap
      [root@client.idm.example.com ~]# getcert list -I Example_Task
      Request ID 'Example_Task':
             status: MONITORING
             stuck: no
             key pair storage: type=FILE,location='/etc/pki/tls/private/private.key'
             certificate: type=FILE,location='/etc/pki/tls/certs/server.crt'
             CA: IPA
             issuer: CN=Certificate Authority,O=EXAMPLE.COM
             subject: CN=client.idm.example.com,O=EXAMPLE.COM
             expires: 2018-05-06 10:28:06 UTC
             eku: id-kp-serverAuth,id-kp-clientAuth
             pre-save command:
             post-save command:
             track: true
             auto-renew: true

78.8.3.

注記

  1. Copy to Clipboard Toggle word wrap
    [scep]
    challenge_password_otp = yes
  2. Copy to Clipboard Toggle word wrap
    # systemctl restart certmonger

第79章

79.1.

  1. Copy to Clipboard Toggle word wrap
    ---
    - name: Create certificates
      hosts: managed-node-01.example.com
      tasks:
        - name: Create a self-signed certificate
          ansible.builtin.include_role:
            name: redhat.rhel_system_roles.certificate
          vars:
            certificate_requests:
              - name: web-server
                ca: ipa
                dns: www.example.com
                principal: HTTP/www.example.com@EXAMPLE.COM
                run_before: systemctl stop httpd.service
                run_after: systemctl start httpd.service

  2. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --syntax-check ~/playbook.yml

  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook ~/playbook.yml

  • Copy to Clipboard Toggle word wrap
    # ansible managed-node-01.example.com -m command -a 'getcert list'
    ...
    Number of certificates and requests being tracked: 1.
    Request ID '20240918142211':
            status: MONITORING
            stuck: no
            key pair storage: type=FILE,location='/etc/pki/tls/private/web-server.key'
            certificate: type=FILE,location='/etc/pki/tls/certs/web-server.crt'
            CA: IPA
            issuer: CN=Certificate Authority,O=EXAMPLE.COM
            subject: CN=www.example.com
            issued: 2024-09-18 16:22:11 CEST
            expires: 2025-09-18 16:22:10 CEST
            dns: www.example.com
            key usage: digitalSignature,keyEncipherment
            eku: id-kp-serverAuth,id-kp-clientAuth
            pre-save command: systemctl stop httpd.service
            post-save command: systemctl start httpd.service
            track: yes
            auto-renew: yes

79.2.

  1. Copy to Clipboard Toggle word wrap
    ---
    - name: Create certificates
      hosts: managed-node-01.example.com
      tasks:
        - name: Create a self-signed certificate
          ansible.builtin.include_role:
            name: redhat.rhel_system_roles.certificate
          vars:
            certificate_requests:
              - name: web-server
                ca: self-sign
                dns: test.example.com

  2. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --syntax-check ~/playbook.yml

  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook ~/playbook.yml

  • Copy to Clipboard Toggle word wrap
    # ansible managed-node-01.example.com -m command -a 'getcert list'
    ...
    Number of certificates and requests being tracked: 1.
    Request ID '20240918133610':
    	status: MONITORING
    	stuck: no
    	key pair storage: type=FILE,location='/etc/pki/tls/private/web-server.key'
    	certificate: type=FILE,location='/etc/pki/tls/certs/web-server.crt'
    	CA: local
    	issuer: CN=c32b16d7-5b1a4c5a-a953a711-c3ca58fb,CN=Local Signing Authority
    	subject: CN=test.example.com
    	issued: 2024-09-18 15:36:10 CEST
    	expires: 2025-09-18 15:36:09 CEST
    	dns: test.example.com
    	key usage: digitalSignature,keyEncipherment
    	eku: id-kp-serverAuth,id-kp-clientAuth
    	pre-save command:
    	post-save command:
    	track: yes
    	auto-renew: yes

第80章

80.1.

注記

80.1.1.

  1. Copy to Clipboard Toggle word wrap
    [root@ipaserver ~]# ipa-certupdate
    重要

  • Copy to Clipboard Toggle word wrap
    [root@ipaserver ~]# certutil -d /etc/pki/pki-tomcat/alias/ -L
    
    Certificate Nickname                      Trust Attributes
                                              SSL,S/MIME,JAR/XPI
    
    caSigningCert cert-pki-ca                 CTu,Cu,Cu
    Server-Cert cert-pki-ca                   u,u,u
    auditSigningCert cert-pki-ca              u,u,Pu
    caSigningCert cert-pki-ca ba83f324-5e50-4114-b109-acca05d6f1dc u,u,u
    ocspSigningCert cert-pki-ca               u,u,u
    subsystemCert cert-pki-ca                 u,u,u
    注記

80.1.2.

注記

  1. 図80.1

80.1.3.

  1. Copy to Clipboard Toggle word wrap
    [root@ipaserver ~]# ipa ca-add webserver-ca --subject="CN=WEBSERVER,O=IDM.EXAMPLE.COM"
    -------------------
    Created CA "webserver-ca"
    -------------------
      Name: webserver-ca
      Authority ID: ba83f324-5e50-4114-b109-acca05d6f1dc
      Subject DN: CN=WEBSERVER,O=IDM.EXAMPLE.COM
      Issuer DN: CN=Certificate Authority,O=IDM.EXAMPLE.COM
  2. Copy to Clipboard Toggle word wrap
    [root@ipaserver ~]# ipa ca-add webclient-ca --subject="CN=WEBCLIENT,O=IDM.EXAMPLE.COM"
    -------------------
    Created CA "webclient-ca"
    -------------------
      Name: webclient-ca
      Authority ID: 8a479f3a-0454-4a4d-8ade-fd3b5a54ab2e
      Subject DN: CN=WEBCLIENT,O=IDM.EXAMPLE.COM
      Issuer DN: CN=Certificate Authority,O=IDM.EXAMPLE.COM
  3. Copy to Clipboard Toggle word wrap
    [root@ipaserver ~]# ipa-certupdate
    重要

  • Copy to Clipboard Toggle word wrap
    [root@ipaserver ~]# certutil -d /etc/pki/pki-tomcat/alias/ -L
    
    Certificate Nickname                      Trust Attributes
                                              SSL,S/MIME,JAR/XPI
    
    caSigningCert cert-pki-ca                 CTu,Cu,Cu
    Server-Cert cert-pki-ca                   u,u,u
    auditSigningCert cert-pki-ca              u,u,Pu
    caSigningCert cert-pki-ca ba83f324-5e50-4114-b109-acca05d6f1dc u,u,u
    ocspSigningCert cert-pki-ca               u,u,u
    subsystemCert cert-pki-ca                 u,u,u
    注記

80.1.4.

  1. Copy to Clipboard Toggle word wrap
    [root@ipaserver ~]# ipa ca-find
    -------------
    3 CAs matched
    -------------
      Name: ipa
      Description: IPA CA
      Authority ID: 5195deaf-3b61-4aab-b608-317aff38497c
      Subject DN: CN=Certificate Authority,O=IPA.TEST
      Issuer DN: CN=Certificate Authority,O=IPA.TEST
    
      Name: webclient-ca
      Authority ID: 605a472c-9c6e-425e-b959-f1955209b092
      Subject DN: CN=WEBCLIENT,O=IDM.EXAMPLE.COM
      Issuer DN: CN=Certificate Authority,O=IPA.TEST
    
     Name: webserver-ca
      Authority ID: 02d537f9-c178-4433-98ea-53aa92126fc3
      Subject DN: CN=WEBSERVER,O=IDM.EXAMPLE.COM
      Issuer DN: CN=Certificate Authority,O=IPA.TEST
    ----------------------------
    Number of entries returned 3
    ----------------------------
  2. Copy to Clipboard Toggle word wrap
    ipa ca-disable webserver-ca
    --------------------------
    Disabled CA "webserver-ca"
    --------------------------

80.1.5.

注記

  1. Copy to Clipboard Toggle word wrap
    # ipa ca-find
    -------------
    3 CAs matched
    -------------
      Name: ipa
      Description: IPA CA
      Authority ID: 5195deaf-3b61-4aab-b608-317aff38497c
      Subject DN: CN=Certificate Authority,O=IPA.TEST
      Issuer DN: CN=Certificate Authority,O=IPA.TEST
    
      Name: webclient-ca
      Authority ID: 605a472c-9c6e-425e-b959-f1955209b092
      Subject DN: CN=WEBCLIENT,O=IDM.EXAMPLE.COM
      Issuer DN: CN=Certificate Authority,O=IPA.TEST
    
     Name: webserver-ca
      Authority ID: 02d537f9-c178-4433-98ea-53aa92126fc3
      Subject DN: CN=WEBSERVER,O=IDM.EXAMPLE.COM
      Issuer DN: CN=Certificate Authority,O=IPA.TEST
    ----------------------------
    Number of entries returned 3
    ----------------------------
  2. Copy to Clipboard Toggle word wrap
    # ipa ca-disable webserver-ca
    --------------------------
    Disabled CA "webserver-ca"
    --------------------------
  3. Copy to Clipboard Toggle word wrap
    # ipa ca-del webserver-ca
    -------------------------
    Deleted CA "webserver-ca"
    -------------------------

  • Copy to Clipboard Toggle word wrap
    # ipa ca-find
    -------------
    2 CAs matched
    -------------
      Name: ipa
      Description: IPA CA
      Authority ID: 5195deaf-3b61-4aab-b608-317aff38497c
      Subject DN: CN=Certificate Authority,O=IPA.TEST
      Issuer DN: CN=Certificate Authority,O=IPA.TEST
    
      Name: webclient-ca
      Authority ID: 605a472c-9c6e-425e-b959-f1955209b092
      Subject DN: CN=WEBCLIENT,O=IDM.EXAMPLE.COM
      Issuer DN: CN=Certificate Authority,O=IPA.TEST
    ----------------------------
    Number of entries returned 2
    ----------------------------

80.2.

  1. 図80.2

  2. Copy to Clipboard Toggle word wrap
    # mv path/to/the/downloaded/certificate /etc/pki/tls/private/sub-ca.crt

80.3.

80.3.1.

  1. Copy to Clipboard Toggle word wrap
    $ ipa caacl-find
    -----------------
    1 CA ACL matched
    -----------------
      ACL name: hosts_services_caIPAserviceCert
      Enabled: TRUE
  2. Copy to Clipboard Toggle word wrap
    $ ipa caacl-show hosts_services_caIPAserviceCert
      ACL name: hosts_services_caIPAserviceCert
      Enabled: TRUE
      Host category: all
      Service category: all
      CAs: ipa
      Profiles: caIPAserviceCert
      Users: admin

80.3.2.

  1. Copy to Clipboard Toggle word wrap
    $ ipa caacl-add TLS_web_server_authentication
    --------------------------------------------
    Added CA ACL "TLS_web_server_authentication"
    --------------------------------------------
      ACL name: TLS_web_server_authentication
      Enabled: TRUE
  2. Copy to Clipboard Toggle word wrap
    $ ipa caacl-mod TLS_web_server_authentication --desc="CAACL for web servers authenticating to web clients using certificates issued by webserver-ca"
    -----------------------------------------------
    Modified CA ACL "TLS_web_server_authentication"
    -----------------------------------------------
      ACL name: TLS_web_server_authentication
      Description: CAACL for web servers authenticating to web clients using certificates issued by webserver-ca
      Enabled: TRUE
  3. Copy to Clipboard Toggle word wrap
    $ ipa caacl-add-ca TLS_web_server_authentication --ca=webserver-ca
      ACL name: TLS_web_server_authentication
      Description: CAACL for web servers authenticating to web clients using certificates issued by webserver-ca
      Enabled: TRUE
      CAs: webserver-ca
    -------------------------
    Number of members added 1
    -------------------------
  4. Copy to Clipboard Toggle word wrap
    $ ipa caacl-add-service TLS_web_server_authentication --service=HTTP/my_company.idm.example.com@IDM.EXAMPLE.COM
      ACL name: TLS_web_server_authentication
      Description: CAACL for web servers authenticating to web clients using certificates issued by webserver-ca
      Enabled: TRUE
      CAs: webserver-ca
      Services: HTTP/my_company.idm.example.com@IDM.EXAMPLE.COM
    -------------------------
    Number of members added 1
    -------------------------
  5. Copy to Clipboard Toggle word wrap
    $ ipa caacl-add-profile TLS_web_server_authentication --certprofiles=caIPAserviceCert
      ACL name: TLS_web_server_authentication
      Description: CAACL for web servers authenticating to web clients using certificates issued by webserver-ca
      Enabled: TRUE
      CAs: webserver-ca
      Profiles: caIPAserviceCert
      Services: HTTP/my_company.idm.example.com@IDM.EXAMPLE.COM
    -------------------------
    Number of members added 1
    -------------------------

注記

80.3.3.

  1. Copy to Clipboard Toggle word wrap
    $ ipa caacl-add TLS_web_client_authentication
    --------------------------------------------
    Added CA ACL "TLS_web_client_authentication"
    --------------------------------------------
      ACL name: TLS_web_client_authentication
      Enabled: TRUE
  2. Copy to Clipboard Toggle word wrap
    $ ipa caacl-mod TLS_web_client_authentication --desc="CAACL for user web browsers authenticating to web servers using certificates issued by webclient-ca"
    -----------------------------------------------
    Modified CA ACL "TLS_web_client_authentication"
    -----------------------------------------------
      ACL name: TLS_web_client_authentication
      Description: CAACL for user web browsers authenticating to web servers using certificates issued by webclient-ca
      Enabled: TRUE
  3. Copy to Clipboard Toggle word wrap
    $ ipa caacl-add-ca TLS_web_client_authentication --ca=webclient-ca
      ACL name: TLS_web_client_authentication
      Description: CAACL for user web browsers authenticating to web servers using certificates issued by webclient-ca
      Enabled: TRUE
      CAs: webclient-ca
    -------------------------
    Number of members added 1
    -------------------------
  4. Copy to Clipboard Toggle word wrap
    $ ipa caacl-add-profile TLS_web_client_authentication --certprofiles=IECUserRoles
      ACL name: TLS_web_client_authentication
      Description: CAACL for user web browsers authenticating to web servers using certificates issued by webclient-ca
      Enabled: TRUE
      CAs: webclient-ca
      Profiles: IECUserRoles
    -------------------------
    Number of members added 1
    -------------------------
  5. Copy to Clipboard Toggle word wrap
    $ ipa caacl-mod TLS_web_client_authentication --usercat=all
    -----------------------------------------------
    Modified CA ACL "TLS_web_client_authentication"
    -----------------------------------------------
      ACL name: TLS_web_client_authentication
      Description: CAACL for user web browsers authenticating to web servers using certificates issued by webclient-ca
      Enabled: TRUE
      User category: all
      CAs: webclient-ca
      Profiles: IECUserRoles

注記

80.4.

    • Copy to Clipboard Toggle word wrap
      # ipa-getcert request -K HTTP/my_company.idm.example.com -k /etc/pki/tls/private/httpd.key -f /etc/pki/tls/certs/httpd.pem -g 2048 -D my_company.idm.example.com -X webserver-ca -C "systemctl restart httpd"
      New signing request "20190604065735" added.

      注記

  1. Copy to Clipboard Toggle word wrap
    # ipa-getcert list -f /etc/pki/tls/certs/httpd.pem
    Number of certificates and requests being tracked: 3.
    Request ID '20190604065735':
        status: MONITORING
        stuck: no
        key pair storage: type=FILE,location='/etc/pki/tls/private/httpd.key'
        certificate: type=FILE,location='/etc/pki/tls/certs/httpd.crt'
        CA: IPA
        issuer: CN=WEBSERVER,O=IDM.EXAMPLE.COM
    
    [...]

80.5.

図80.3

図80.4

図80.5

図80.6

図80.7

80.6.

  1. Copy to Clipboard Toggle word wrap
    # yum install httpd
  2. Copy to Clipboard Toggle word wrap
    # firewall-cmd --permanent --add-port=80/tcp
    # firewall-cmd --reload
  3. Copy to Clipboard Toggle word wrap
    # systemctl enable --now httpd
  4. 注記

80.7.

  1. Copy to Clipboard Toggle word wrap
    # yum install mod_ssl
    1. Copy to Clipboard Toggle word wrap
      ServerName my_company.idm.example.com
    重要

    1. Copy to Clipboard Toggle word wrap
      ServerAlias www.my_company.idm.example.com server.my_company.idm.example.com
    2. Copy to Clipboard Toggle word wrap
      SSLCertificateKeyFile "/etc/pki/tls/private/httpd.key"
      SSLCertificateFile "/etc/pki/tls/certs/httpd.pem"
      SSLCACertificateFile "/etc/pki/tls/certs/ca.crt"
  2. Copy to Clipboard Toggle word wrap
    # chown root:root /etc/pki/tls/private/httpd.key
    # chmod 600 //etc/pki/tls/private/httpd.key
    警告

  3. Copy to Clipboard Toggle word wrap
    # firewall-cmd --permanent --add-port=443/tcp
    # firewall-cmd --reload
  4. Copy to Clipboard Toggle word wrap
    # systemctl restart httpd
    注記

80.8.

  1. Copy to Clipboard Toggle word wrap
    SSLProtocol -All TLSv1.3
  2. Copy to Clipboard Toggle word wrap
    # systemctl restart httpd

  1. Copy to Clipboard Toggle word wrap
    # openssl s_client -connect example.com:443 -tls1_3
  2. Copy to Clipboard Toggle word wrap
    # openssl s_client -connect example.com:443 -tls1_2

    Copy to Clipboard Toggle word wrap
    140111600609088:error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version:ssl/record/rec_layer_s3.c:1543:SSL alert number 70

80.9.

  1. Copy to Clipboard Toggle word wrap
    SSLCipherSuite "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:!SHA1:!SHA256"

  2. Copy to Clipboard Toggle word wrap
    # systemctl restart httpd

    1. Copy to Clipboard Toggle word wrap
      # yum install nmap
    2. Copy to Clipboard Toggle word wrap
      # nmap --script ssl-enum-ciphers -p 443 example.com
      ...
      PORT    STATE SERVICE
      443/tcp open  https
      | ssl-enum-ciphers:
      |   TLSv1.2:
      |     ciphers:
      |       TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (ecdh_x25519) - A
      |       TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 2048) - A
      |       TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (ecdh_x25519) - A
      ...

80.10.

重要

  1. Copy to Clipboard Toggle word wrap
    <Directory "/var/www/html/Example/">
      SSLVerifyClient require
    </Directory>

  2. Copy to Clipboard Toggle word wrap
    # systemctl restart httpd

  1. Copy to Clipboard Toggle word wrap
    $ curl https://my_company.idm.example.com/Example/
    curl: (56) OpenSSL SSL_read: error:1409445C:SSL routines:ssl3_read_bytes:tlsv13 alert certificate required, errno 0

  2. Copy to Clipboard Toggle word wrap
    $ curl --cacert ca.crt --key client.key --cert client.crt https://my_company.idm.example.com/Example/

80.11.

  1. Copy to Clipboard Toggle word wrap
    # mkdir ~/certdb/
    # certutil -N -d ~/certdb/
    Enter a password which will be used to encrypt your keys.
    The password should be at least 8 characters long,
    and should contain at least one non-alphabetic character.
    
    Enter new password:
    Re-enter password:
  2. Copy to Clipboard Toggle word wrap
    # certutil -R -d ~/certdb/ -a -g 4096 -n idm_user -s "CN=idm_user,O=IDM.EXAMPLE.COM" > certificate_request.csr
  3. Copy to Clipboard Toggle word wrap
    Enter Password or Pin for "NSS Certificate DB":
    
    A random seed must be generated that will be used in the
    creation of your key.  One of the easiest ways to create a
    random seed is to use the timing of keystrokes on a keyboard.
    
    To begin, type keys on the keyboard until this progress meter
    is full.  DO NOT USE THE AUTOREPEAT FUNCTION ON YOUR KEYBOARD!
    
    
    Continue typing until the progress meter is full:
  4. Copy to Clipboard Toggle word wrap
    # ipa cert-request certificate_request.csr --principal=idm_user@IDM.EXAMPLE.COM --profile-id=IECUserRoles --ca=webclient-ca --certificate-out=~/idm_user.pem
  5. Copy to Clipboard Toggle word wrap
    # certutil -A -d ~/certdb/ -n idm_user -t "P,," -i ~/idm_user.pem
  6. Copy to Clipboard Toggle word wrap
    # certutil -K -d ~/certdb/
    < 0> rsa      5ad14d41463b87a095b1896cf0068ccc467df395   NSS Certificate DB:idm_user
  7. Copy to Clipboard Toggle word wrap
    # pk12util -d ~/certdb -o ~/idm_user.p12 -n idm_user
    Enter Password or Pin for "NSS Certificate DB":
    Enter password for PKCS12 file:
    Re-enter password:
    pk12util: PKCS12 EXPORT SUCCESSFUL
  8. Copy to Clipboard Toggle word wrap
    # scp ~/idm_user.p12 idm_user@client.idm.example.com:/home/idm_user/
  9. Copy to Clipboard Toggle word wrap
    # chmod o-rwx /home/idm_user/
  10. Copy to Clipboard Toggle word wrap
    # rm ~/certdb/
    # rm ~/idm_user.p12

80.12.

  1. 図80.8

  2. 図80.9

    1. 図80.10

    2. 図80.11

第82章

82.1.

 

注記

注記

82.2.

注記

Copy to Clipboard Toggle word wrap
$ ipa vault-show my_vault
  Vault name: my_vault
  Type: standard
  Owner users: user
  Vault user: user

82.3.

82.4.

表82.1
    

82.5.

表82.2
   

82.6.

注記

表82.3
  

Copy to Clipboard Toggle word wrap
[admin@server ~]$ ipa vault-show user_vault
ipa: ERROR: user_vault: vault not found

Copy to Clipboard Toggle word wrap
[admin@server ~]$ ipa vault-show shared_vault
ipa: ERROR: shared_vault: vault not found

82.7.

  • Copy to Clipboard Toggle word wrap
    # ipa-kra-install
重要

注記

第83章

83.1.

  1. Copy to Clipboard Toggle word wrap
    $ kinit idm_user
  2. Copy to Clipboard Toggle word wrap
    $ ipa vault-add my_vault --type standard
    ----------------------
    Added vault "my_vault"
    ----------------------
      Vault name: my_vault
      Type: standard
      Owner users: idm_user
      Vault user: idm_user
    重要

  3. Copy to Clipboard Toggle word wrap
    $ ipa vault-archive my_vault --in secret.txt
    -----------------------------------
    Archived data into vault "my_vault"
    -----------------------------------

83.2.

  1. Copy to Clipboard Toggle word wrap
    $ ssh idm_user@idm_client.idm.example.com
  2. Copy to Clipboard Toggle word wrap
    $ kinit user
  3. Copy to Clipboard Toggle word wrap
    $ ipa vault-retrieve my_vault --out secret_exported.txt
    --------------------------------------
    Retrieved data from vault "my_vault"
    --------------------------------------

83.3.

第84章

84.1.

  1. Copy to Clipboard Toggle word wrap
    $ cd /usr/share/doc/ansible-freeipa/playbooks/vault
  2. Copy to Clipboard Toggle word wrap
    $ touch inventory.file
  3. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  4. Copy to Clipboard Toggle word wrap
    $ cp ensure-standard-vault-is-present.yml ensure-standard-vault-is-present-copy.yml
    Copy to Clipboard Toggle word wrap
    ---
    - name: Tests
      hosts: ipaserver
      gather_facts: false
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - ipavault:
          ipaadmin_principal: idm_user
          ipaadmin_password: idm_user_password
          user: idm_user
          name: my_vault
          vault_type: standard
  5. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-standard-vault-is-present-copy.yml

84.2.

  1. Copy to Clipboard Toggle word wrap
    $ cd /usr/share/doc/ansible-freeipa/playbooks/vault
  2. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cp data-archive-in-symmetric-vault.yml data-archive-in-standard-vault-copy.yml
    Copy to Clipboard Toggle word wrap
    ---
    - name: Tests
      hosts: ipaserver
      gather_facts: false
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - ipavault:
          ipaadmin_principal: idm_user
          ipaadmin_password: idm_user_password
          user: idm_user
          name: my_vault
          in: /usr/share/doc/ansible-freeipa/playbooks/vault/password.txt
          action: member
  4. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file data-archive-in-standard-vault-copy.yml

84.3.

  1. Copy to Clipboard Toggle word wrap
    $ cd /usr/share/doc/ansible-freeipa/playbooks/vault
  2. Copy to Clipboard Toggle word wrap
    [ipahost]
    host01.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cp retrive-data-symmetric-vault.yml retrieve-data-standard-vault.yml-copy.yml
    Copy to Clipboard Toggle word wrap
    ---
    - name: Tests
      hosts: ipahost
      gather_facts: false
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - ipavault:
          ipaadmin_principal: idm_user
          ipaadmin_password: idm_user_password
          user: idm_user
          name: my_vault
          out: /tmp/password_exported.txt
          state: retrieved
  4. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file retrieve-data-standard-vault.yml-copy.yml

  1. Copy to Clipboard Toggle word wrap
    $ ssh user01@host01.idm.example.com
  2. Copy to Clipboard Toggle word wrap
    $ vim /tmp/password_exported.txt

第85章

85.1.

  1. Copy to Clipboard Toggle word wrap
    $ kinit admin
    1. Copy to Clipboard Toggle word wrap
      $ openssl genrsa -out service-private.pem 2048
      Generating RSA private key, 2048 bit long modulus
      .+++
      ...........................................+++
      e is 65537 (0x10001)
    2. Copy to Clipboard Toggle word wrap
      $ openssl rsa -in service-private.pem -out service-public.pem -pubout
      writing RSA key
  2. Copy to Clipboard Toggle word wrap
    $ ipa vault-add secret_vault --service HTTP/webserver.idm.example.com --type asymmetric --public-key-file service-public.pem
    ----------------------------
    Added vault "secret_vault"
    ----------------------------
    Vault name: secret_vault
    Type: asymmetric
    Public key: LS0tLS1C...S0tLS0tCg==
    Owner users: admin
    Vault service: HTTP/webserver.idm.example.com@IDM.EXAMPLE.COM

  3. Copy to Clipboard Toggle word wrap
    $ ipa vault-archive secret_vault --service HTTP/webserver.idm.example.com --in private-key-to-an-externally-signed-certificate.pem
    -----------------------------------
    Archived data into vault "secret_vault"
    -----------------------------------

85.2.

  1. Copy to Clipboard Toggle word wrap
    $ kinit admin
  2. Copy to Clipboard Toggle word wrap
    # kinit HTTP/webserver.idm.example.com -k -t /etc/httpd/conf/ipa.keytab
  3. Copy to Clipboard Toggle word wrap
    $ ipa vault-retrieve secret_vault --service HTTP/webserver.idm.example.com --private-key-file service-private.pem --out secret.txt
    ------------------------------------
    Retrieved data from vault "secret_vault"
    ------------------------------------

85.3.

  1. Copy to Clipboard Toggle word wrap
    $ ipa vault-archive secret_vault --service HTTP/webserver.idm.example.com --in new-private-key-to-an-externally-signed-certificate.pem
    -----------------------------------
    Archived data into vault "secret_vault"
    -----------------------------------

85.4.

第86章

86.1.

  1. Copy to Clipboard Toggle word wrap
    $ cd /usr/share/doc/ansible-freeipa/playbooks/vault
    1. Copy to Clipboard Toggle word wrap
      $ openssl genrsa -out service-private.pem 2048
      Generating RSA private key, 2048 bit long modulus
      .+++
      ...........................................+++
      e is 65537 (0x10001)
    2. Copy to Clipboard Toggle word wrap
      $ openssl rsa -in service-private.pem -out service-public.pem -pubout
      writing RSA key
  2. Copy to Clipboard Toggle word wrap
    $ touch inventory.file
  3. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  4. Copy to Clipboard Toggle word wrap
    $ cp ensure-asymmetric-vault-is-present.yml ensure-asymmetric-service-vault-is-present-copy.yml
    Copy to Clipboard Toggle word wrap
    ---
    - name: Tests
      hosts: ipaserver
      gather_facts: false
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Copy public key to ipaserver.
        copy:
          src: /path/to/service-public.pem
          dest: /usr/share/doc/ansible-freeipa/playbooks/vault/service-public.pem
          mode: 0600
      - name: Add data to vault, from a LOCAL file.
        ipavault:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: secret_vault
          vault_type: asymmetric
          service: HTTP/webserver1.idm.example.com
          public_key_file: /usr/share/doc/ansible-freeipa/playbooks/vault/service-public.pem
  5. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-asymmetric-service-vault-is-present-copy.yml

86.2.

  1. Copy to Clipboard Toggle word wrap
    $ cd /usr/share/doc/ansible-freeipa/playbooks/vault
  2. Copy to Clipboard Toggle word wrap
    $ touch inventory.file
  3. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  4. Copy to Clipboard Toggle word wrap
    $ cp data-archive-in-asymmetric-vault.yml add-services-to-an-asymmetric-vault.yml
    Copy to Clipboard Toggle word wrap
    ---
    - name: Tests
      hosts: ipaserver
      gather_facts: false
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - ipavault:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: secret_vault
          service: HTTP/webserver1.idm.example.com
          services:
          - HTTP/webserver2.idm.example.com
          - HTTP/webserver3.idm.example.com
          action: member
  5. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file add-services-to-an-asymmetric-vault.yml

86.3.

  1. Copy to Clipboard Toggle word wrap
    $ cd /usr/share/doc/ansible-freeipa/playbooks/vault
  2. Copy to Clipboard Toggle word wrap
    $ touch inventory.file
  3. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  4. Copy to Clipboard Toggle word wrap
    $ cp data-archive-in-asymmetric-vault.yml data-archive-in-asymmetric-vault-copy.yml
    Copy to Clipboard Toggle word wrap
    ---
    - name: Tests
      hosts: ipaserver
      gather_facts: false
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - ipavault:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: secret_vault
          service: HTTP/webserver1.idm.example.com
          in: "{{ lookup('file', 'private-key-to-an-externally-signed-certificate.pem') | b64encode }}"
          action: member
  5. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file data-archive-in-asymmetric-vault-copy.yml

86.4.

  1. Copy to Clipboard Toggle word wrap
    $ cd /usr/share/doc/ansible-freeipa/playbooks/vault
  2. Copy to Clipboard Toggle word wrap
    $ touch inventory.file
    Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
    
    [webservers]
    webserver1.idm.example.com
    webserver2.idm.example.com
    webserver3.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cp retrieve-data-asymmetric-vault.yml retrieve-data-asymmetric-vault-copy.yml
    Copy to Clipboard Toggle word wrap
    ---
    - name: Retrieve data from vault
      hosts: ipaserver
      become: no
      gather_facts: false
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Retrieve data from the service vault
        ipavault:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: secret_vault
          service: HTTP/webserver1.idm.example.com
          vault_type: asymmetric
          private_key: "{{ lookup('file', 'service-private.pem') | b64encode }}"
          out: private-key-to-an-externally-signed-certificate.pem
          state: retrieved
  4. Copy to Clipboard Toggle word wrap
    ---
    - name: Retrieve data from vault
      hosts: ipaserver
      become: no
      gather_facts: false
      tasks:
    [...]
      - name: Retrieve data file
        fetch:
          src: private-key-to-an-externally-signed-certificate.pem
          dest: ./
          flat: true
          mode: 0600
  5. Copy to Clipboard Toggle word wrap
    ---
    - name: Send data file to webservers
      become: no
      gather_facts: no
      hosts: webservers
      tasks:
      - name: Send data to webservers
        copy:
          src: private-key-to-an-externally-signed-certificate.pem
          dest: /etc/pki/tls/private/httpd.key
          mode: 0444
  6. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file retrieve-data-asymmetric-vault-copy.yml

86.5.

  1. Copy to Clipboard Toggle word wrap
    $ cd /usr/share/doc/ansible-freeipa/playbooks/vault
    • Copy to Clipboard Toggle word wrap
      [ipaserver]
      server.idm.example.com
      
      [webservers]
      webserver1.idm.example.com
      webserver2.idm.example.com
    重要

  2. Copy to Clipboard Toggle word wrap
    $ cp data-archive-in-asymmetric-vault.yml data-archive-in-asymmetric-vault-copy.yml
    Copy to Clipboard Toggle word wrap
    ---
    - name: Tests
      hosts: ipaserver
      gather_facts: false
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - ipavault:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: secret_vault
          service: HTTP/webserver.idm.example.com
          in: "{{ lookup('file', 'new-private-key-to-an-externally-signed-certificate.pem') | b64encode }}"
          action: member
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file data-archive-in-asymmetric-vault-copy.yml
    Copy to Clipboard Toggle word wrap
    ---
    - name: Retrieve data from vault
      hosts: ipaserver
      become: no
      gather_facts: false
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Retrieve data from the service vault
        ipavault:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: secret_vault
          service: HTTP/webserver1.idm.example.com
          vault_type: asymmetric
          private_key: "{{ lookup('file', 'service-private.pem') | b64encode }}"
          out: new-private-key-to-an-externally-signed-certificate.pem
          state: retrieved
  4. Copy to Clipboard Toggle word wrap
    ---
    - name: Retrieve data from vault
      hosts: ipaserver
      become: true
      gather_facts: false
      tasks:
    [...]
      - name: Retrieve data file
        fetch:
          src: new-private-key-to-an-externally-signed-certificate.pem
          dest: ./
          flat: true
          mode: 0600
  5. Copy to Clipboard Toggle word wrap
    ---
    - name: Send data file to webservers
      become: true
      gather_facts: no
      hosts: webservers
      tasks:
      - name: Send data to webservers
        copy:
          src: new-private-key-to-an-externally-signed-certificate.pem
          dest: /etc/pki/tls/private/httpd.key
          mode: 0444
  6. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file retrieve-data-asymmetric-vault-copy.yml

86.6.

第87章

87.1.

  1. Copy to Clipboard Toggle word wrap
    $ touch inventory.file
  2. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-copy.yml
  4. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to manage IPA service.
      hosts: ipaserver
      gather_facts: false
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      # Ensure service is present
      - ipaservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: HTTP/client.idm.example.com
  5. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-copy.yml

87.2.

  1. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to add multiple services in a single task
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
    
      tasks:
      - name: Add HTTP and ftp services
        ipaservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          services:
          - name:  HTTP/client01.idm.example.com@IDM.EXAMPLE.COM
          - name: ftp/client02.idm.example.com@IDM.EXAMPLE.COM
  2. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory add-http-and-ftp-services.yml

87.3.

  1. Copy to Clipboard Toggle word wrap
    $ touch inventory.file
  2. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-without-host-check.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-without-host-check-copy.yml
  4. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to manage IPA service.
      hosts: ipaserver
      gather_facts: false
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      # Ensure service is present
      - ipaservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: HTTP/www2.example.com
          skip_host_check: true
  5. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-without-host-check-copy.yml

87.4.

  1. Copy to Clipboard Toggle word wrap
    $ touch inventory.file
  2. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-with-host-force.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-with-host-force-copy.yml
  4. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to manage IPA service.
      hosts: ipaserver
      gather_facts: false
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      # Ensure service is present
      - ipaservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: HTTP/ihavenodns.info
          force: true
  5. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-with-host-force-copy.yml

87.5.

  1. Copy to Clipboard Toggle word wrap
    $ touch inventory.file
  2. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/service/service-member-certificate-present.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-member-certificate-present-copy.yml
  4. Copy to Clipboard Toggle word wrap
    $ openssl x509 -outform der -in cert1.pem -out cert1.der
  5. Copy to Clipboard Toggle word wrap
    $ base64 cert1.der -w0
    MIIC/zCCAeegAwIBAgIUV74O+4kXeg21o4vxfRRtyJm...
  6. Copy to Clipboard Toggle word wrap
    ---
    - name: Service certificate present.
      hosts: ipaserver
      gather_facts: false
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      # Ensure service certificate is present
      - ipaservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: HTTP/client.idm.example.com
          certificate: |
            - MIICBjCCAW8CFHnm32VcXaUDGfEGdDL/...
          [...]
          action: member
          state: present
  7. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/service/service-member-certificate-present-copy.yml

87.6.

  1. Copy to Clipboard Toggle word wrap
    $ touch inventory.file
  2. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/service/service-member-allow_create_keytab-present.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-member-allow_create_keytab-present-copy.yml
    Copy to Clipboard Toggle word wrap
    ---
    - name: Service member allow_create_keytab present
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Service HTTP/client.idm.example.com members allow_create_keytab present for user01
        ipaservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: HTTP/client.idm.example.com
          allow_create_keytab_user:
          - user01
          action: member
  4. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/service/service-member-allow_create_keytab-present-copy.yml

  1. Copy to Clipboard Toggle word wrap
    $ ssh user01@server.idm.example.com
    Password:
  2. Copy to Clipboard Toggle word wrap
    $ ipa-getkeytab -s server.idm.example.com -p HTTP/client.idm.example.com -k /etc/httpd/conf/krb5.keytab

87.7.

  1. Copy to Clipboard Toggle word wrap
    $ touch inventory.file
  2. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/service/service-member-allow_retrieve_keytab-present.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-member-allow_retrieve_keytab-present-copy.yml
    Copy to Clipboard Toggle word wrap
    ---
    - name: Service member allow_retrieve_keytab present
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Service HTTP/client.idm.example.com members allow_retrieve_keytab present for user01
        ipaservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: HTTP/client.idm.example.com
          allow_retrieve_keytab_user:
          - user01
          action: member
  4. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/service/service-member-allow_retrieve_keytab-present-copy.yml

  1. Copy to Clipboard Toggle word wrap
    $ ssh user01@server.idm.example.com
    Password:
  2. Copy to Clipboard Toggle word wrap
    $ ipa-getkeytab -r -s server.idm.example.com -p HTTP/client.idm.example.com -k /etc/httpd/conf/krb5.keytab

87.8.

  1. Copy to Clipboard Toggle word wrap
    $ touch inventory.file
  2. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/service/service-member-principal-present.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-member-principal-present-copy.yml
    Copy to Clipboard Toggle word wrap
    ---
    - name: Service member principal present
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Service HTTP/client.idm.example.com member principals host/mycompany.idm.exmaple.com present
        ipaservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: HTTP/client.idm.example.com
          principal:
            - host/mycompany.idm.example.com
          action: member
  4. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/service/service-member-principal-present-copy.yml

87.9.

  1. Copy to Clipboard Toggle word wrap
    $ touch inventory.file
  2. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/service/service-is-absent.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-is-absent-copy.yml
    Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to manage IPA service.
      hosts: ipaserver
      gather_facts: false
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      # Ensure service is absent
      - ipaservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: HTTP/client.idm.example.com
          state: absent
  4. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/service/service-is-absent-copy.yml

87.10.

第88章

88.1.

注記

重要

88.2.

  • Copy to Clipboard Toggle word wrap
    # yum module enable idm:DL1
    # yum distro-sync
  • Copy to Clipboard Toggle word wrap
    # yum module install idm:DL1/adtrust

  1. Copy to Clipboard Toggle word wrap
    # kinit admin
    # ipa idoverrideuser-add 'default trust view' ad_user@ad.example.com
  2. Copy to Clipboard Toggle word wrap
    # ipa group-add-member admins --idoverrideusers=ad_user@ad.example.com
  3. Copy to Clipboard Toggle word wrap
    # ipa role-add-member 'User Administrator' --idoverrideusers=ad_user@ad.example.com

88.3.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to ensure presence of users in a group
      hosts: ipaserver
    
    
      - name: Ensure the ad_user@ad.example.com user ID override is a member of the admins group:
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: admins
          idoverrideuser:
          - ad_user@ad.example.com

  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory add-useridoverride-to-group.yml

88.4.

  1. Copy to Clipboard Toggle word wrap
    # kdestroy -A
    注記

  2. Copy to Clipboard Toggle word wrap
    # kinit ad_user@AD.EXAMPLE.COM
    Password for ad_user@AD.EXAMPLE.COM:
  3. Copy to Clipboard Toggle word wrap
    # ipa group-add some-new-group
    ----------------------------
    Added group "some-new-group"
    ----------------------------
      Group name: some-new-group
      GID: 1997000011

88.5.

  1. Copy to Clipboard Toggle word wrap
    ---
    - name: Enable AD administrator to act as a FreeIPA admin
      hosts: ipaserver
      become: false
      gather_facts: false
    
      tasks:
      - name: Ensure idoverride for administrator@addomain.com in 'default trust view'
        ipaidoverrideuser:
          ipaadmin_password: "{{ ipaadmin_password }}"
          idview: "Default Trust View"
          anchor: administrator@addomain.com
  2. Copy to Clipboard Toggle word wrap
      - name: Add the AD administrator as a member of admins
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: admins
          idoverrideuser:
          - administrator@addomain.com
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory enable-ad-admin-to-administer-idm.yml

  1. Copy to Clipboard Toggle word wrap
    $ ssh administrator@addomain.com@client.idm.example.com
  2. Copy to Clipboard Toggle word wrap
    $ klist
    Ticket cache: KCM:325600500:99540
    Default principal: Administrator@ADDOMAIN.COM
    Valid starting Expires Service principal
    02/04/2024 11:54:16 02/04/2024 21:54:16 krbtgt/ADDOMAIN.COM@ADDOMAIN.COM
    renew until 02/05/2024 11:54:16
  3. Copy to Clipboard Toggle word wrap
    $ ipa user-add testuser --first=test --last=user
    ------------------------
    Added user "tuser"
    ------------------------
      User login: tuser
      First name: test
      Last name: user
      Full name: test user
    [...]

第89章

89.1.

重要

89.2.

  • Copy to Clipboard Toggle word wrap
    [user@server ~]$ ipa config-mod --domain-resolution-order='ad.example.com:subdomain1.ad.example.com:idm.example.com'
    Maximum username length: 32
    Home directory base: /home
    ...
      Domain Resolution Order: ad.example.com:subdomain1.ad.example.com:idm.example.com
    ...

  • Copy to Clipboard Toggle word wrap
    [root@client ~]# id <ad_username>
    uid=1916901102(ad_username) gid=1916900513(domain users) groups=1916900513(domain users)

89.3.

注記

  1. Copy to Clipboard Toggle word wrap
    [user@server ~]$ ipa idview-add ADsubdomain1_first --desc "ID view for resolving AD subdomain1 first on client1.idm.example.com" --domain-resolution-order subdomain1.ad.example.com:ad.example.com:idm.example.com
    ---------------------------------
    Added ID View "ADsubdomain1_first"
    ---------------------------------
    ID View Name: ADsubdomain1_first
    Description: ID view for resolving AD subdomain1 first on client1.idm.example.com
    Domain Resolution Order: subdomain1.ad.example.com:ad.example.com:idm.example.com
  2. Copy to Clipboard Toggle word wrap
    [user@server ~]$ ipa idview-apply ADsubdomain1_first --hosts client1.idm.example.com
    -----------------------------------
    Applied ID View "ADsubdomain1_first"
    -----------------------------------
      hosts: client1.idm.example.com
    ---------------------------------------------
    Number of hosts the ID View was applied to: 1
    ---------------------------------------------

  1. Copy to Clipboard Toggle word wrap
    [user@server ~]$ ipa idview-show ADsubdomain1_first --show-hosts
      ID View Name: ADsubdomain1_first
      Description: ID view for resolving AD subdomain1 first on client1.idm.example.com
      Hosts the view applies to: client1.idm.example.com
      Domain resolution order: subdomain1.ad.example.com:ad.example.com:idm.example.com
  2. Copy to Clipboard Toggle word wrap
    [root@client1 ~]# id <user_from_subdomain1>
    uid=1916901106(user_from_subdomain1) gid=1916900513(domain users) groups=1916900513(domain users)

89.4.

注記

  1. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to add idview and apply it to an IdM client
      hosts: ipaserver
      vars_files:
      - /home/<user_name>/MyPlaybooks/secret.yml
      become: false
      gather_facts: false
    
      tasks:
      - name: Add idview and apply it to testhost.idm.example.com
        ipaidview:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: test_idview
          host: testhost.idm.example.com
          domain_resolution_order: "ad.example.com:ipa.example.com"
  2. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory add-id-view-with-domain-resolution-order.yml

  1. Copy to Clipboard Toggle word wrap
    [root@testhost ~]# id aduser05
    uid=1916901102(aduser05) gid=1916900513(domain users) groups=1916900513(domain users)

89.5.

注記

  1. Copy to Clipboard Toggle word wrap
    domain_resolution_order = subdomain1.ad.example.com, ad.example.com, idm.example.com
  2. Copy to Clipboard Toggle word wrap
    [root@client2 ~]# systemctl restart sssd

  • Copy to Clipboard Toggle word wrap
    [root@client2 ~]# id <user_from_subdomain1>
    uid=1916901106(user_from_subdomain1) gid=1916900513(domain users) groups=1916900513(domain users)

89.6.

第90章

90.1.

注記

90.2.

  • Copy to Clipboard Toggle word wrap
    [root@ipaserver ~]# ipa trust-fetch-domains
    Realm-Name: ad.example.com
    -------------------------------
    No new trust domains were found
    -------------------------------
    ----------------------------
    Number of entries returned 0
    ----------------------------

  • Copy to Clipboard Toggle word wrap
    [root@ipaserver ~]# ipa trust-show
    Realm-Name: ad.example.com
      Realm-Name: ad.example.com
      Domain NetBIOS name: AD
      Domain Security Identifier: S-1-5-21-796215754-1239681026-23416912
      Trust direction: One-way trust
      Trust type: Active Directory domain
      UPN suffixes: example.com

90.3.

  1. Copy to Clipboard Toggle word wrap
    [global]
    log level = 10
  2. Copy to Clipboard Toggle word wrap
    [global]
    debug = True
  3. Copy to Clipboard Toggle word wrap
    [root@server ~]# systemctl restart httpd
  4. Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa trust-fetch-domains <ad.example.com>

第91章

91.1.

  1. Copy to Clipboard Toggle word wrap
    $ kinit admin
  2. Copy to Clipboard Toggle word wrap
    $ ipa host-add-principal demo.example.com --principal=demo

91.2.

  1. Copy to Clipboard Toggle word wrap
    [libdefaults]
    ...
    dns_canonicalize_hostname = true

91.3.

第92章

 

92.1.

Copy to Clipboard Toggle word wrap
# Generated by NetworkManager
search idm.example.com
nameserver 127.0.0.1

  1. Copy to Clipboard Toggle word wrap
    # auto-generated by IPA installer
    [main]
    dns=default
    
    [global-dns]
    searches=$DOMAIN
    
    [global-dns-domain-*]
    servers=127.0.0.1
重要

92.2.

  1. Copy to Clipboard Toggle word wrap
    $ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
  2. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cp forwarders-absent.yml ensure-presence-of-a-global-forwarder.yml
    Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to ensure the presence of a global forwarder in IdM DNS
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure the presence of a DNS global forwarder to 7.7.9.9 and 2001:db8::1:0 on port 53
        ipadnsconfig:
          forwarders:
            - ip_address: 7.7.9.9
            - ip_address: 2001:db8::1:0
              port: 53
          state: present
  4. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-presence-of-a-global-forwarder.yml

92.3.

  1. Copy to Clipboard Toggle word wrap
    $ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
  2. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cp forwarders-absent.yml ensure-absence-of-a-global-forwarder.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to ensure the absence of a global forwarder in IdM DNS
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure the absence of a DNS global forwarder to 8.8.6.6 and 2001:4860:4860::8800 on port 53
        ipadnsconfig:
          forwarders:
            - ip_address: 8.8.6.6
            - ip_address: 2001:4860:4860::8800
              port: 53
          action: member
          state: absent
    重要

  4. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-absence-of-a-global-forwarder.yml

92.4.

表92.1
   

Copy to Clipboard Toggle word wrap
[...]
tasks:
- name: Ensure the presence of DNS global forwarder 8.8.6.7
  ipadnsconfig:
    forwarders:
      - ip_address: 8.8.6.7
    state: present

Copy to Clipboard Toggle word wrap
[...]
tasks:
- name: Ensure the presence of DNS global forwarder 8.8.6.7
  ipadnsconfig:
    forwarders:
      - ip_address: 8.8.6.7
    action: member
    state: present

Copy to Clipboard Toggle word wrap
[...]
tasks:
- name: Ensure the absence of DNS global forwarder 8.8.6.7
  ipadnsconfig:
    forwarders:
      - ip_address: 8.8.6.7
    state: absent

Copy to Clipboard Toggle word wrap
[...]
tasks:
- name: Ensure the absence of DNS global forwarder 8.8.6.7
  ipadnsconfig:
    forwarders:
      - ip_address: 8.8.6.7
    action: member
    state: absent

92.5.

注記

例92.1

92.6.

  1. Copy to Clipboard Toggle word wrap
    $ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
  2. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cp set-configuration.yml set-forward-policy-to-first.yml
    Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to set global forwarding policy to first
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Set global forwarding policy to first.
        ipadnsconfig:
          ipaadmin_password: "{{ ipaadmin_password }}"
          forward_policy: first
  4. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file set-forward-policy-to-first.yml

92.7.

  1. Copy to Clipboard Toggle word wrap
    $ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
  2. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cp disable-global-forwarders.yml disable-global-forwarders-copy.yml
    Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to disable global DNS forwarders
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Disable global forwarders.
        ipadnsconfig:
          ipaadmin_password: "{{ ipaadmin_password }}"
          forward_policy: none
  4. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file disable-global-forwarders-copy.yml

92.8.

  1. Copy to Clipboard Toggle word wrap
    $ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
  2. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cp disallow-reverse-sync.yml disallow-reverse-sync-copy.yml
    Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to disallow reverse record synchronization
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Disallow reverse record synchronization.
        ipadnsconfig:
          ipaadmin_password: "{{ ipaadmin_password }}"
          allow_sync_ptr: no
  4. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file disallow-reverse-sync-copy.yml

第93章

93.1.

注記

例93.1

93.2.

  1. 図93.1

  2. 図93.2

93.3.

  • Copy to Clipboard Toggle word wrap
    $ ipa dnszone-add newzone.idm.example.com

93.4.

  1. 図93.3

93.5.

  • Copy to Clipboard Toggle word wrap
    $ ipa dnszone-del idm.example.com

93.6.

93.7.

表93.1
   

93.8.

  1. 図93.4

  2. 図93.5

  3. 図93.6

  4. 注記

93.9.

  • Copy to Clipboard Toggle word wrap
    $ ipa dnszone-mod --retry 1800

    注記

93.10.

重要

93.11.

  1. 図93.7

93.12.

  • Copy to Clipboard Toggle word wrap
    $ ipa dnszone-mod --allow-transfer=192.0.2.1;198.51.100.1;203.0.113.1 idm.example.com

  1. Copy to Clipboard Toggle word wrap
    $ ssh 192.0.2.1
  2. Copy to Clipboard Toggle word wrap
    # dig @ipa-server zone_name AXFR

93.13.

第94章

94.1.

注記

例94.1

94.2.

表94.1
   

94.3.

  1. Copy to Clipboard Toggle word wrap
    $ cd /usr/share/doc/ansible-freeipa/playbooks/dnszone
  2. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cp dnszone-present.yml dnszone-present-copy.yml
    Copy to Clipboard Toggle word wrap
    ---
    - name: Ensure dnszone present
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Ensure zone is present.
        ipadnszone:
          ipaadmin_password: "{{ ipaadmin_password }}"
          zone_name: zone.idm.example.com
          state: present
  4. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file dnszone-present-copy.yml

94.4.

  1. Copy to Clipboard Toggle word wrap
    $ cd /usr/share/doc/ansible-freeipa/playbooks/dnszone
  2. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cp dnszone-all-params.yml dnszone-all-params-copy.yml
    • 警告

    Copy to Clipboard Toggle word wrap
    ---
    - name: Ensure dnszone present
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Ensure zone is present.
        ipadnszone:
          ipaadmin_password: "{{ ipaadmin_password }}"
          zone_name: zone.idm.example.com
          allow_sync_ptr: true
          dynamic_update: true
          dnssec: true
          allow_transfer:
            - 1.1.1.1
            - 2.2.2.2
          allow_query:
            - 1.1.1.1
            - 2.2.2.2
          forwarders:
            - ip_address: 8.8.8.8
            - ip_address: 8.8.4.4
              port: 52
          serial: 1234
          refresh: 3600
          retry: 900
          expire: 1209600
          minimum: 3600
          ttl: 60
          default_ttl: 90
          name_server: server.idm.example.com.
          admin_email: admin.admin@idm.example.com
          nsec3param_rec: "1 7 100 0123456789abcdef"
          skip_overlap_check: true
          skip_nameserver_check: true
          state: present
  4. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file dnszone-all-params-copy.yml

94.5.

  1. Copy to Clipboard Toggle word wrap
    $ cd /usr/share/doc/ansible-freeipa/playbooks/dnszone
  2. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cp dnszone-reverse-from-ip.yml dnszone-reverse-from-ip-copy.yml
    • Copy to Clipboard Toggle word wrap
      ---
      - name: Ensure dnszone present
        hosts: ipaserver
        become: true
      
        tasks:
        - name: Ensure zone for reverse DNS lookup is present.
          ipadnszone:
            ipaadmin_password: "{{ ipaadmin_password }}"
            name_from_ip: 192.168.1.2/24
            state: present
          register: result
        - name: Display inferred zone name.
          debug:
            msg: "Zone name: {{ result.dnszone.name }}"

  4. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file dnszone-reverse-from-ip-copy.yml

第95章

95.1.

例95.1

Copy to Clipboard Toggle word wrap
$ dig -t SRV +short _kerberos._tcp.idm.example.com
0 100 88 idmserver-01.idm.example.com.
0 100 88 idmserver-02.idm.example.com.

例95.2

Copy to Clipboard Toggle word wrap
$ dig -t SRV +short _kerberos._tcp.idm.example.com
_kerberos._tcp.germany._locations.idm.example.com.
0 100 88 idmserver-01.idm.example.com.
50 100 88 idmserver-02.idm.example.com.

95.2.

95.3.

95.4.

95.5.

  1. Copy to Clipboard Toggle word wrap
    $ ipa location-add germany
    ----------------------------
    Added IPA location "germany"
    ----------------------------
      Location name: germany

95.6.

  1. 図95.1

  2. Copy to Clipboard Toggle word wrap
    [root@idmserver-01 ~]# systemctl restart named-pkcs11

95.7.

  1. Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa location-find
    -----------------------
    2 IPA locations matched
    -----------------------
    Location name: australia
    Location name: germany
    -----------------------------
    Number of entries returned: 2
    -----------------------------
  2. Copy to Clipboard Toggle word wrap
    # ipa server-mod idmserver-01.idm.example.com --location=germany
    ipa: WARNING: Service named-pkcs11.service requires restart on IPA server
    idmserver-01.idm.example.com to apply configuration changes.
    --------------------------------------------------
    Modified IPA server "idmserver-01.idm.example.com"
    --------------------------------------------------
    Servername: idmserver-01.idm.example.com
    Min domain level: 0
    Max domain level: 1
    Location: germany
    Enabled server roles: DNS server, NTP server
  3. Copy to Clipboard Toggle word wrap
    # systemctl restart named-pkcs11

95.8.

注記

例95.3

Copy to Clipboard Toggle word wrap
nameserver 10.10.0.1
nameserver 10.10.0.2

Copy to Clipboard Toggle word wrap
nameserver 10.50.0.1
nameserver 10.50.0.3

Copy to Clipboard Toggle word wrap
nameserver 10.30.0.1

Copy to Clipboard Toggle word wrap
nameserver 10.30.0.1

95.9.

第96章

96.1.

例96.1

Copy to Clipboard Toggle word wrap
$ dig -t SRV +short _kerberos._tcp.idm.example.com
0 100 88 idmserver-01.idm.example.com.
0 100 88 idmserver-02.idm.example.com.

例96.2

Copy to Clipboard Toggle word wrap
$ dig -t SRV +short _kerberos._tcp.idm.example.com
_kerberos._tcp.germany._locations.idm.example.com.
0 100 88 idmserver-01.idm.example.com.
50 100 88 idmserver-02.idm.example.com.

96.2.

96.3.

96.4.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/location/location-present.yml location-present-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: location present example
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure that the "germany" location is present
        ipalocation:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: germany
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory location-present-copy.yml

96.5.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/location/location-absent.yml location-absent-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: location absent example
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure that the "germany" location is absent
        ipalocation:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: germany
          state: absent
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory location-absent-copy.yml

96.6.

第97章

97.1.

97.2.

注記

例97.1

97.3.

97.4.

  • Copy to Clipboard Toggle word wrap
    [user@server ~]$ ipa dnsconfig-mod --forwarder=10.10.0.1
    Server will check DNS forwarder(s).
    This may take some time, please wait ...
      Global forwarders: 10.10.0.1
      IPA DNS servers: server.example.com

  • Copy to Clipboard Toggle word wrap
    [user@server ~]$ ipa dnsconfig-show
      Global forwarders: 10.10.0.1
      IPA DNS servers: server.example.com

97.5.

重要

97.6.

重要

  • Copy to Clipboard Toggle word wrap
    [user@server ~]$ ipa dnsforwardzone-add forward.example.com. --forwarder=10.10.0.14 --forwarder=10.10.1.15 --forward-policy=first
    
    Zone name: forward.example.com.
    Zone forwarders: 10.10.0.14, 10.10.1.15
    Forward policy: first

  • Copy to Clipboard Toggle word wrap
    [user@server ~]$ ipa dnsforwardzone-show forward.example.com.
    
    Zone name: forward.example.com.
    Zone forwarders: 10.10.0.14, 10.10.1.15
    Forward policy: first

97.7.

  1. Copy to Clipboard Toggle word wrap
    $ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
  2. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cp set-configuration.yml establish-global-forwarder.yml
    Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to establish a global forwarder in IdM DNS
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Create a DNS global forwarder to 8.8.6.6 and 2001:4860:4860::8800
        ipadnsconfig:
          forwarders:
            - ip_address: 8.8.6.6
            - ip_address: 2001:4860:4860::8800
              port: 53
          forward_policy: first
          allow_sync_ptr: true
  4. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file establish-global-forwarder.yml

97.8.

  1. Copy to Clipboard Toggle word wrap
    $ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
  2. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cp forwarders-absent.yml ensure-presence-of-a-global-forwarder.yml
    Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to ensure the presence of a global forwarder in IdM DNS
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure the presence of a DNS global forwarder to 7.7.9.9 and 2001:db8::1:0 on port 53
        ipadnsconfig:
          forwarders:
            - ip_address: 7.7.9.9
            - ip_address: 2001:db8::1:0
              port: 53
          state: present
  4. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-presence-of-a-global-forwarder.yml

97.9.

  1. Copy to Clipboard Toggle word wrap
    $ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
  2. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cp forwarders-absent.yml ensure-absence-of-a-global-forwarder.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to ensure the absence of a global forwarder in IdM DNS
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure the absence of a DNS global forwarder to 8.8.6.6 and 2001:4860:4860::8800 on port 53
        ipadnsconfig:
          forwarders:
            - ip_address: 8.8.6.6
            - ip_address: 2001:4860:4860::8800
              port: 53
          action: member
          state: absent
    重要

  4. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-absence-of-a-global-forwarder.yml

97.10.

  1. Copy to Clipboard Toggle word wrap
    $ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
  2. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cat disable-global-forwarders.yml
    ---
    - name: Playbook to disable global DNS forwarders
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Disable global forwarders.
        ipadnsconfig:
          forward_policy: none
  4. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file disable-global-forwarders.yml

97.11.

  1. Copy to Clipboard Toggle word wrap
    $ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
  2. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cp forwarders-absent.yml ensure-presence-forwardzone.yml
        1. Copy to Clipboard Toggle word wrap
          - 8.8.8.8

    Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to ensure the presence of a dnsforwardzone in IdM DNS
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure the presence of a dnsforwardzone for example.com to 8.8.8.8
      ipadnsforwardzone:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: example.com
          forwarders:
              - 8.8.8.8
          forwardpolicy: first
          skip_overlap_check: true
          state: present
  4. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-presence-forwardzone.yml

97.12.

  1. Copy to Clipboard Toggle word wrap
    $ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
  2. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cp forwarders-absent.yml ensure-presence-multiple-forwarders.yml
        1. Copy to Clipboard Toggle word wrap
          - 8.8.8.8
          - 4.4.4.4

    Copy to Clipboard Toggle word wrap
    ---
    - name: name: Playbook to ensure the presence of multiple forwarders in a dnsforwardzone in IdM DNS
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure presence of 8.8.8.8 and 4.4.4.4 forwarders in dnsforwardzone for example.com
      ipadnsforwardzone:
          ipaadmin_password: "{{ ipaadmin_password }}"
         name: example.com
          forwarders:
              - 8.8.8.8
              - 4.4.4.4
          state: present
  4. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-presence-multiple-forwarders.yml

97.13.

  1. Copy to Clipboard Toggle word wrap
    $ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
  2. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cp forwarders-absent.yml ensure-disabled-forwardzone.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to ensure a dnsforwardzone is disabled in IdM DNS
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure a dnsforwardzone for example.com is disabled
      ipadnsforwardzone:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: example.com
          state: disabled
  4. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-disabled-forwardzone.yml

97.14.

  1. Copy to Clipboard Toggle word wrap
    $ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
  2. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cp forwarders-absent.yml ensure-absence-forwardzone.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to ensure the absence of a dnsforwardzone in IdM DNS
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure the absence of a dnsforwardzone for example.com
        ipadnsforwardzone:
           ipaadmin_password: "{{ ipaadmin_password }}"
           name: example.com
           state: absent
  4. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-absence-forwardzone.yml

第98章

98.1.

注記

注記

98.2.

  1. 図98.1

  2. 図98.2

98.3.

  1. Copy to Clipboard Toggle word wrap
    $ ipa dnsrecord-add zone_name record_name --record_type_option=data

    Copy to Clipboard Toggle word wrap
    $ ipa dnsrecord-add idm.example.com host1 --a-rec=192.168.122.123

98.4.

表98.1
  

表98.2
   

[a]

表98.3
   

表98.4
   

 
表98.5
   

 

98.5.

  1. 図98.3

  2. 図98.4

98.6.

  1. 図98.5

98.7.

  • Copy to Clipboard Toggle word wrap
    $ ipa dnsrecord-del example.com www --a-rec 192.0.2.1

98.8.

第99章

99.1.

  1. Copy to Clipboard Toggle word wrap
    $ ipa dns-update-system-records --dry-run
     IPA DNS records:
       _kerberos-master._tcp.example.com. 86400 IN SRV 0 100 88 ipa.example.com.
       _kerberos-master._udp.example.com. 86400 IN SRV 0 100 88 ipa.example.com.
    [... output truncated ...]

99.2.

  • Copy to Clipboard Toggle word wrap
    $ ipa dns-update-system-records --dry-run --out dns_records_file.nsupdate
     IPA DNS records:
       _kerberos-master._tcp.example.com. 86400 IN SRV 0 100 88 ipa.example.com.
       _kerberos-master._udp.example.com. 86400 IN SRV 0 100 88 ipa.example.com.
    [... output truncated ...]

    • 例99.1

      Copy to Clipboard Toggle word wrap
      $ cat dns_records_file.nsupdate
      zone example.com.
      server 192.0.2.1
      ; IPA DNS records
      update delete _kerberos-master._tcp.example.com. SRV
      update add _kerberos-master._tcp.example.com. 86400 IN SRV 0 100 88 ipa.example.com.
      [... output truncated ...]

99.3.

    • Copy to Clipboard Toggle word wrap
      $ nsupdate -k tsig_key.file dns_records_file.nsupdate
    • Copy to Clipboard Toggle word wrap
      $ nsupdate -y algorithm:keyname:secret dns_records_file.nsupdate

99.4.

注記

  1. Copy to Clipboard Toggle word wrap
    $ kinit principal_allowed_to_update_records@REALM
  2. Copy to Clipboard Toggle word wrap
    $ nsupdate -g dns_records_file.nsupdate

99.5.

第100章

100.1.

注記

注記

100.2.

表100.1
  

表100.2
   

[a]

表100.3
   

表100.4
   

 
表100.5
   

 

100.3.

  1. Copy to Clipboard Toggle word wrap
    $ cd /usr/share/doc/ansible-freeipa/playbooks/dnsrecord
  2. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cp ensure-A-and-AAAA-records-are-present.yml ensure-A-and-AAAA-records-are-present-copy.yml
    Copy to Clipboard Toggle word wrap
    ---
    - name: Ensure A and AAAA records are present
      hosts: ipaserver
      become: true
      gather_facts: false
    
      tasks:
      # Ensure A and AAAA records are present
      - name: Ensure that 'host1' has A and AAAA records.
        ipadnsrecord:
          ipaadmin_password: "{{ ipaadmin_password }}"
          zone_name: idm.example.com
          records:
          - name: host1
            a_ip_address: 192.168.122.123
          - name: host1
            aaaa_ip_address: ::1
  4. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-A-and-AAAA-records-are-present-copy.yml

100.4.

  1. Copy to Clipboard Toggle word wrap
    $ cd /usr/share/doc/ansible-freeipa/playbooks/dnsrecord
  2. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cp ensure-dnsrecord-with-reverse-is-present.yml ensure-dnsrecord-with-reverse-is-present-copy.yml
    Copy to Clipboard Toggle word wrap
    ---
    - name: Ensure DNS Record is present.
      hosts: ipaserver
      become: true
      gather_facts: false
    
      tasks:
      # Ensure that dns record is present
      - ipadnsrecord:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: host1
          zone_name: idm.example.com
          ip_address: 192.168.122.45
          create_reverse: true
          state: present
  4. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-dnsrecord-with-reverse-is-present-copy.yml

100.5.

  1. Copy to Clipboard Toggle word wrap
    $ cd /usr/share/doc/ansible-freeipa/playbooks/dnsrecord
  2. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cp ensure-presence-multiple-records.yml ensure-presence-multiple-records-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Test multiple DNS Records are present.
      hosts: ipaserver
      become: true
      gather_facts: false
    
      tasks:
      # Ensure that multiple dns records are present
      - ipadnsrecord:
          ipaadmin_password: "{{ ipaadmin_password }}"
          records:
            - name: host1
              zone_name: idm.example.com
              a_rec: 192.168.122.112
              a_rec: 192.168.122.122
            - name: host1
              zone_name: idm.example.com
              aaaa_rec: ::1
  4. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-presence-multiple-records-copy.yml

100.6.

  1. Copy to Clipboard Toggle word wrap
    $ cd /usr/share/doc/ansible-freeipa/playbooks/dnsrecord
  2. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cp ensure-CNAME-record-is-present.yml ensure-CNAME-record-is-present-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Ensure that 'www.idm.example.com' and 'ftp.idm.example.com' CNAME records point to 'host03.idm.example.com'.
      hosts: ipaserver
      become: true
      gather_facts: false
    
      tasks:
      - ipadnsrecord:
          ipaadmin_password: "{{ ipaadmin_password }}"
          zone_name: idm.example.com
          records:
          - name: www
            cname_hostname: host03
          - name: ftp
            cname_hostname: host03
  4. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-CNAME-record-is-present.yml

100.7.

  1. Copy to Clipboard Toggle word wrap
    $ cd /usr/share/doc/ansible-freeipa/playbooks/dnsrecord
  2. Copy to Clipboard Toggle word wrap
    [ipaserver]
    server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ cp ensure-SRV-record-is-present.yml ensure-SRV-record-is-present-copy.yml
    Copy to Clipboard Toggle word wrap
    ---
    - name: Test multiple DNS Records are present.
      hosts: ipaserver
      become: true
      gather_facts: false
    
      tasks:
      # Ensure a SRV record is present
      - ipadnsrecord:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: _kerberos._udp.idm.example.com
          srv_rec: ’10 50 88 idm.example.com’
          zone_name: idm.example.com
          state: present
  4. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-SRV-record-is-present.yml

第101章

101.1.

注記

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/server/server-present.yml server-present-copy.yml
    Copy to Clipboard Toggle word wrap
    ---
    - name: Server present example
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure server server123.idm.example.com is present
        ipaserver:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: server123.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory server-present-copy.yml

101.2.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/server/server-absent.yml server-absent-copy.yml
    Copy to Clipboard Toggle word wrap
    ---
    - name: Server absent example
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure server server123.idm.example.com is absent
        ipaserver:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: server123.idm.example.com
          state: absent
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory server-absent-copy.yml

101.3.

警告

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/server/server-absent-ignore-last-of-role.yml server-absent-ignore-last-of-role-copy.yml
    Copy to Clipboard Toggle word wrap
    ---
    - name: Server absent with last of role skip example
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure server “server123.idm.example.com” is absent with last of role skip
        ipaserver:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: server123.idm.example.com
          ignore_last_of_role: true
          state: absent
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory server-absent-ignore-last-of-role-copy.yml

101.4.

重要

注記

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/server/server-absent-ignore_topology_disconnect.yml server-absent-ignore_topology_disconnect-copy.yml
    Copy to Clipboard Toggle word wrap
    ---
    - name: Server absent with ignoring topology disconnects example
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure server “server123.idm.example.com” with ignoring topology disconnects
        ipaserver:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: server123.idm.example.com
          ignore_topology_disconnect: true
          state: absent
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory server-absent-ignore_topology_disconnect-copy.yml

101.5.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/server/server-hidden.yml server-hidden-copy.yml
    Copy to Clipboard Toggle word wrap
    ---
    - name: Server hidden example
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure server server123.idm.example.com is hidden
        ipaserver:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: server123.idm.example.com
          hidden: True
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory server-hidden-copy.yml

101.6.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/server/server-not-hidden.yml server-not-hidden-copy.yml
    Copy to Clipboard Toggle word wrap
    ---
    - name: Server not hidden example
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure server server123.idm.example.com is not hidden
        ipaserver:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: server123.idm.example.com
          hidden: no
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory server-not-hidden-copy.yml

101.7.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/server/server-location.yml server-location-copy.yml

    Copy to Clipboard Toggle word wrap
    ---
    - name: Server enabled example
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure server server123.idm.example.com with location “germany” is present
        ipaserver:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: server123.idm.example.com
          location: germany
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory server-location-copy.yml
  4. Copy to Clipboard Toggle word wrap
    ssh root@server123.idm.example.com
  5. Copy to Clipboard Toggle word wrap
    [root@server123.idm.example.com ~]# systemctl restart named-pkcs11

101.8.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/server/server-no-location.yml server-no-location-copy.yml
    Copy to Clipboard Toggle word wrap
    ---
    - name: Server no location example
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure server server123.idm.example.com is present with no location
        ipaserver:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: server123.idm.example.com
          location: “”
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory server-no-location-copy.yml
  4. Copy to Clipboard Toggle word wrap
    ssh root@server123.idm.example.com
  5. Copy to Clipboard Toggle word wrap
    [root@server123.idm.example.com ~]# systemctl restart named-pkcs11

第102章

102.1.

注記

102.2.

102.3.

  1. Copy to Clipboard Toggle word wrap
    # systemctl enable ipa-healthcheck.timer
    Created symlink /etc/systemd/system/multi-user.target.wants/ipa-healthcheck.timer -> /usr/lib/systemd/system/ipa-healthcheck.timer.
  2. Copy to Clipboard Toggle word wrap
    # systemctl start ipa-healthcheck.timer
  3. Copy to Clipboard Toggle word wrap
    # systemctl enable crond
    # systemctl start crond

Copy to Clipboard Toggle word wrap
# systemctl start ipa-healthcheck

102.4.

注記

注記

102.5.

  1. Copy to Clipboard Toggle word wrap
    # ipa-healthcheck

第103章

103.1.

Copy to Clipboard Toggle word wrap
# ipa-healthcheck --list-sources

注記

103.2.

  • Copy to Clipboard Toggle word wrap
    # ipa-healthcheck --source=ipahealthcheck.meta.services --failures-only

Copy to Clipboard Toggle word wrap
[ ]

Copy to Clipboard Toggle word wrap
{
  "source": "ipahealthcheck.meta.services",
  "check": "httpd",
  "result": "ERROR",
  "kw": {
    "status": false,
    "msg": "httpd: not running"
  }
}

第104章

104.1.

Copy to Clipboard Toggle word wrap
# ipa-healthcheck --list-sources

注記

104.2.

  • Copy to Clipboard Toggle word wrap
    # ipa-healthcheck --source=ipahealthcheck.ipa.trust --failures-only

Copy to Clipboard Toggle word wrap
# ipa-healthcheck --source=ipahealthcheck.ipa.trust --failures-only
[]

第105章

105.1.

Copy to Clipboard Toggle word wrap
# ipa-healthcheck --list-sources

注記

注記

Copy to Clipboard Toggle word wrap
openssl verify -verbose -show_chain -CAfile /etc/ipa/ca.crt [cert file]

注記

105.2.

  • Copy to Clipboard Toggle word wrap
    # ipa-healthcheck --source=ipahealthcheck.ipa.certs --failures-only

Copy to Clipboard Toggle word wrap
[]

Copy to Clipboard Toggle word wrap
{
  "source": "ipahealthcheck.ipa.certs",
  "check": "IPACertfileExpirationCheck",
  "result": "ERROR",
  "kw": {
    "key": 1234,
    "dbdir": "/path/to/nssdb",
    "error": [error],
    "msg": "Unable to open NSS database '/path/to/nssdb': [error]"
  }
}

第106章

106.1.

Copy to Clipboard Toggle word wrap
# ipa-healthcheck --list-sources

注記

106.2.

  • Copy to Clipboard Toggle word wrap
    # ipa-healthcheck --source=ipahealthcheck.dogtag.ca

Copy to Clipboard Toggle word wrap
{
  "source: ipahealthcheck.dogtag.ca",
  "check: DogtagCertsConfigCheck",
  "result: SUCCESS",
  "uuid: 9b366200-9ec8-4bd9-bb5e-9a280c803a9c",
  "when: 20191008135826Z",
  "duration: 0.252280",
  "kw:" {
    "key": "Server-Cert cert-pki-ca",
    "configfile":  "/var/lib/pki/pki-tomcat/conf/ca/CS.cfg"
    }
}

Copy to Clipboard Toggle word wrap
{
  "source: ipahealthcheck.dogtag.ca",
  "check: DogtagCertsConfigCheck",
  "result: CRITICAL",
  "uuid: 59d66200-1447-4b3b-be01-89810c803a98",
  "when: 20191008135912Z",
  "duration: 0.002022",
  "kw:" {
    "exception": "NSDB /etc/pki/pki-tomcat/alias not initialized",
    }
}

第107章

107.1.

表107.1
  

Copy to Clipboard Toggle word wrap
# ipa-healthcheck --list-sources

107.2.

  • Copy to Clipboard Toggle word wrap
    # ipa-healthcheck --source=ipahealthcheck.system.filesystemspace --failures-only

Copy to Clipboard Toggle word wrap
[]

Copy to Clipboard Toggle word wrap
{
  "source": "ipahealthcheck.system.filesystemspace",
  "check": "FileSystemSpaceCheck",
  "result": "ERROR",
  "kw": {
    "msg": "/var/lib/dirsrv: free space under threshold: 0 MiB < 1024 MiB",
    "store": "/var/lib/dirsrv",
    "free_space": 0,
    "threshold": 1024
  }
}

第108章

108.1.

Copy to Clipboard Toggle word wrap
# ipa-healthcheck --list-sources

注記

108.2.

  1. Copy to Clipboard Toggle word wrap
    # ipa-healthcheck --source=ipahealthcheck.ipa.files --failures-only

Copy to Clipboard Toggle word wrap
# ipa-healthcheck --source=ipahealthcheck.ipa.files --failures-only
[]

Copy to Clipboard Toggle word wrap
{
  "source": "ipahealthcheck.ipa.files",
  "check": "IPAFileNSSDBCheck",
  "result": "WARNING",
  "kw": {
    "key": "_etc_dirsrv_slapd-EXAMPLE-TEST_pkcs11.txt_mode",
    "path": "/etc/dirsrv/slapd-EXAMPLE-TEST/pkcs11.txt",
    "type": "mode",
    "expected": "0640",
    "got": "0666",
    "msg": "Permissions of /etc/dirsrv/slapd-EXAMPLE-TEST/pkcs11.txt are 0666 and should be 0640"
  }
}

第109章

109.1.

Copy to Clipboard Toggle word wrap
# ipa-healthcheck --list-sources

注記

注記

109.2.

  • Copy to Clipboard Toggle word wrap
    # ipa-healthcheck --source=ipahealthcheck.ds.replication --source=ipahealthcheck.ipa.topology

    • Copy to Clipboard Toggle word wrap
      {
        "source": "ipahealthcheck.ipa.topology",
        "check": "IPATopologyDomainCheck",
        "result": "SUCCESS",
        "kw": {
          "suffix": "domain"
        }
      }
    • Copy to Clipboard Toggle word wrap
      {
        "source": "ipahealthcheck.ipa.topology",
        "check": "IPATopologyDomainCheck",
        "result": "ERROR",
        "uuid": d6ce3332-92da-423d-9818-e79f49ed321f
        "when": 20191007115449Z
        "duration": 0.005943
        "kw": {
          "msg": "topologysuffix-verify domain failed, server2 is not connected (server2_139664377356472 in MainThread)"
        }
      }

109.3.

第110章

110.1.

Copy to Clipboard Toggle word wrap
# ipa-healthcheck --list-sources

110.2.

  • Copy to Clipboard Toggle word wrap
    # ipa-healthcheck --source ipahealthcheck.ipa.idns

    Copy to Clipboard Toggle word wrap
    {
        "source": "ipahealthcheck.ipa.idns",
        "check": "IPADNSSystemRecordsCheck",
        "result": "SUCCESS",
        "uuid": "eb7a3b68-f6b2-4631-af01-798cac0eb018",
        "when": "20200415143339Z",
        "duration": "0.210471",
        "kw": {
          "key": "_ldap._tcp.idm.example.com.:server1.idm.example.com."
        }
    }

    Copy to Clipboard Toggle word wrap
    {
        "source": "ipahealthcheck.ipa.idns",
        "check": "IPADNSSystemRecordsCheck",
        "result": "WARNING",
        "uuid": "972b7782-1616-48e0-bd5c-49a80c257895",
        "when": "20200409100614Z",
        "duration": "0.203049",
        "kw": {
          "msg": "Got {count} ipa-ca A records, expected {expected}",
          "count": 2,
          "expected": 1
        }
    }

第111章

  • Copy to Clipboard Toggle word wrap
    # ipa server-state replica.idm.example.com --state=hidden
  • Copy to Clipboard Toggle word wrap
    # ipa server-state replica.idm.example.com --state=enabled
  • Copy to Clipboard Toggle word wrap
    # ipa config-show

第112章

112.1.

重要

112.2.

112.3.

警告

  1. Copy to Clipboard Toggle word wrap
    $ ldapmodify -x -D "cn=Directory Manager" -W -h server.example.com -p 389
    Enter LDAP Password:
    dn: cn=config
    changetype: modify
    replace: nsslapd-allow-anonymous-access
    nsslapd-allow-anonymous-access: rootdse
    
    modifying entry "cn=config"
  2. Copy to Clipboard Toggle word wrap
    # systemctl restart dirsrv.target

  • Copy to Clipboard Toggle word wrap
    $ ldapsearch -x -D "cn=Directory Manager" -b cn=config -W -h server.example.com  -p 389 nsslapd-allow-anonymous-access | grep nsslapd-allow-anonymous-access
    Enter LDAP Password:
    # requesting: nsslapd-allow-anonymous-access
    nsslapd-allow-anonymous-access: rootdse

第113章

重要

113.1.

注記

  1. Copy to Clipboard Toggle word wrap
    [root@ipaserver ~]# yum install ipa-server-trust-ad samba-client
  2. Copy to Clipboard Toggle word wrap
    [root@ipaserver ~]# kinit admin
  3. Copy to Clipboard Toggle word wrap
    [root@ipaserver ~]# ipa-adtrust-install

  4. Copy to Clipboard Toggle word wrap
    WARNING: The smb.conf already exists. Running ipa-adtrust-install will break your existing Samba configuration.
    
    Do you wish to continue? [no]: yes
  5. Copy to Clipboard Toggle word wrap
    Do you want to enable support for trusted domains in Schema Compatibility plugin?
    This will allow clients older than SSSD 1.9 and non-Linux clients to work with trusted users.
    
    Enable trusted domains support in slapi-nis? [no]: yes
  6. Copy to Clipboard Toggle word wrap
    Trust is configured but no NetBIOS domain name found, setting it now.
    Enter the NetBIOS name for the IPA domain.
    Only up to 15 uppercase ASCII letters, digits and dashes are allowed.
    Example: EXAMPLE.
    
    NetBIOS domain name [IDM]:
  7. Copy to Clipboard Toggle word wrap
    Do you want to run the ipa-sidgen task? [no]: yes

  8. Copy to Clipboard Toggle word wrap
    [root@ipaserver ~]# net conf setparm global 'rpc server dynamic port range' 55000-65000
    [root@ipaserver ~]# firewall-cmd --add-port=55000-65000/tcp
    [root@ipaserver ~]# firewall-cmd --runtime-to-permanent
  9. Copy to Clipboard Toggle word wrap
    [root@ipaserver ~]# ipactl restart
  10. Copy to Clipboard Toggle word wrap
    [root@ipaserver ~]# smbclient -L ipaserver.idm.example.com -U user_name --use-kerberos=required
    lp_load_ex: changing to config backend registry
        Sharename       Type      Comment
        ---------       ----      -------
        IPC$            IPC       IPC Service (Samba 4.15.2)
    ...

113.2.

  1. Copy to Clipboard Toggle word wrap
    [root@idm_client]# yum install ipa-client-samba
  2. Copy to Clipboard Toggle word wrap
    [root@idm_client]# ipa-client-samba
    Searching for IPA server...
    IPA server: DNS discovery
    Chosen IPA master: idm_server.idm.example.com
    SMB principal to be created: cifs/idm_client.idm.example.com@IDM.EXAMPLE.COM
    NetBIOS name to be used: IDM_CLIENT
    Discovered domains to use:
    
     Domain name: idm.example.com
    NetBIOS name: IDM
             SID: S-1-5-21-525930803-952335037-206501584
        ID range: 212000000 - 212199999
    
     Domain name: ad.example.com
    NetBIOS name: AD
             SID: None
        ID range: 1918400000 - 1918599999
    
    Continue to configure the system with these values? [no]: yes
    Samba domain member is configured. Please check configuration at /etc/samba/smb.conf and start smb and winbind services
  3. Copy to Clipboard Toggle word wrap
    [homes]
        read only = no
  4. Copy to Clipboard Toggle word wrap
    [root@idm_client]# firewall-cmd --permanent --add-service=samba-client
    [root@idm_client]# firewall-cmd --reload
  5. Copy to Clipboard Toggle word wrap
    [root@idm_client]# systemctl enable --now smb winbind

  • Copy to Clipboard Toggle word wrap
    $ smbclient -L idm_client.idm.example.com -U user_name --use-kerberos=required
    lp_load_ex: changing to config backend registry
    
        Sharename       Type      Comment
        ---------       ----      -------
        example         Disk
        IPC$            IPC       IPC Service (Samba 4.15.2)
    ...

113.3.

  1. Copy to Clipboard Toggle word wrap
    [root@idm_client]# kinit -k
  2. Copy to Clipboard Toggle word wrap
    [root@idm_client]# ipa idrange-find --name="AD.EXAMPLE.COM_id_range" --raw
    ---------------
    1 range matched
    ---------------
      cn: AD.EXAMPLE.COM_id_range
      ipabaseid: 1918400000
      ipaidrangesize: 200000
      ipabaserid: 0
      ipanttrusteddomainsid: S-1-5-21-968346183-862388825-1738313271
      iparangetype: ipa-ad-trust
    ----------------------------
    Number of entries returned 1
    ----------------------------

  3. Copy to Clipboard Toggle word wrap
    maximum_range = ipabaseid + ipaidrangesize - 1

  4. Copy to Clipboard Toggle word wrap
    idmap config AD : range = 1918400000 - 1918599999
    idmap config AD : backend = sss

  5. Copy to Clipboard Toggle word wrap
    [root@idm_client]# systemctl restart smb winbind

  • Copy to Clipboard Toggle word wrap
    $ smbclient -L idm_client.idm.example.com -U user_name --use-kerberos=required
    lp_load_ex: changing to config backend registry
    
        Sharename       Type      Comment
        ---------       ----      -------
        example         Disk
        IPC$            IPC       IPC Service (Samba 4.15.2)
    ...

113.4.

第114章

114.1.

114.2.

114.3.

  1. Copy to Clipboard Toggle word wrap
    [root@server ~]# kinit admin
  2. Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa idp-add my-keycloak-idp \
                     --provider keycloak --organization main \
                     --base-url keycloak.idm.example.com:8443/auth \
                     --client-id id13778
    ------------------------------------------------
    Added Identity Provider reference "my-keycloak-idp"
    ------------------------------------------------
      Identity Provider reference name: my-keycloak-idp
      Authorization URI: https://keycloak.idm.example.com:8443/auth/realms/main/protocol/openid-connect/auth
      Device authorization URI: https://keycloak.idm.example.com:8443/auth/realms/main/protocol/openid-connect/auth/device
      Token URI: https://keycloak.idm.example.com:8443/auth/realms/main/protocol/openid-connect/token
      User info URI: https://keycloak.idm.example.com:8443/auth/realms/main/protocol/openid-connect/userinfo
      Client identifier: ipa_oidc_client
      Scope: openid email
      External IdP user identifier attribute: email

  • Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa idp-show my-keycloak-idp

114.4.

   

Copy to Clipboard Toggle word wrap
# ipa idp-add my-azure-idp \
  --provider microsoft \
  --organization main \
  --client-id <azure_client_id>

Copy to Clipboard Toggle word wrap
# ipa idp-add my-google-idp \
  --provider google \
  --client-id <google_client_id>

Copy to Clipboard Toggle word wrap
# ipa idp-add my-github-idp \
  --provider github \
  --client-id <github_client_id>

Copy to Clipboard Toggle word wrap
# ipa idp-add my-keycloak-idp \
  --provider keycloak \
  --organization main \
  --base-url keycloak.idm.example.com:8443/auth \
  --client-id <keycloak_client_id>
注記

Copy to Clipboard Toggle word wrap
# ipa idp-add my-okta-idp \
  --provider okta
  --base-url dev-12345.okta.com \
  --client-id <okta_client_id>

114.5.

注記

114.6.

  1. Copy to Clipboard Toggle word wrap
    [root@server ~]# kinit admin
    • Copy to Clipboard Toggle word wrap
      [root@server ~]# ipa idp-find keycloak
    • Copy to Clipboard Toggle word wrap
      [root@server ~]# ipa idp-show my-keycloak-idp
    • Copy to Clipboard Toggle word wrap
      [root@server ~]# ipa idp-mod my-keycloak-idp --secret
    • Copy to Clipboard Toggle word wrap
      [root@server ~]# ipa idp-del my-keycloak-idp

114.7.

  • Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa user-mod idm-user-with-external-idp \
                   --idp my-keycloak-idp \
                   --idp-user-id idm-user-with-external-idp@idm.example.com \
                   --user-auth-type=idp
    ---------------------------------
    Modified user "idm-user-with-external-idp"
    ---------------------------------
      User login: idm-user-with-external-idp
      First name: Test
      Last name: User1
      Home directory: /home/idm-user-with-external-idp
      Login shell: /bin/sh
      Principal name: idm-user-with-external-idp@idm.example.com
      Principal alias: idm-user-with-external-idp@idm.example.com
      Email address: idm-user-with-external-idp@idm.example.com
      UID: 35000003
      GID: 35000003
      User authentication types: idp
      External IdP configuration: keycloak
      External IdP user identifier: idm-user-with-external-idp@idm.example.com
      Account disabled: False
      Password: False
      Member of groups: ipausers
      Kerberos keys available: False

  • Copy to Clipboard Toggle word wrap
    [root@server ~]# ipa user-show idm-user-with-external-idp
      User login: idm-user-with-external-idp
      First name: Test
      Last name: User1
      Home directory: /home/idm-user-with-external-idp
      Login shell: /bin/sh
      Principal name: idm-user-with-external-idp@idm.example.com
      Principal alias: idm-user-with-external-idp@idm.example.com
      Email address: idm-user-with-external-idp@idm.example.com
      ID: 35000003
      GID: 35000003
      User authentication types: idp
      External IdP configuration: keycloak
      External IdP user identifier: idm-user-with-external-idp@idm.example.com
      Account disabled: False
      Password: False
      Member of groups: ipausers
      Kerberos keys available: False

114.8.

  1. Copy to Clipboard Toggle word wrap
    $ kinit -n -c ./fast.ccache
  2. Copy to Clipboard Toggle word wrap
    $ klist -c fast.ccache
    Ticket cache: FILE:fast.ccache
    Default principal: WELLKNOWN/ANONYMOUS@WELLKNOWN:ANONYMOUS
    
    Valid starting       Expires              Service principal
    03/03/2024 13:36:37  03/04/2024 13:14:28  krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM
  3. Copy to Clipboard Toggle word wrap
    [root@client ~]# kinit -T ./fast.ccache idm-user-with-external-idp
    Authenticate at https://oauth2.idp.com:8443/auth/realms/master/device?user_code=YHMQ-XKTL and press ENTER.:

  • Copy to Clipboard Toggle word wrap
    [root@client ~]# klist -C
    Ticket cache: KCM:0:58420
    Default principal: idm-user-with-external-idp@IDM.EXAMPLE.COM
    
    Valid starting     Expires            Service principal
    05/09/22 07:48:23  05/10/22 07:03:07  krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM
    config: fast_avail(krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM) = yes
    08/17/2022 20:22:45  08/18/2022 20:22:43  krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM
    config: pa_type(krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM) = 152

114.9.

  1. Copy to Clipboard Toggle word wrap
    [user@client ~]$ ssh idm-user-with-external-idp@client.idm.example.com
    (idm-user-with-external-idp@client.idm.example.com) Authenticate at https://oauth2.idp.com:8443/auth/realms/main/device?user_code=XYFL-ROYR and press ENTER.

  • Copy to Clipboard Toggle word wrap
    [idm-user-with-external-idp@client ~]$ klist -C
    Ticket cache: KCM:0:58420
    Default principal: idm-user-with-external-idp@IDM.EXAMPLE.COM
    
    Valid starting     Expires            Service principal
    05/09/22 07:48:23  05/10/22 07:03:07  krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM
    config: fast_avail(krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM) = yes
    08/17/2022 20:22:45  08/18/2022 20:22:43  krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM
    config: pa_type(krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM) = 152

114.10.

  

  

  

Copy to Clipboard Toggle word wrap
[root@client ~]# ipa idp-add MySSO --provider keycloak \
    --org main --base-url keycloak.domain.com:8443/auth \
    --client-id <your-client-id>

  

Copy to Clipboard Toggle word wrap
[root@client ~]# ipa idp-add MyOkta --provider okta --base-url dev-12345.okta.com --client-id <your-client-id>

  

第115章

115.1.

115.2.

115.3.

  1. Copy to Clipboard Toggle word wrap
    ---
    - name: Configure external IdP
      hosts: ipaserver
      become: false
      gather_facts: false
    
      tasks:
      - name: Ensure a reference to github external provider is available
        ipaidp:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: github_idp
          provider: github
          client_ID: 2efe1acffe9e8ab869f4
          secret: 656a5228abc5f9545c85fa626aecbf69312d398c
          idp_user_id: my_github_account_name
  2. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory configure-external-idp-reference.yml

  • Copy to Clipboard Toggle word wrap
    [idmuser@idmclient ~]$ ipa idp-show github_idp

115.4.

  1. Copy to Clipboard Toggle word wrap
    ---
    - name: Ensure an IdM user uses an external IdP to authenticate to IdM
      hosts: ipaserver
      become: false
      gather_facts: false
    
      tasks:
      - name: Retrieve Github user ID
        ansible.builtin.uri:
          url: “https://api.github.com/users/my_github_account_name”
          method: GET
          headers:
            Accept: “application/vnd.github.v3+json”
        register: user_data
    
      - name: Ensure IdM user exists with an external IdP authentication
        ipauser:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: idm-user-with-external-idp
          first: Example
          last: User
          userauthtype: idp
          idp: github_idp
          idp_user_id: my_github_account_name
  2. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory enable-user-to-authenticate-via-external-idp.yml

  • Copy to Clipboard Toggle word wrap
    $ ipa user-show idm-user-with-external-idp
    User login: idm-user-with-external-idp
    First name: Example
    Last name: User
    Home directory: /home/idm-user-with-external-idp
    Login shell: /bin/sh
    Principal name: idm-user-with-external-idp@idm.example.com
    Principal alias: idm-user-with-external-idp@idm.example.com
    Email address: idm-user-with-external-idp@idm.example.com
    ID: 35000003
    GID: 35000003
    User authentication types: idp
    External IdP configuration: github
    External IdP user identifier: idm-user-with-external-idp@idm.example.com
    Account disabled: False
    Password: False
    Member of groups: ipausers
    Kerberos keys available: False

115.5.

  1. Copy to Clipboard Toggle word wrap
    $ kinit -n -c ./fast.ccache
  2. Copy to Clipboard Toggle word wrap
    $ klist -c fast.ccache
    Ticket cache: FILE:fast.ccache
    Default principal: WELLKNOWN/ANONYMOUS@WELLKNOWN:ANONYMOUS
    
    Valid starting       Expires              Service principal
    03/03/2024 13:36:37  03/04/2024 13:14:28  krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM
  3. Copy to Clipboard Toggle word wrap
    [root@client ~]# kinit -T ./fast.ccache idm-user-with-external-idp
    Authenticate at https://oauth2.idp.com:8443/auth/realms/master/device?user_code=YHMQ-XKTL and press ENTER.:

  • Copy to Clipboard Toggle word wrap
    [root@client ~]# klist -C
    Ticket cache: KCM:0:58420
    Default principal: idm-user-with-external-idp@IDM.EXAMPLE.COM
    
    Valid starting     Expires            Service principal
    05/09/22 07:48:23  05/10/22 07:03:07  krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM
    config: fast_avail(krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM) = yes
    08/17/2022 20:22:45  08/18/2022 20:22:43  krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM
    config: pa_type(krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM) = 152

115.6.

  1. Copy to Clipboard Toggle word wrap
    [user@client ~]$ ssh idm-user-with-external-idp@client.idm.example.com
    (idm-user-with-external-idp@client.idm.example.com) Authenticate at https://oauth2.idp.com:8443/auth/realms/main/device?user_code=XYFL-ROYR and press ENTER.

  • Copy to Clipboard Toggle word wrap
    [idm-user-with-external-idp@client ~]$ klist -C
    Ticket cache: KCM:0:58420
    Default principal: idm-user-with-external-idp@IDM.EXAMPLE.COM
    
    Valid starting     Expires            Service principal
    05/09/22 07:48:23  05/10/22 07:03:07  krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM
    config: fast_avail(krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM) = yes
    08/17/2022 20:22:45  08/18/2022 20:22:43  krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM
    config: pa_type(krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM) = 152

115.7.

  

  

  

Copy to Clipboard Toggle word wrap
---
- name: Playbook to manage IPA idp
  hosts: ipaserver
  become: false

  tasks:
  - name: Ensure keycloak idp my-keycloak-idp is present using provider
    ipaidp:
      ipaadmin_password: "{{ ipaadmin_password }}"
      name: my-keycloak-idp
      provider: keycloak
      organization: main
      base_url: keycloak.domain.com:8443/auth
      client_id: my-keycloak-client-id

  

Copy to Clipboard Toggle word wrap
---
- name: Playbook to manage IPA idp
  hosts: ipaserver
  become: false

  tasks:
  - name: Ensure okta idp my-okta-idp is present using provider
    ipaidp:
      ipaadmin_password: "{{ ipaadmin_password }}"
      name: my-okta-idp
      provider: okta
      base_url: dev-12345.okta.com
      client_id: my-okta-client-id

  

第116章

第117章

117.1.

117.2.

117.3.

Copy to Clipboard Toggle word wrap
(host.example.com,,nisdomain.example.com)
(-,user,nisdomain.example.com)

117.4.

  1. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to manage IPA netgroup.
      hosts: ipaserver
      become: no
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure netgroup members are present
        ipanetgroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: TestNetgroup1
  2. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory_/netgroup-present.yml

117.5.

  1. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to manage IPA netgroup.
      hosts: ipaserver
      become: no
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure netgroup members are present
        ipanetgroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: TestNetgroup1
          user: user1,user2
          group: group1
          host: idmclient1
          netgroup: admins
          action: member
  2. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory_/IdM-members-present-in-a-netgroup.yml

117.6.

  1. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to manage IPA netgroup.
      hosts: ipaserver
      become: no
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure netgroup user, "user1", is absent
        ipanetgroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: TestNetgroup1
          user: "user1"
          action: member
          state: absent
  2. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory_/IdM-member-absent-from-a-netgroup.yml

117.7.

  1. Copy to Clipboard Toggle word wrap
    ---
    - name: Playbook to manage IPA netgroup.
      hosts: ipaserver
      become: no
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure netgroup my_netgroup1 is absent
        ipanetgroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: my_netgroup1
          state: absent
  2. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory_/netgroup-absent.yml

第118章

118.1.

  1. Copy to Clipboard Toggle word wrap
    [root@ipaserver ~]# ipa-nis-manage enable
    [root@ipaserver ~]# ipa-compat-manage enable
  2. Copy to Clipboard Toggle word wrap
    [root@ipaserver ~]# ldapmodify -x -D 'cn=directory manager' -W
    dn: cn=NIS Server,cn=plugins,cn=config
    changetype: modify
    add: nsslapd-pluginarg0
    nsslapd-pluginarg0: 514
    警告

  3. Copy to Clipboard Toggle word wrap
    [root@ipaserver ~]# systemctl enable rpcbind.service
    [root@ipaserver ~]# systemctl start rpcbind.service
  4. Copy to Clipboard Toggle word wrap
    [root@ipaserver ~]# systemctl restart dirsrv.target

118.2.

  1. Copy to Clipboard Toggle word wrap
    [root@nis-server ~]# yum install yp-tools -y
  2. Copy to Clipboard Toggle word wrap
    #!/bin/sh
    # $1 is the NIS domain, $2 is the primary NIS server
    ypcat -d $1 -h $2 passwd > /dev/shm/nis-map.passwd 2>&1
    
    IFS=$'\n'
    for line in $(cat /dev/shm/nis-map.passwd) ; do
    	IFS=' '
    	username=$(echo $line | cut -f1 -d:)
    	# Not collecting encrypted password because we need cleartext password
    	# to create kerberos key
    	uid=$(echo $line | cut -f3 -d:)
    	gid=$(echo $line | cut -f4 -d:)
    	gecos=$(echo $line | cut -f5 -d:)
    	homedir=$(echo $line | cut -f6 -d:)
    	shell=$(echo $line | cut -f7 -d:)
    
    	# Now create this entry
    	echo passw0rd1 | ipa user-add $username --first=NIS --last=USER \
    	     --password --gidnumber=$gid --uid=$uid --gecos="$gecos" --homedir=$homedir \
    	     --shell=$shell
    	ipa user-show $username
    done
  3. Copy to Clipboard Toggle word wrap
    [root@nis-server ~]# kinit admin
  4. Copy to Clipboard Toggle word wrap
    [root@nis-server ~]# sh /root/nis-users.sh nisdomain nis-server.example.com
    重要

118.3.

  1. Copy to Clipboard Toggle word wrap
    [root@nis-server ~]# yum install yp-tools -y
  2. Copy to Clipboard Toggle word wrap
    #!/bin/sh
    # $1 is the NIS domain, $2 is the primary NIS server
    ypcat -d $1 -h $2 group > /dev/shm/nis-map.group 2>&1
    
    IFS=$'\n'
    for line in $(cat /dev/shm/nis-map.group); do
    	IFS=' '
    	groupname=$(echo $line | cut -f1 -d:)
    	# Not collecting encrypted password because we need cleartext password
    	# to create kerberos key
    	gid=$(echo $line | cut -f3 -d:)
    	members=$(echo $line | cut -f4 -d:)
    
    	# Now create this entry
    	ipa group-add $groupname --desc=NIS_GROUP_$groupname --gid=$gid
    	if [ -n "$members" ]; then
    		useropts=$(eval echo --users={$members})
    		ipa group-add-member $groupname $useropts
    	fi
    	ipa group-show $groupname
    done
    注記

  3. Copy to Clipboard Toggle word wrap
    [root@nis-server ~]# kinit admin
  4. Copy to Clipboard Toggle word wrap
    [root@nis-server ~]# sh /root/nis-groups.sh nisdomain nis-server.example.com

118.4.

注記

  1. Copy to Clipboard Toggle word wrap
    [root@nis-server ~]# yum install yp-tools -y
  2. Copy to Clipboard Toggle word wrap
    #!/bin/sh
    # $1 is the NIS domain, $2 is the primary NIS server
    ypcat -d $1 -h $2 hosts | egrep -v "localhost|127.0.0.1" > /dev/shm/nis-map.hosts 2>&1
    
    IFS=$'\n'
    for line in $(cat /dev/shm/nis-map.hosts); do
    	IFS=' '
    	ipaddress=$(echo $line | awk '{print $1}')
    	hostname=$(echo $line | awk '{print $2}')
    	primary=$(ipa env xmlrpc_uri | tr -d '[:space:]' | cut -f3 -d: | cut -f3 -d/)
    	domain=$(ipa env domain | tr -d '[:space:]' | cut -f2 -d:)
    	if [ $(echo $hostname | grep "\." |wc -l) -eq 0 ] ; then
    		hostname=$(echo $hostname.$domain)
    	fi
    	zone=$(echo $hostname | cut -f2- -d.)
    	if [ $(ipa dnszone-show $zone 2>/dev/null | wc -l) -eq 0 ] ; then
    		ipa dnszone-add --name-server=$primary --admin-email=root.$primary
    	fi
    	ptrzone=$(echo $ipaddress | awk -F. '{print $3 "." $2 "." $1 ".in-addr.arpa."}')
    	if [ $(ipa dnszone-show $ptrzone 2>/dev/null | wc -l) -eq 0 ] ; then
    		ipa dnszone-add  $ptrzone --name-server=$primary --admin-email=root.$primary
    	fi
    	# Now create this entry
    	ipa host-add $hostname --ip-address=$ipaddress
    	ipa host-show $hostname
    done
  3. Copy to Clipboard Toggle word wrap
    [root@nis-server ~]# kinit admin
  4. Copy to Clipboard Toggle word wrap
    [root@nis-server ~]# sh /root/nis-hosts.sh nisdomain nis-server.example.com
    注記

118.5.

  1. Copy to Clipboard Toggle word wrap
    [root@nis-server ~]# yum install yp-tools -y
  2. Copy to Clipboard Toggle word wrap
    #!/bin/sh
    # $1 is the NIS domain, $2 is the primary NIS server
    ypcat -k -d $1 -h $2 netgroup > /dev/shm/nis-map.netgroup 2>&1
    
    IFS=$'\n'
    for line in $(cat /dev/shm/nis-map.netgroup); do
    	IFS=' '
    	netgroupname=$(echo $line | awk '{print $1}')
    	triples=$(echo $line | sed "s/^$netgroupname //")
    	echo "ipa netgroup-add $netgroupname --desc=NIS_NG_$netgroupname"
    	if [ $(echo $line | grep "(," | wc -l) -gt 0 ]; then
    		echo "ipa netgroup-mod $netgroupname --hostcat=all"
    	fi
    	if [ $(echo $line | grep ",," | wc -l) -gt 0 ]; then
    		echo "ipa netgroup-mod $netgroupname --usercat=all"
    	fi
    
    	for triple in $triples; do
    		triple=$(echo $triple | sed -e 's/-//g' -e 's/(//' -e 's/)//')
    		if [ $(echo $triple | grep ",.*," | wc -l) -gt 0 ]; then
    			hostname=$(echo $triple | cut -f1 -d,)
    			username=$(echo $triple | cut -f2 -d,)
    			domain=$(echo $triple | cut -f3 -d,)
    			hosts=""; users=""; doms="";
    			[ -n "$hostname" ] && hosts="--hosts=$hostname"
    			[ -n "$username" ] && users="--users=$username"
    			[ -n "$domain"   ] && doms="--nisdomain=$domain"
    			echo "ipa netgroup-add-member $netgroup $hosts $users $doms"
    		else
    			netgroup=$triple
    			echo "ipa netgroup-add $netgroup --desc=<NIS_NG>_$netgroup"
    		fi
    	done
    done
  3. Copy to Clipboard Toggle word wrap
    [root@nis-server ~]# kinit admin
  4. Copy to Clipboard Toggle word wrap
    [root@nis-server ~]# sh /root/nis-netgroups.sh nisdomain nis-server.example.com

118.6.

  1. Copy to Clipboard Toggle word wrap
    [root@nis-server ~]# yum install yp-tools -y
  2. Copy to Clipboard Toggle word wrap
    #!/bin/sh
    # $1 is for the automount entry in ipa
    
    ipa automountlocation-add $1
    
    # $2 is the NIS domain, $3 is the primary NIS server, $4 is the map name
    
    ypcat -k -d $2 -h $3 $4 > /dev/shm/nis-map.$4 2>&1
    
    ipa automountmap-add $1 $4
    
    basedn=$(ipa env basedn | tr -d '[:space:]' | cut -f2 -d:)
    cat > /tmp/amap.ldif <<EOF
    dn: nis-domain=$2+nis-map=$4,cn=NIS Server,cn=plugins,cn=config
    objectClass: extensibleObject
    nis-domain: $2
    nis-map: $4
    nis-base: automountmapname=$4,cn=$1,cn=automount,$basedn
    nis-filter: (objectclass=\*)
    nis-key-format: %{automountKey}
    nis-value-format: %{automountInformation}
    EOF
    
    # $5 is the LDAP server
    
    ldapadd -x -h $5 -D "cn=Directory Manager" -W -f /tmp/amap.ldif
    
    IFS=$'\n'
    for line in $(cat /dev/shm/nis-map.$4); do
    	IFS=" "
    	key=$(echo "$line" | awk '{print $1}')
    	info=$(echo "$line" | sed -e "s^$key[ \t]*")
    	ipa automountkey-add nis $4 --key="$key" --info="$info"
    done
    注記

  3. Copy to Clipboard Toggle word wrap
    [root@nis-server ~]# kinit admin
  4. Copy to Clipboard Toggle word wrap
    [root@nis-server ~]# sh /root/nis-automounts.sh location nisdomain
         nis-server.example.com map_name

第119章

  • 注記

重要

119.1.

Copy to Clipboard Toggle word wrap
dn:
automountmapname=auto.master,cn=default,cn=automount,dc=idm,dc=example,dc=com
objectClass: automountMap
objectClass: top
automountMapName: auto.master

119.2.

  1. Copy to Clipboard Toggle word wrap
    # kinit admin
  2. Copy to Clipboard Toggle word wrap
    # ipa service-add nfs/nfs_server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    # ipa-getkeytab -s idm_server.idm.example.com -p nfs/nfs_server.idm.example.com -k /etc/krb5.keytab
  4. Copy to Clipboard Toggle word wrap
    # klist -k /etc/krb5.keytab
    Keytab name: FILE:/etc/krb5.keytab
    KVNO Principal
    ---- --------------------------------------------------------------------------
       1 nfs/nfs_server.idm.example.com@IDM.EXAMPLE.COM
       1 nfs/nfs_server.idm.example.com@IDM.EXAMPLE.COM
       1 nfs/nfs_server.idm.example.com@IDM.EXAMPLE.COM
       1 nfs/nfs_server.idm.example.com@IDM.EXAMPLE.COM
       7 host/nfs_server.idm.example.com@IDM.EXAMPLE.COM
       7 host/nfs_server.idm.example.com@IDM.EXAMPLE.COM
       7 host/nfs_server.idm.example.com@IDM.EXAMPLE.COM
       7 host/nfs_server.idm.example.com@IDM.EXAMPLE.COM

  5. Copy to Clipboard Toggle word wrap
    #  ipa-client-automount
    Searching for IPA server...
    IPA server: DNS discovery
    Location: default
    Continue to configure the system with these values? [no]: yes
    Configured /etc/idmapd.conf
    Restarting sssd, waiting for it to become available.
    Started autofs
  6. Copy to Clipboard Toggle word wrap
    /nfs/projects/      	192.0.2.0/24(rw,sec=krb5i)

    Copy to Clipboard Toggle word wrap
    /nfs/projects/      	192.0.2.0/24(rw,sec=krb5:krb5i:krb5p)
  7. Copy to Clipboard Toggle word wrap
    # exportfs -r

119.3.

  1. Copy to Clipboard Toggle word wrap
    $ ipa automountlocation-add raleigh
    ----------------------------------
    Added automount location "raleigh"
    ----------------------------------
      Location: raleigh
  2. Copy to Clipboard Toggle word wrap
    $ ipa automountmap-add raleigh auto.devel
    --------------------------------
    Added automount map "auto.devel"
    --------------------------------
      Map: auto.devel
    1. Copy to Clipboard Toggle word wrap
      $ ipa automountkey-add raleigh auto.devel --key='*' --info='-sec=krb5p,vers=4 nfs-server.idm.example.com:/exports/&'
      -----------------------
      Added automount key "*"
      -----------------------
        Key: *
        Mount information: -sec=krb5p,vers=4 nfs-server.idm.example.com:/exports/&
    2. Copy to Clipboard Toggle word wrap
      $ ipa automountkey-add raleigh auto.master --key=/devel --info=auto.devel
      ----------------------------
      Added automount key "/devel"
      ----------------------------
        Key: /devel
        Mount information: auto.devel

119.4.

  1. Copy to Clipboard Toggle word wrap
    # ipa-client-automount --location raleigh -U
  2. Copy to Clipboard Toggle word wrap
    # systemctl stop autofs ; sss_cache -E ; systemctl start autofs

119.5.

    1. Copy to Clipboard Toggle word wrap
      $ ssh idm_user@idm-client.idm.example.com
      Password:
    2. Copy to Clipboard Toggle word wrap
      $ kinit idm_user
    3. Copy to Clipboard Toggle word wrap
      $ ipa user-show idm_user
        User login: idm_user
        [...]
        Member of groups: developers, ipausers
    4. Copy to Clipboard Toggle word wrap
      $ cd /devel/project
    5. Copy to Clipboard Toggle word wrap
      $ ls
      rw_file
    6. Copy to Clipboard Toggle word wrap
      $ echo "idm_user can write into the file" > rw_file
    7. Copy to Clipboard Toggle word wrap
      $ cat rw_file
      this is a read-write file
      idm_user can write into the file

第120章

重要

 

120.1.

Copy to Clipboard Toggle word wrap
dn:
automountmapname=auto.master,cn=default,cn=automount,dc=idm,dc=example,dc=com
objectClass: automountMap
objectClass: top
automountMapName: auto.master

120.2.

  1. Copy to Clipboard Toggle word wrap
    # kinit admin
  2. Copy to Clipboard Toggle word wrap
    # ipa service-add nfs/nfs_server.idm.example.com
  3. Copy to Clipboard Toggle word wrap
    # ipa-getkeytab -s idm_server.idm.example.com -p nfs/nfs_server.idm.example.com -k /etc/krb5.keytab
  4. Copy to Clipboard Toggle word wrap
    # klist -k /etc/krb5.keytab
    Keytab name: FILE:/etc/krb5.keytab
    KVNO Principal
    ---- --------------------------------------------------------------------------
       1 nfs/nfs_server.idm.example.com@IDM.EXAMPLE.COM
       1 nfs/nfs_server.idm.example.com@IDM.EXAMPLE.COM
       1 nfs/nfs_server.idm.example.com@IDM.EXAMPLE.COM
       1 nfs/nfs_server.idm.example.com@IDM.EXAMPLE.COM
       7 host/nfs_server.idm.example.com@IDM.EXAMPLE.COM
       7 host/nfs_server.idm.example.com@IDM.EXAMPLE.COM
       7 host/nfs_server.idm.example.com@IDM.EXAMPLE.COM
       7 host/nfs_server.idm.example.com@IDM.EXAMPLE.COM

  5. Copy to Clipboard Toggle word wrap
    #  ipa-client-automount
    Searching for IPA server...
    IPA server: DNS discovery
    Location: default
    Continue to configure the system with these values? [no]: yes
    Configured /etc/idmapd.conf
    Restarting sssd, waiting for it to become available.
    Started autofs
  6. Copy to Clipboard Toggle word wrap
    /nfs/projects/      	192.0.2.0/24(rw,sec=krb5i)

    Copy to Clipboard Toggle word wrap
    /nfs/projects/      	192.0.2.0/24(rw,sec=krb5:krb5i:krb5p)
  7. Copy to Clipboard Toggle word wrap
    # exportfs -r

120.3.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    $ cp /usr/share/doc/ansible-freeipa/playbooks/automount/automount-location-present.yml automount-location-map-and-key-present.yml
    Copy to Clipboard Toggle word wrap
    ---
    - name: Automount location present example
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure automount location is present
        ipaautomountlocation:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: raleigh
          state: present
    1. Copy to Clipboard Toggle word wrap
      [...]
        vars_files:
        - /home/user_name/MyPlaybooks/secret.yml
        tasks:
      [...]
        - name: ensure map named auto.devel in location raleigh is created
          ipaautomountmap:
            ipaadmin_password: "{{ ipaadmin_password }}"
            name: auto.devel
            location: raleigh
            state: present
    2. Copy to Clipboard Toggle word wrap
      [...]
        vars_files:
        - /home/user_name/MyPlaybooks/secret.yml
        tasks:
      [...]
        - name: ensure automount key /devel/project is present
          ipaautomountkey:
            ipaadmin_password: "{{ ipaadmin_password }}"
            location: raleigh
            mapname: auto.devel
            key: /devel/project
            info: nfs-server.idm.example.com:/exports/project
            state: present
    3. Copy to Clipboard Toggle word wrap
      [...]
        vars_files:
        - /home/user_name/MyPlaybooks/secret.yml
        tasks:
      [...]
      - name: Ensure auto.devel is connected in auto.master:
        ipaautomountkey:
          ipaadmin_password: "{{ ipaadmin_password }}"
          location: raleigh
          mapname: auto.map
          key: /devel
          info: auto.devel
          state: present
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory automount-location-map-and-key-present.yml

120.4.

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
  2. Copy to Clipboard Toggle word wrap
    [...]
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
    [...]
      - ipagroup:
         ipaadmin_password: "{{ ipaadmin_password }}"
          name: developers
          user:
          - idm_user
          state: present
  3. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory automount-location-map-and-key-present.yml
  4. Copy to Clipboard Toggle word wrap
    # chgrp developers /exports/project

120.5.

  1. Copy to Clipboard Toggle word wrap
    # ipa-client-automount --location raleigh -U
  2. Copy to Clipboard Toggle word wrap
    # systemctl stop autofs ; sss_cache -E ; systemctl start autofs

120.6.

    1. Copy to Clipboard Toggle word wrap
      $ ssh idm_user@idm-client.idm.example.com
      Password:
    2. Copy to Clipboard Toggle word wrap
      $ kinit idm_user
    3. Copy to Clipboard Toggle word wrap
      $ ipa user-show idm_user
        User login: idm_user
        [...]
        Member of groups: developers, ipausers
    4. Copy to Clipboard Toggle word wrap
      $ cd /devel/project
    5. Copy to Clipboard Toggle word wrap
      $ ls
      rw_file
    6. Copy to Clipboard Toggle word wrap
      $ echo "idm_user can write into the file" > rw_file
    7. Copy to Clipboard Toggle word wrap
      $ cat rw_file
      this is a read-write file
      idm_user can write into the file

第121章

121.1.

  

121.2.

表121.1
  

注記

121.3.

注記

  1. Copy to Clipboard Toggle word wrap
    $ ldapmodify -D "cn=Directory Manager" -W << EOF
  2. Copy to Clipboard Toggle word wrap
    dn: cn=config
    changetype: modify
    replace: nsslapd-auditlog-logging-enabled
    nsslapd-auditlog-logging-enabled: on
    -
    replace:nsslapd-auditlog
    nsslapd-auditlog: /var/log/dirsrv/slapd-REALM_NAME/audit
    -
    replace:nsslapd-auditlog-mode
    nsslapd-auditlog-mode: 600
    -
    replace:nsslapd-auditlog-maxlogsize
    nsslapd-auditlog-maxlogsize: 100
    -
    replace:nsslapd-auditlog-logrotationtime
    nsslapd-auditlog-logrotationtime: 1
    -
    replace:nsslapd-auditlog-logrotationtimeunit
    nsslapd-auditlog-logrotationtimeunit: day

  • Copy to Clipboard Toggle word wrap
    389-Directory/1.4.3.231 B2021.322.1803
    server.idm.example.com:636 (/etc/dirsrv/slapd-IDM-EXAMPLE-COM)
    
    time: 20220607102705
    dn: cn=config
    result: 0
    changetype: modify
    replace: nsslapd-auditlog-logging-enabled
    nsslapd-auditlog-logging-enabled: on
    [...]

Copy to Clipboard Toggle word wrap
$ modifiersName: ipaanchoruuid=:sid:s-1-5-21-19610888-1443184010-1631745340-279100,cn=default trust view,cn=views,cn=accounts,dc=idma,dc=idm,dc=example,dc=com

Copy to Clipboard Toggle word wrap
>>> import pysss_nss_idmap
>>> pysss_nss_idmap.getnamebysid('S-1-5-21-1273159419-3736181166-4190138427-500'))
{'S-1-5-21-1273159419-3736181166-4190138427-500': {'name': 'administrator@ad.vm', 'type': 3}}

121.4.

注記

  1. Copy to Clipboard Toggle word wrap
    $ ldapmodify -x -D "cn=directory manager" -w <password>
  2. Copy to Clipboard Toggle word wrap
    dn: cn=config
    changetype: modify
    add: nsslapd-errorlog-level
    nsslapd-errorlog-level: 8192
重要

121.5.

表121.2
  

 

121.6.

表121.3
  

121.7.

表121.4
  

121.8.

表121.5
  

121.9.

表121.6
  

121.10.

第122章

122.1.

重要

  • Copy to Clipboard Toggle word wrap
    $ host -t SRV  _kerberos._udp.idm.example.com
    _kerberos._udp.idm.example.com has SRV record 0 100 88 dc.idm.example.com

  1. Copy to Clipboard Toggle word wrap
    $ kinit idmuser@IDM.EXAMPLE.COM
    Password for idmuser@IDM.EXAMPLE.COM:
  2. Copy to Clipboard Toggle word wrap
     https://<dns_name>:9090

122.2.

  1. Copy to Clipboard Toggle word wrap
    $ id
    euid=548800004(example_user) gid=548800004(example_user) groups=548800004(example_user) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

第123章

123.1.

123.2.

  • Copy to Clipboard Toggle word wrap
    $ 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

    1. Copy to Clipboard Toggle word wrap
      $ ipa servicedelegationtarget-add cockpit-target
    2. Copy to Clipboard Toggle word wrap
      $ ipa servicedelegationtarget-add-member cockpit-target \
        --principals=host/remote.idm.example.com@IDM.EXAMPLE.COM
    1. Copy to Clipboard Toggle word wrap
      $ ipa servicedelegationrule-add cockpit-delegation
    2. Copy to Clipboard Toggle word wrap
      $ ipa servicedelegationrule-add-member cockpit-delegation \
        --principals=HTTP/myhost.idm.example.com@IDM.EXAMPLE.COM
    3. Copy to Clipboard Toggle word wrap
      $ ipa servicedelegationrule-add-target cockpit-delegation \
        --servicedelegationtargets=cockpit-target
  1. Copy to Clipboard Toggle word wrap
    $ systemctl try-restart sshd.service

123.3.

  • Copy to Clipboard Toggle word wrap
    $ 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

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
    1. Copy to Clipboard Toggle word wrap
      ---
      - 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
    2. Copy to Clipboard Toggle word wrap
        - 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
    3. Copy to Clipboard Toggle word wrap
        - name: Ensure servicedelegationrule delegation-rule is present
          ipaservicedelegationrule:
            ipaadmin_password: "{{ ipaadmin_password }}"
            name: web-console-delegation-rule
    4. Copy to Clipboard Toggle word wrap
        - 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
    5. Copy to Clipboard Toggle word wrap
        - 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
  2. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory web-console-smart-card-ssh.yml

123.4.

  • Copy to Clipboard Toggle word wrap
    $ 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

    1. Copy to Clipboard Toggle word wrap
      $ ipa servicedelegationtarget-add cockpit-target
    2. Copy to Clipboard Toggle word wrap
      $ ipa servicedelegationtarget-add-member cockpit-target \
        --principals=host/myhost.idm.example.com@IDM.EXAMPLE.COM
    1. Copy to Clipboard Toggle word wrap
      $ ipa servicedelegationrule-add cockpit-delegation
    2. Copy to Clipboard Toggle word wrap
      $ ipa servicedelegationrule-add-member cockpit-delegation \
        --principals=HTTP/myhost.idm.example.com@IDM.EXAMPLE.COM
    3. Copy to Clipboard Toggle word wrap
      $ ipa servicedelegationrule-add-target cockpit-delegation \
        --servicedelegationtargets=cockpit-target
    1. Copy to Clipboard Toggle word wrap
      [domain/idm.example.com]
      pam_gssapi_services = sudo, sudo-i
    2. Copy to Clipboard Toggle word wrap
      auth sufficient pam_sss_gss.so
  1. Copy to Clipboard Toggle word wrap
    $ systemctl restart sssd

123.5.

  • Copy to Clipboard Toggle word wrap
    $ 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

  1. Copy to Clipboard Toggle word wrap
    $ cd ~/MyPlaybooks/
    1. Copy to Clipboard Toggle word wrap
      ---
      - 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. Copy to Clipboard Toggle word wrap
        - 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. Copy to Clipboard Toggle word wrap
        - name: Ensure servicedelegationrule named sudo-web-console-delegation-rule is present
          ipaservicedelegationrule:
            ipaadmin_password: "{{ ipaadmin_password }}"
            name: sudo-web-console-delegation-rule
    4. Copy to Clipboard Toggle word wrap
        - 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. Copy to Clipboard Toggle word wrap
        - 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
  2. Copy to Clipboard Toggle word wrap
    $ ansible-playbook --vault-password-file=password_file -v -i inventory web-console-smart-card-sudo.yml
    1. Copy to Clipboard Toggle word wrap
      [domain/idm.example.com]
      pam_gssapi_services = sudo, sudo-i
    2. Copy to Clipboard Toggle word wrap
      auth sufficient pam_sss_gss.so
  3. Copy to Clipboard Toggle word wrap
    $ systemctl restart sssd

123.6.

法律上の通知

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat, Inc.