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

重要

OTP 認証の IdM ソリューションは、Red Hat Enterprise Linux 7.1 以降を稼働するクライアントのみでサポートされます。
ワンタイムパスワード (OTP) は、1 回の認証セッションのみで有効なパスワードです。これは一度使用すると、無効になります。従来の静的なパスワードとは異なり、認証トークンで生成される OTP は常に変更されます。OTP は、二要素認証の一部として使用されます。
  1. 従来のパスワードを使用したユーザー認証
  2. ユーザーは、認識済みの OTP トークンで生成された OTP コードを入力します。
二要素認証は、従来のパスワードだけを使用する認証に比べると安全であると考えられています。ログイン中に、侵入者により OTP が傍受された場合でも、傍受された OTP は、一旦認証に成功すると使用できなくなるので、侵入者が使用する頃にすでに無効になっています。

警告

現在、IdMの OTP サポートに関係のあるセキュリティーとその他の制限は以下の通りです。
  • 最も重要なセキュリティー制限として、システム全体でリプレイアタックの被害を受けやすくなる点です。レプリケーションは非同期で実行されるので、OTP コードはレプリケーション中に再利用でき、ユーザーは同時に 2 台のサーバーにログインできる可能性があります。ただし、包括的な暗号化があると、この脆弱性を悪用するのは困難です。
  • OTP 認証をサポートしていないクライアント経由では、ticket-granting ticket (TGT) を取得することができません。これは、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 でユーザーが管理するトークンを完全に制御できます。
管理者が管理するトークン
管理者は、管理者が管理するトークンをユーザーのアカウントに追加し、ユーザーはこれらのトークンへの読み取り専用アクセスが割り当てられます。ユーザーはトークンの管理または変更パーミッションがなく、設定する必要はありません。
アクティブなトークンが 1 つしかない場合には、削除することも、無効にすることもできない点に注意してください。管理者は、自分のアクティブなトークンが 1 つの場合は削除や無効化はできませんが、別のユーザートークンは、アクティブなトークンが 1 つの場合でも削除または無効化することができます。

サポートされる OTP アルゴリズム

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

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

OTP 認証を有効化する際に、以下の認証方法から選択できます。
二要素認証 (パスワード + OTP)
この方法では、ユーザーは常に標準のパスワードと OTP コードを入力するように求められます。
パスワード
この方法では、ユーザーは標準のパスワードのみを使用した認証を選択するオプションがあります。
RADIUS プロキシサーバー認証
OTP の検証用に RADIUS サーバーを設定する方法は「商用 OTP ソリューションからの移行」を参照してください。

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

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

複数の認証方法の統合

複数の方法を同時に設定すると、どちらか 1 つが成功すれば認証されます。以下に例を示します。
  • 二要素認証およびパスワード認証を設定すると、ユーザーはコマンドラインを使用する場合にはパスワード (1 つ目の要素) を指定する必要がありますが、OTP (2 つ目の要素) はオプションです。
    First Factor:
    Second Factor (optional):
  • Web UI ではユーザーは両要素を指定する必要があります。

注記

OTP などの特定の認証方法を設定する必要のある個別ホストまたはサービスもあります。一段階要素のみを使用してこのようなホストやサービスに対する認証を試行すると、アクセスが拒否されます。「ユーザーの認証情報をもとにサービスやホストへのアクセス制限」を参照してください。
ただし、RADIUS および他の認証方法が設定されている場合には、例外が少しあります。
  • Kerberos は常に RADIUS を使用しますが LDAP は RADIUS を使用しません。LDAP が認識するのは、パスワードと二要素認証のオプションのみです。
  • 外部の 2 要素認証プロバイダーを使用する場合は、使用しているアプリケーションから Kerberos を使用します。ユーザーがパスワードのみで認証するようにするには、LDAP を使用します。アプリケーションが Apache モジュールと SSSD を活用するようにすることが推奨されます。そうすることで、Kerberos か LDAP のいずれかを設定することができます。

22.3.1.3. GNOME のキーリングサービスサポート

IdM は、OTP 認証と GNOME キーリングサービスを統合します。GNOME キーリング統合では、一段階要素と二段階要素を別に入力する必要があります。
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 のプロンプトで静的なパスワードと OTP を 1 つの文字列として入力できるようにサポートします。ただし、オフラインの OTP 認証とは互換性がない点に注意してください。ユーザーが両要素を単一のプロンプトで入力した場合には、IdM は認証時に常に中央認証サーバに問い合わせる必要があるので、認証時にはシステムがオンラインの状態でなければなりません。

重要

