Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

22.3. ワンタイムパスワード

重要
OTP 認証の IdM ソリューションは、Red Hat Enterprise Linux 7.1 以降を実行しているクライアントでのみサポートされます。
ワンタイムパスワード (OTP) は、1 つの認証セッションにのみ有効になり、使用後に無効になります。従来の静的パスワードとは異なり、認証トークンによって生成された OTP は変更を維持します。OTP は、2 要素認証の一部として使用されます。
  1. ユーザーは従来のパスワードで認証します。
  2. ユーザーは、認識された OTP トークンによって生成された OTP コードを提供します。
2 要素認証は、従来のパスワードのみを使用した認証よりも安全であると考えられます。ログイン中に OTP を傍受しても、その時点で傍受された OTP はすでに無効になり、認証の成功にのみ使用可能であるためです。
警告
現在、以下のセキュリティーと、IdM の OTP サポートに関連しています。
  • 最も重要なセキュリティー制限は、システム全体で攻撃を再生する可能性のある脆弱性です。レプリケーションは非同期であるため、OTP コードはレプリケーション期間中に再利用できます。ユーザーは 2 つのサーバーに同時にログインできる場合があります。ただし、この脆弱性は通常、包括的な暗号化のために悪用するのが難しくなります。
  • OTP 認証をサポートしないクライアントを使用して、TGT (Ticket-Granting Ticket) を取得することはできません。これは、mod_auth_kerb モジュールまたは Generic Security Services API(GSSAPI) を使用した認証など、特定のユースケースに影響を及ぼす可能性があります。
  • FIPS モードが有効な場合は、IdM ソリューションでパスワード + OTP を使用することはできません。

22.3.1. IdM での OTP 認証の仕組み

22.3.1.1. IdM でサポートされている OTP トークン

ソフトウェアおよびハードウェアトークン

IdM は、ソフトウェアトークンとハードウェアトークンの両方をサポートします。

ユーザー管理のトークンおよび管理者管理のトークン

ユーザーは独自のトークンを管理でき、管理者はそれらのトークンを管理できます。
ユーザー管理のトークン
ユーザーは、Identity Management のユーザー管理トークンを完全に制御できます。トークンの作成、編集、または削除が可能です。
管理者管理のトークン
管理者は、管理者管理のトークンをユーザーのアカウントに追加します。ユーザー自体には、このようなトークンに対する読み取り専用アクセスがあります。トークンを管理または変更するパーミッションがなく、これらをいずれの方法でも設定する必要はありません。
現在、アクティブなトークンのみであれば、ユーザーはトークンを削除または非アクティブにすることはできません。管理者は、最後にアクティブなトークンを削除または非アクティブ化することはできませんが、別のユーザーの最後のアクティブなトークンを削除または非アクティブ化することができます。

対応している OTP アルゴリズム

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

22.3.1.2. 利用可能な OTP 認証方法

OTP 認証を有効にする場合、以下の認証方法を選択できます。
2 要素認証 (パスワード + OTP)
この方法では、標準パスワードと OTP コードの両方を入力する必要があります。
Password
この方法では、標準のパスワードのみを使用して認証を行うオプションがあります。
RADIUS プロキシーサーバー認証
OTP 検証に RADIUS サーバーを設定する方法は、「プロプライエタリー OTP ソリューションからの移行」 を参照してください。

グローバルおよびユーザー固有の認証方法

これらの認証方法は、グローバルまたは個々のユーザーに対して設定できます。
  • デフォルトでは、ユーザー固有の認証方法設定はグローバル設定よりも優先されます。ユーザーに認証方法が設定されていない場合、グローバルに定義されているメソッドが適用されます。
  • 任意のユーザーのユーザーごとの認証方法設定を無効にできます。これにより、IdM はユーザーごとの設定を無視し、常にユーザーにグローバル設定を適用するようになります。

複数の認証方法の統合

複数のメソッドを一度に設定すると、認証を成功させるには、いずれかの方法で十分です。以下に例を示します。
  • 2 要素とパスワード認証の両方を設定する場合、ユーザーはパスワード (最初の係数) を指定する必要がありますが、コマンドラインを使用する場合は OTP(2 番目の係数) を提供することは任意です。
    First Factor:
    Second Factor (optional):
  • Web UI では、ユーザーは両方の要素を指定する必要があります。
注記
個々のホストまたはサービスは、OTP などの特定の認証方法を必要とするように設定できます。最初の要素を使用してこのようなホストまたはサービスに対して認証しようとすると、アクセスは拒否されます。「ユーザーの認証方法に基づいたサービスとホストへのアクセス制限」を参照してください。
ただし、RADIUS と別の認証方法が設定されている場合には、マイナーな例外が存在します。
  • Kerberos は常に RADIUS を使用しますが、LDAP は使用しません。LDAP は、パスワードと 2 要素認証メソッドのみを認識します。
  • 外部の 2 要素認証プロバイダーを使用する場合は、アプリケーションから Kerberos を使用します。パスワードを使用した認証のみを許可する場合は、LDAP を使用します。アプリケーションは、Kerberos または LDAP のいずれかの設定を可能にする Apache モジュールおよび SSSD を利用することが推奨されます。

22.3.1.3. GNOME Keyring サービスのサポート

IdM は、OTP 認証と GNOME Keyring サービスを統合します。GNOME Keyring 統合では、ユーザーは最初の要素と 2 番目の要素を個別に入力する必要があります。
First factor: static_password
Second factor: one-time_password

22.3.1.4. OTP を使用したオフライン認証

IdM は、オフラインの OTP 認証に対応します。ただし、オフラインでログインできるようにするには、静的パスワードと OTP を個別に入力して、システムがオンラインになると、最初に認証する必要があります。
First factor: static_password
Second factor: one-time_password
オンラインでログインする際に両方のパスワードが別個に入力されると、中央認証サーバーが利用できない場合でもユーザーは認証が可能になります。IdM は、ユーザーがオフライン時に従来の静的パスワードのみを要求することに注意してください。
IdM は、First factor プロンプトで 1 つの文字列に静的パスワードと OTP の両方を入力することもできます。ただし、これはオフラインの OTP 認証と互換性がありません。ユーザーが両方の要素を 1 つのプロンプトで入力すると、認証時に IdM が常に中央認証サーバーに接続する必要があります。これには、システムをオンラインにする必要があります。
重要
ノートパソコンなど、オフラインでも動作するデバイスで OTP 認証を使用する場合は、オフライン認証が利用可能になるように、Red Hat は、静的パスワードと OTP を個別に入力することを推奨します。そうしないと、IdM では、システムがオフラインになった後にログインできなくなります。
OTP オフライン認証を活用する場合は、静的パスワードと OTP パスワードを別々に入力する以外には、以下の条件を満たしていることを確認してください。
  • /etc/sssd/sssd.conf ファイルの cache_credentials オプションは True に設定され、最初のファクターパスワードをキャッシュできるようにします。
  • First-factor の静的パスワードは、/etc/sssd/sssd.conf で設定した cache_credentials_minimal_first_factor_length オプションに定義されたパスワードの長さの要件に対応します。デフォルトの最小長は 8 文字です。オプションの詳細は、sssd.conf(5) の man ページを参照してください。
/etc/sssd/sssd.confkrb5_store_password_if_offline オプションが true に設定されている場合でも、SSSD は、システムがオンラインになったときに Kerberos チケット保証チケット (TGT) の更新を試行しません。この時点で OTP が無効である可能性があるためです。この状況で TGT を取得するには、両方の要素を使用して再度認証する必要があります。

22.3.2. FIPS モードで実行している IdM サーバーで RADIUS プロキシーを設定するために必要な設定

Federal Information Processing Standard(FIPS) モードでは、OpenSSL はデフォルトで MD5 ダイジェストアルゴリズムの使用を無効にします。したがって、RADIUS プロトコルでは、RADIUS クライアントと RADIUS サーバー間のシークレットを暗号化するのに MD5 が必要になるため、FIPS モードで MD5 が利用できないと、IdM RADIUS プロキシーサーバーが失敗します。
RADIUS サーバーが IdM マスターと同じホストで実行されている場合は、以下の手順に従って問題を回避し、セキュアなメーター内で MD5 を有効にすることができます。
  1. 以下の内容で /etc/systemd/system/radiusd.service.d/ipa-otp.conf ファイルを作成します。
    [Service] 
    Environment=OPENSSL_FIPS_NON_APPROVED_MD5_ALLOW=1
  2. systemd 設定をリロードします。
    # systemctl daemon-reload
  3. radiusd サービスを起動します。
    # systemctl start radiusd