ラップトップなどオフラインで操作するデバイスで OTP 認証を使用する場合は、Red Hat は静的なパスワードと OTP を個別に入力して、オフライン認証を利用可能にすることを推奨します。これを行わないと、システムがオフラインになった後にログインすると IdM により拒否されます。
OTP オフライン認証の恩恵を受けるには、静的と OTP パスワードを個別に入力する以外に、以下の条件も満たすようにしてください。
  • /etc/sssd/sssd.conf ファイルの cache_credentials オプションを True に設定すると、第一要素のパスワードのキャッシュが有効になります。
  • 第一要素の静的パスワードが、/etc/sssd/sssd.confcache_credentials_minimal_first_factor_length オプションで定義されているパスワード長の要件を満たしていること。デフォルトでは、少なくとも 8 文字以上指定する必要があります。オプションに関する情報は、sssd.conf(5) の man ページを参照してください。
/etc/sssd/sssd.confkrb5_store_password_if_offline オプションが true に設定されている場合でも、その時点で OTP がすでに無効になっている可能性があるので SSSD は Kerberos ticket-granting ticket (TGT) の更新は試行しません。このような状況で TGT を取得するには、両要素を使用して認証する必要があります。

22.3.2. FIPS モードで稼働している IdM サーバーで RADIUS プロキシを設定するのに必要な設定

Federal Information Processing Standard (FIPS) モードの OpenSSL では、デフォルトで MD5 ダイジェストアルゴリズムの使用が無効になりました。その結果、RADIUS プロトコルでは、RADIUS クライアントおよび RADIUS サーバーとの間でシークレットを暗号化する MD5 が必要になり、FIPS モードで MD5 が利用できないため、IdM (Identity Management) の 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. 二要素認証の有効化

OTP 関連で利用可能な認証方法に関する詳細は「利用可能な OTP 認証方法」を参照してください。
以下を使用して二要素認証を有効化するには:

Web UI: 二要素認証の有効化

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

    図22.4 ユーザー認証方法

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

    図22.5 ユーザー認証方法

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

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

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

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

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

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

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 source page を参照してください。
  3. IdM Web UI またはコマンドラインでソフトウェアトークンを作成します。
    • Web UI でトークンを作成するには、AuthenticationOTP Tokens を選択して、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. Web UI またはコマンドラインに QR コードが表示されます。QR コードを FreeOTP Authenticator でスキャンして、モバイルデバイスのトークンを提供します。
管理者として、YubiKey トークンのようなプログラム可能なハードウェアトークンを追加するには、以下の手順に従います。
  1. 管理者としてログインしていることを確認します。
  2. YubiKey トークンを挿入します。
  3. --owner オプションを指定して ipa otptoken-add-yubikey コマンドを実行します。以下に例を示します。
    $ ipa otptoken-add-yubikey --owner=user

22.3.7. 商用 OTP ソリューションからの移行

商用の OTP ソリューションから IdM をネイティブとする OTP ソリューションに、大規模なデプロイメントを移行できるように、IdM では、OTP 確認をサードパーティーの RADIUS サーバーにオフロードする方法をユーザーのサブセットに提供します。管理者は、複数の個別の RADIUS サーバーを含む RADIUS プロキシーのセットを作成します。次にこれらプロキシーセットのひとつをユーザーに割り当てます。ユーザーに RADIUS プロキシーのセットが割り当てられている限り、IdM は他のすべての認識メカニズムを迂回します。

注記

IdM では、サードパーティーシステムでのトークン管理やトークンの同期をサポートしていません。
OTP 確認用の RADIUS サーバーを設定し、ユーザーをプロキシーサーバーに追加するには、以下の手順に従います。
  1. radius ユーザー認証メソッドが有効になっていることを確認します。詳細は 「二要素認証の有効化」を参照してください。
  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 プロキシを実行しているなど、特定の状況では、ユーザーによるトークンの入力を待っている際に、接続がタイムアウトするため RADIUS サーバーが応答する前に、IdM KDC が接続を閉じます。
KDC のタイムアウト設定を変更するには:
  1. /var/kerberos/krb5kdc/kdc.conf ファイルの [otp] セクションで timeout パラメーターの値を変更します。たとえば、タイムアウトを 120 秒に設定します。
    [otp]
    DEFAULT = {
      timeout = 120
      ...
    }
  2. krb5kdc サービスを再起動します。
    # systemctl restart krb5kdc

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

パスワードと二要素認証の両方を設定しているにも関わらず、パスワードでのみ認証を行った場合には、特定のサービスやホストへのアクセスが拒否される可能性があります (「ユーザーの認証情報をもとにサービスやホストへのアクセス制限」 を参照)。このような場合には、もう一度認証を行うことで、一要素から二要素認証にプロモートしてください。
  1. 画面をロックします。画面ロックのデフォルトのキーボードショートカットは Super key+L です。
  2. 画面のロックを解除します。認証情報を求められたら、パスワードと OTP の両方を使用します。

22.3.9. 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