22.3.3. 2 つのファクター認証の有効化

OTP に関連する利用可能な認証方法の詳細は、「利用可能な OTP 認証方法」 を参照してください。
以下を使用して 2 つのファクター認証を有効にするには、以下を実行します。

Web UI: 2 つのファクター認証の有効化

すべてのユーザーに対してグローバルに認証方法を設定するには、以下を実行します。
  1. IPA ServerConfiguration を選択します。
  2. User Options エリアで、必要な Default user 認証タイプを選択します。

    図22.4 ユーザー認証方法

    ユーザー認証方法
グローバル設定がユーザー別の設定で上書きされないようにするには、Disable per-user override を選択します。Disable per-user override を選択しない場合は、ユーザーごとに設定された認証方法がグローバル設定よりも優先されます。
認証方法はユーザーごとに個別に設定するには、以下を実行します。
  1. IdentityUsers を選択し、編集するユーザーの名前をクリックします。
  2. Account Settings エリアで、必要な ユーザー認証タイプを選択します。

    図22.5 ユーザー認証方法

    ユーザー認証方法

コマンドライン: 2 二要素認証の有効化

すべてのユーザーに対してグローバルに認証方法を設定するには、以下を実行します。
  1. ipa config-mod --user-auth-type コマンドを実行します。たとえば、グローバル認証方法を 2 要素認証に設定するには、以下を実行します。
    $ ipa config-mod --user-auth-type=otp
    --user-auth-type で使用できる値のリストは、ipa config-mod --help コマンドを実行します。
  2. ユーザーごとの上書きを無効にするには、グローバル設定がユーザーごとの設定で上書きされないようにするには --user-auth-type=disabled オプションを追加します。たとえば、グローバル認証方法を 2 要素認証に設定し、ユーザーごとの上書きを無効にするには、以下を実行します。
    $ ipa config-mod --user-auth-type=otp --user-auth-type=disabled
    --user-auth-type=disabled を設定しないと、ユーザーごとに設定された認証方法がグローバル設定よりも優先されます。
指定されたユーザーに認証方法を個別に設定するには、以下を実行します。
  • ipa user-mod --user-auth-type コマンドを実行します。たとえば、user が 2 要素認証を使用するために必要なように設定するには、以下を実行します。
    $ ipa user-mod user --user-auth-type=otp
複数の認証方法を設定するには、--user-auth-type を複数回追加します。たとえば、すべてのユーザーにパスワードと 2 要素認証をグローバルに設定するには、以下を実行します。
$ ipa config-mod --user-auth-type=otp --user-auth-type=password

22.3.4. ユーザー管理のソフトウェアトークンの追加

  1. 標準のパスワードでログインします。
  2. FreeOTP Authenticator アプリケーションがモバイルデバイスにインストールされていることを確認します。FreeOTP Authenticator をダウンロードするには、FreeOTP のソースページ を参照してください。
  3. IdM Web UI またはコマンドラインでソフトウェアトークンを作成します。
    • Web UI でトークンを作成するには、OTP tokens タブの Add をクリックします。管理者としてログインしている場合、OTP Tokens タブは Authentication タブから アクセスできます。

      図22.6 ユーザーの OTP トークンの追加

      ユーザーの OTP トークンの追加
    • コマンドラインからトークンを作成するには、ipa otptoken-add コマンドを実行します。
      $ ipa otptoken-add
      ------------------
      Added OTP token ""
      ------------------
        Unique ID: 7060091b-4e40-47fd-8354-cb32fecd548a
        Type: TOTP
      ...
      
      Ipa otptoken-add の詳細は、--help オプションを追加してコマンドを実行します。
  4. QR コードは、Web UI またはコマンドラインに表示されます。FreeOTP Authenticator で QR コードをスキャンし、モバイルデバイスにトークンをプロビジョニングします。

22.3.5. ユーザー管理の YubiKey ハードウェアトークンの追加

YubiKey トークンなどのプログラム可能なハードウェアトークンは、コマンドラインからしか追加できません。トークンを所有するユーザーとして YubiKey ハードウェアトークンを追加するには、以下を実行します。
  1. 標準のパスワードでログインします。
  2. YubiKey トークンを挿入します。
  3. ipa otptoken-add-yubikey コマンドを実行します。
    • YubiKey に空のスロットが利用可能な場合は、このコマンドにより、空のスロットが自動的に選択されます。
    • 空のスロットが使用できない場合は、--slot オプションを使用して手動でスロットを選択する必要があります。以下に例を示します。
      $ ipa otptoken-add-yubikey --slot=2
      これにより、選択したスロットが上書きされる点に注意してください。

22.3.6. 管理者としてのユーザーのトークンの追加

管理者としてソフトウェアトークンを追加するには、以下を実行します。
  1. 管理者としてログインしていることを確認します。
  2. FreeOTP Authenticator アプリケーションがモバイルデバイスにインストールされていることを確認します。FreeOTP Authenticator をダウンロードするには、FreeOTP のソースページ を参照してください。
  3. IdM Web UI またはコマンドラインでソフトウェアトークンを作成します。
    • Web UI でトークンを作成するには、AuthenticationOTPTokens を選択し、OTP トークンのリストの上部にある Add をクリックします。Add OTP Token フォームで、トークンの所有者を選択します。

      図22.7 管理者管理ソフトウェアトークンの追加

      管理者管理ソフトウェアトークンの追加
    • コマンドラインからトークンを作成するには、--owner オプションを指定して ipa otptoken-add コマンドを実行します。以下に例を示します。
      $ ipa otptoken-add --owner=user
      ------------------
      Added OTP token ""
      ------------------
        Unique ID: 5303baa8-08f9-464e-a74d-3b38de1c041d
        Type: TOTP
      ...
      
  4. QR コードは、Web UI またはコマンドラインに表示されます。FreeOTP Authenticator で QR コードをスキャンし、モバイルデバイスにトークンをプロビジョニングします。
管理者として、YubiKey トークンなどのプログラム可能なハードウェアトークンを追加するには、以下を実行します。
  1. 管理者としてログインしていることを確認します。
  2. YubiKey トークンを挿入します。
  3. --owner オプションを指定して、ipa otptoken-add-yubikey コマンドを実行します。以下に例を示します。
    $ ipa otptoken-add-yubikey --owner=user

22.3.7. プロプライエタリー OTP ソリューションからの移行

IdM は、プロプライエタリー OTP ソリューションから IdM ネイティブの OTP ソリューションへの大規模なデプロイメントの移行を可能にするため、IdM では、ユーザーのサブセットに対して OTP 検証をサードパーティーの RADIUS サーバーにオフロードすることができます。管理者は、各プロキシーが単一の RADIUS サーバーのみを参照できる RADIUS プロキシーのセットを作成します。複数のサーバーに対応する必要がある場合は、複数の RADIUS サーバーを参照する仮想 IP ソリューションを作成することが推奨されます。このようなソリューションは、keepalived デーモンなどを使用して、RHEL IdM の外部で構築する必要があります。次に、管理者はこれらのプロキシーセットのいずれかをユーザーに割り当てます。ユーザーが RADIUS プロキシーが設定されている限り、IdM は他のすべての認証メカニズムをバイパスします。
注記
IdM は、サードパーティーシステムのトークンに対するトークン管理または同期のサポートを提供しません。
OTP 検証用に RADIUS サーバーを設定し、ユーザーをプロキシーサーバーに追加するには、以下を実行します。
  1. radius ユーザー認証方法が有効になっていることを確認します。詳細は「2 つのファクター認証の有効化」を参照してください。
  2. ipa radiusproxy-add proxy_name --secret secret コマンドを実行して RADIUS プロキシーを追加します。このコマンドは、必要な情報を挿入するように求められます。
    RADIUS プロキシーの設定には、クライアントとサーバーとの間の共通のシークレットを使用して認証情報をラップする必要があります。--secret パラメーターにこのシークレットを指定します。
  3. ipa user-mod radiususer --radius=proxy_name コマンドを実行して、追加したプロキシーにユーザーを割り当てます。
  4. 必要に応じて、ipa user-mod radiususer --radius-username=radius_user コマンドを実行して、RADIUS に送信されるユーザー名を設定します。
これにより、ユーザー OTP 認証は RADIUS プロキシーサーバーを介して処理されます。
注記
FIPS モードが有効になっている IdM マスターで RADIUS サーバーを実行するには、「FIPS モードで実行している IdM サーバーで RADIUS プロキシーを設定するために必要な設定」 で説明されている手順を実行します。
ユーザーが IdM ネイティブ OTP システムに移行する準備ができたら、ユーザーの RADIUS プロキシー割り当てを削除するだけです。

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

低速なネットワークで RADIUS プロキシーを実行する場合など、IdM KDC は、ユーザーがトークンに入るのを待たずに接続をタイムアウトしたため、RADIUS サーバーが応答する前に接続を閉じます。
KDC のタイムアウト設定を変更するには、以下を実行します。
  1. /var/kerberos/krb5kdc/kdc.conf ファイルの [otp] セクションで timeout パラメーターの値を変更します。たとえば、タイムアウトを 120 秒に設定するには、次のコマンドを実行します。
    [otp]
    DEFAULT = {
      timeout = 120
      ...
    }
  2. krb5kdc サービスを再起動します。
    # systemctl restart krb5kdc

22.3.8. 現在の認証情報の 2 要素認証へのプロモート

パスワードと 2 要素認証の両方が設定されている場合、パスワードを使用して認証される場合は、特定サービスまたはホストへのアクセスを拒否することができます (「ユーザーの認証方法に基づいたサービスとホストへのアクセス制限」を参照)。このような場合には、再度認証することで、認証情報を 1 要素から 2 要素認証にプロモートします。
  1. 画面をロックします。画面をロックするデフォルトのキーボードショートカットは Super キー+L です。
  2. 画面のロックを解除します。認証情報を求められたら、パスワードと OTP の両方を使用します。

22.3.9. OTP トークンの再同期

「同期されていない OTP トークン」を参照してください。

22.3.10. ロット OTP トークンの置き換え

以下の手順では、OTP トークンを紛失したユーザーがトークンを置き換える方法を説明します。
  1. 管理者として、ユーザーのパスワードと OTP 認証を有効にします。
    [admin@server]# ipa user-mod --user-auth-type=password --user-auth-type=otp user_name
  2. ユーザーは新しいトークンを追加できるようになりました。たとえば、説明に New Token が設定された新しいトークンを追加するには、以下を実行します。
    [user@server]# ipa otptoken-add --desc="New Token"
    詳細は、ipa otptoken-add --help パラメーターを追加してコマンドを入力します。
  3. ユーザーは、古いトークンを削除できるようになりました。
    1. 必要に応じて、アカウントに関連付けられたトークンをリスト表示します。
      [user@server]# ipa otptoken-find
      --------------------
      2 OTP tokens matched
      --------------------
        Unique ID: 4ce8ec29-0bf7-4100-ab6d-5d26697f0d8f
        Type: TOTP
        Description: New Token
        Owner: user
      
        Unique ID: e1e9e1ef-172c-4fa9-b637-6b017ce79315
        Type: TOTP
        Description: Old Token
        Owner: user
      ----------------------------
      Number of entries returned 2
      ----------------------------
    2. 古いトークンを削除します。たとえば、e1e9e1ef-172c-4fa9-b637-6b017ce79315 ID でトークンを削除するには、以下を実行します。
      [user@server]# # ipa otptoken-del e1e9e1ef-172c-4fa9-b637-6b017ce79315
      --------------------------------------------------------
      Deleted OTP token "e1e9e1ef-172c-4fa9-b637-6b017ce79315"
      --------------------------------------------------------
  4. 管理者として、ユーザーの OTP 認証のみを有効にします。
    [admin@server]# ipa user-mod --user-auth-type=otp user_name