このブログは IBM Cloud アドベントカレンダー 2020 13日目にエントリーしています。
IBM Cloud が提供している多要素認証サービスである IBM Security Verify for Workforce IAM を使う機会がありました。簡単に各種多要素認証を実装できるサービスだったので、備忘録の意味でもまとめてみました。
【IBM Security Verify for Workforce IAM で実現できる多要素認証の種類】
まず、このサービスを有効にすることで利用できる多要素認証の要素は以下の4種類あります:
(1) ワンタイムパスワード
(2) 確認タップ
(3) SMS
(4) メール
(1) と (2) はスマホに専用アプリ(IBM Security Verify)をインストールすることで利用可能になります。(1) は同アプリ内に表示されているワンタイムパスワードを制限時間内に入力することで確認するもの、(2) は同アプリ内に通知される確認メッセージに対して「承認」のタップを行うことで確認されます。「入力の手間がない」という点ではこの (2) が最も楽な要素といえると感じています。 また (3) はスマホへの SMS に送信されたワンタイムパスワードを入力するもの、(4) は指定したメールアドレスへ送信されたワンタイムパスワードを入力するものです。(3) と (4) は専用アプリを必要としないため、古いスマホやスマホ以外の電話機でも利用可能です(メールに関しては電話機である必要もありません)。
【IBM Security Verify for Workforce IAM を使った多要素認証】
実際に多要素認証を実現するまでの大きな流れとしては、以下の2段階となります:
1. 多要素認証サービスに登録する
2. 各種ログイン時に 1. のサービスが有効になるよう設定する
少し細かく紹介すると、1. はサービスへサインインすることに加えて、多要素認証で利用する手法を登録します。具体的にはメール、電話、SMSそしてスマホ向けの専用アプリです。一般的に多要素認証で使われるのはメール、電話、SMS でコードを知らせて入力させる、という方法ですが、最後の専用アプリを使うとプッシュで知らされる通知に「承認」タップをするだけで認証が完了します。2段階目の手続きが一番楽になる方法でもあります。
2. は 1. で登録した多要素認証サービスを「どの」認証の際に使うか、という設定です。今回のブログでは
(1) Windows へのログイン時
(2) Linux 等への SSH ログイン時
の2種類それぞれで使う場合の設定手順を紹介します。
【IBM Security Verify for Workforce IAM の無料評価版に登録】
まずは上記 1. のサービス登録部分を行います。
IBM Security Verify for Workforce IAM のページへ行き、「無料評価版を試す」というボタンをクリックします:
https://www.ibm.com/jp-ja/products/verify-for-workforce-iam
IBM ID でのログインが求められるのでログインします。その後、テナントサーバーのホスト名の入力が促されるので、ユニークな(他の人が使ってなさそうな)文字列を入力して "Create tenant" ボタンをクリックします。基本的に作業はこれだけです:
試用アカウントの作成等、色々準備が進んでいくので少し待ちます:
1~2分程度で「ようこそ」画面が表示されます。使用条件同意にチェックを入れて「続行」:
すると IBM Security Verify のダッシュボード画面が表示されます。これで IBM Security Verify のアカウントが作成できました:
【IBM Security Verify for Workforce IAM に API client を登録】
サービスへのサインアップはこれだけで完了です。次に各種クライアントからこのサービスを利用できるよう、IBM Security Verify for Workforce IAM に API client を登録します。左上のハンバーガーメニューから "Configuration" を選択します:
Configuration の "API access" タブを選択し、"Add API client" ボタンをクリックします:
API Client を追加するダイアログが表示されます。まず適当な名前(例 MFA-Client)を入力して、Enabled がチェックされていることを確認します(まだ Save を押さずに下にスクロールします):
そのまま下にスクロールして、Access 欄で以下の4つにチェックを入れ、最後に Save をクリックします:
- Authenticate any user
- Read authenticator registrations for all users
- Read second-factor authentication enrollment for all users
- Read users and groups
1つ前の画面に戻り、作成した API client が一覧に表示されていることを確認します。この一覧の右側に EDIT ボタンがあるのでここをクリックします:
クリックすると、この API client の Client ID と Client secret を確認することができます。後ほど使うのでメモしておきます:
【IBM Security Verify for Workforce IAM にユーザーを登録】
次に IBM Security Verify for Workforce IAM に2要素認証を行うユーザーを登録します。左上のハンバーガーメニューから "Users & groups" を選択します:
まだユーザーが登録されていない初回は最初にユーザー登録ダイアログが表示されます。以下を指定して(他は適当に指定して)Save をクリックします:
- Identity source : Cloud Directory
- user name : (これから作成するユーザーのログイン時のユーザー名)
- Work e-mail : (これから作成するユーザーのメールアドレス、この後ここにメールが送信される)
- Mobile number: (これから作成するユーザーの携帯電話番号、日本の携帯電話であれば +81 を付け、更に最初の 0 を消して登録する。このあと SMS 認証で利用する)
ここまで完了したら(次に新規ユーザーでサインインできるよう)このアカウントではいったんサインアウトします。画面右上のアイコンから "Sign out" を選択します:
サインアウトできました:
【IBM Security Verify for Workforce IAM にユーザーのデバイス(スマホ)を登録】
ここからは登録されたユーザーによる作業となります。
先ほどユーザー作成時に指定したメールアドレスの受信ボックスを確認してください。IBM Security から Account created というサブジェクトのメールが送信されているはずです。その中に user name で指定したログイン名と初期パスワードが表示されています。下の URL をクリックしてログインします:
ログイン画面が表示されたら、メールに記載されていた user name と password を指定してログインします:
最初の1回目は初期パスワードから別のパスワードへ変更する必要があるので、自分で管理できるパスワードに変更してください:
全て完了すると登録したユーザーで IBM Security Verify にログインします:
次のこのユーザーのスマートフォンと、認証デバイスを登録します。画面右上のアイコンをクリックして、"Profile & settings" を選択します:
まず登録したユーザー情報のメールアドレスや電話番号が正しいものかどうかをを確認するための画面が表示されます。確認方法は選択できますが、今回は SMS(Text message) を使って確認することにします。"Text message" の横にある "Send code" をクリックします:
すると登録時に指定した電話番号に SMS でコードが届きます。そのコードを認証画面内に登録して Submit します:
正しいコードを入力することができると携帯電話の登録が完了します。一応これだけでも利用できるのですが、専用アプリを登録しておくと2段階認証時の手続きが簡単になるので、続けて専用アプリを登録しておきます。"Add new method" と書かれた箇所をクリックします:
登録するデバイスを選択する画面になります。ここでは IBM Verify app 横の "Add device" をクリックします:
スマートフォンに "IBM Verify" アプリケーションをインストールするよう求められます。App Store や Google Play から "IBM Verify" を検索してアプリをインストールしてください。インストールできたら "Connect your account" を選択します:
画面に QR コードが表示されます。この QR コードをスマホにインストールした IBM Verify を開いて Q読み取ります:
デバイスが登録されますが、まだ "Unauthorized" という扱いになっています。アプリケーションの認証コードを入力してこのアプリケーションとデバイスを認証します:
成功するとこのような画面になります:
"Authentication app" として表示されていれば成功です:
ここまでの作業で上記 1. の多要素認証サービスへの登録作業が完了しました。
ここから下は 2. の作業になります。実際に多要素認証を利用する認証方法ごとに行います。
【Windows へのログイン時に多要素認証を行う場合】
Windows へのログイン時に多要素認証を行う場合の作業手順を説明します。
そのための作業として、対象の Windows PC に IBM Security Verify for Windows Login という Windows アプリケーションを導入します。
まず IBM Security Verify for Windows Login の動作に必要な VSVC++ ランタイムをダウンロードしてインストールします:
https://support.microsoft.com/ja-jp/help/2977003/the-latest-supported-visual-c-downloads
続いて以下から IBM Security Verify Gateway for Windows Login をダウンロードします:
https://exchange.xforce.ibmcloud.com/hub/IdentityandAccess
ダウンロードしたファイルを展開し、setup.exe を実行してインストールします:
インストール後、C:\Program Files\IBM\WindowsLogin\ フォルダ以下にある config.json.sample ファイルをテキストエディタで開きます:
以下の内容で書き換え、config.json という名前で保存します:
上記を編集する際の注意点があります。
まず client-id には上述の作業で API client を登録した際に取得した Client ID の値をそのまま入力します。
obf-client-secret の値は少し手順が必要です。config.json.sample と同じフォルダに obfuscate.exe というコマンドラインツールがあります。コマンドプロンプトを開いて、以下のコマンドを実行します:
この実行結果として表示される内容を上記 obf-client-secret の値として入力してください(Client Secret の値をそのまま入力するわけではない点に注意してください)。
そして host は IBM Security Verify for Workforce IAM サインアップ時に指定した tenantId を使った "{tenantId}.verify.ibm.com" という値を指定します。
更に username-format の値には "%U" を、no-mfa-account の値にはこの Windows PC の名前(XXXXXXX)を使って "XXXXXXX\\Administrator" と指定してください(最後の設定により Administrator アカウントのみ多段階認証が無効になります)。
最後にこのファイルを同じフォルダ内に config.json という名前で保存すれば準備完了です。
では実際に Windows で多要素認証が有効になっているかどうかを確認します。Windows のログイン画面で Administrator アカウント以外のユーザーを指定します。するとパスワード入力画面に "Sign-in options" というメニューが現れます:
同部分をタップして開き、盾のようなアイコンを選択します(選択されていることを確認します):
この状態でまずは普通にログインパスワードを入力します:
すると2要素目の認証方法を聞かれます。どれを選択してもいいのですが、ここではメールアドレスを選択してみます:
すると登録したメールアドレスに IBM Security からメールが届きます。その中にワンタイムパスワードが含まれています:
メール内のパスワードをログイン画面に入力して再度 submit します:
2要素認証を経て Windows にログインできました:
【Linux への SSH ログイン時に多要素認証を行う場合】
Linux へ SSH でログインして作業する機会は珍しくないと思いますが、そのログインを2要素認証にすることも可能です。その手順を紹介します。なおここでは Linux 向け手順を紹介しますが、同様にして AIX 版を利用することで AIX へ適用することも可能です。
前提として、上述の 1. の手続き(IBM Security Verify for Workforce IAM へのサインアップとユーザー&デバイスの登録)まで済ませておきます。また今回の作業を行う対象となる Linux サーバーを用意します(SSH 可能な状態でセットアップします)。
続いて以下から IBM Security Verify Gateway for Linux PAM をダウンロードします:
https://exchange.xforce.ibmcloud.com/hub/IdentityandAccess
対象の Linux に root でログインし、以下の手順でパッケージを展開し、インストールします:
同パッケージが正しく動作するようデーモンを設定します。vi などのテキストエディタで /etc/pam_ibm_auth.json を編集します:
↑具体的には上述の IBM Security Verify for Windows Login で指定したものと同様の設定を指定して保存します。
設定ファイルを編集したらデーモンを有効にします:
この後で ssh による多段階認証を有効にしますが、「設定が間違っていて、修正したいけど誰もログインできなくなった」という状態を避けるために多段階認証を適用しないユーザーも必要です。今回は root ユーザーは多段階認証なしにログインできるよう設定しておく例を紹介します:
では sshd の設定も変更して、SSH 時の2段階認証を有効にします。まず /etc/pam.d/password-auth ファイルを /etc/pam.d/civ-auth-choice というファイルにコピーし、その上で /etc/pam.d/civ-auth-choice ファイルを編集します:
まず pam_unix.so を参照している auth から始まる行を探します。そして2列目の sufficient を requisite に変更します。そしてその直下に1行追加し、"auth sufficient pam_ibm_auth.so auth_method=choice-then-otp exempt_group=nomfa add_devices_to_choice transients_in_choice failmode_insecure accept_on_missing_auth_method " という行を追加して保存します。
続いて /etc/ssh/sshd_config ファイルを編集し、ChallengeResponseAuthentication で始まる行を探して、その値を yes に変更します(コメントされていたらコメントアウトします):
この後で sshd を再起動します:
sshd のプロセスは SELinux で守られていて、特定のポートを通じてのみアクセスできます。この部分も変更する必要があります:
最後に PAM の設定をこれまでの作業内容を参照するよう変更します。/etc/pam.d/sshd を以下のように変更します:
↑"auth substack" で始まる行を探して、3列目の値を "password-auth" から "civ-auth-choice" に変更して保存します。
これで SSH の2段階認証が有効になっているはずです。動作確認のため以下のコマンドで(localhost で)SSH ログインしてみます(username 部分には存在するユーザーの名前を指定してください):
上述の Windows の時と同様に、パスワードを聞かれた後に2段階目の認証方法を聞かれます:
今回は1番を選択した例を紹介します。上述の IBM Verify アプリをスマホに導入している場合に使うことができる選択肢です。1を入力すると OTP(ワンタイムパスワード)を聞かれます:
この時点で登録したデバイスの IBM Verify アプリを起動し、このタイミングでのアクセスコード(ワンタイムパスワード)を確認します:
表示されている有効期限内に入力できるようなタイミングを図りつつ、ワンタイムパスワードを入力します:
正しく入力できると ssh が成功し、リモートログインが完了します(下図ではプロンプトが # から $ に変わっています):
Linux の SSH でも2要素認証が実現できました。
【まとめ】
以上、手順含めての紹介だったこともあり、かなり長い説明になってしまいましたが、これだけの手続きで各種ログインの多要素認証が実現できることがわかりました。しかも90日間の体験版として無料提供されている機能を使って実現できたので、実際に本格導入する前の動作確認まで出来て、かなりお得なサービスであるように感じます。
今回紹介した多要素認証は Windows ログインと Linux (SSH) ログインでした。用語などで慣れないと戸惑う部分があるかもしれませんが、自分が躓いた所を中心に日本語解説資料を作るつもりで紹介しました。ぜひ皆さんにも試していただければと思っています。
IBM Cloud が提供している多要素認証サービスである IBM Security Verify for Workforce IAM を使う機会がありました。簡単に各種多要素認証を実装できるサービスだったので、備忘録の意味でもまとめてみました。
【IBM Security Verify for Workforce IAM で実現できる多要素認証の種類】
まず、このサービスを有効にすることで利用できる多要素認証の要素は以下の4種類あります:
(1) ワンタイムパスワード
(2) 確認タップ
(3) SMS
(4) メール
(1) と (2) はスマホに専用アプリ(IBM Security Verify)をインストールすることで利用可能になります。(1) は同アプリ内に表示されているワンタイムパスワードを制限時間内に入力することで確認するもの、(2) は同アプリ内に通知される確認メッセージに対して「承認」のタップを行うことで確認されます。「入力の手間がない」という点ではこの (2) が最も楽な要素といえると感じています。 また (3) はスマホへの SMS に送信されたワンタイムパスワードを入力するもの、(4) は指定したメールアドレスへ送信されたワンタイムパスワードを入力するものです。(3) と (4) は専用アプリを必要としないため、古いスマホやスマホ以外の電話機でも利用可能です(メールに関しては電話機である必要もありません)。
【IBM Security Verify for Workforce IAM を使った多要素認証】
実際に多要素認証を実現するまでの大きな流れとしては、以下の2段階となります:
1. 多要素認証サービスに登録する
2. 各種ログイン時に 1. のサービスが有効になるよう設定する
少し細かく紹介すると、1. はサービスへサインインすることに加えて、多要素認証で利用する手法を登録します。具体的にはメール、電話、SMSそしてスマホ向けの専用アプリです。一般的に多要素認証で使われるのはメール、電話、SMS でコードを知らせて入力させる、という方法ですが、最後の専用アプリを使うとプッシュで知らされる通知に「承認」タップをするだけで認証が完了します。2段階目の手続きが一番楽になる方法でもあります。
2. は 1. で登録した多要素認証サービスを「どの」認証の際に使うか、という設定です。今回のブログでは
(1) Windows へのログイン時
(2) Linux 等への SSH ログイン時
の2種類それぞれで使う場合の設定手順を紹介します。
【IBM Security Verify for Workforce IAM の無料評価版に登録】
まずは上記 1. のサービス登録部分を行います。
IBM Security Verify for Workforce IAM のページへ行き、「無料評価版を試す」というボタンをクリックします:
https://www.ibm.com/jp-ja/products/verify-for-workforce-iam
IBM ID でのログインが求められるのでログインします。その後、テナントサーバーのホスト名の入力が促されるので、ユニークな(他の人が使ってなさそうな)文字列を入力して "Create tenant" ボタンをクリックします。基本的に作業はこれだけです:
試用アカウントの作成等、色々準備が進んでいくので少し待ちます:
1~2分程度で「ようこそ」画面が表示されます。使用条件同意にチェックを入れて「続行」:
すると IBM Security Verify のダッシュボード画面が表示されます。これで IBM Security Verify のアカウントが作成できました:
【IBM Security Verify for Workforce IAM に API client を登録】
サービスへのサインアップはこれだけで完了です。次に各種クライアントからこのサービスを利用できるよう、IBM Security Verify for Workforce IAM に API client を登録します。左上のハンバーガーメニューから "Configuration" を選択します:
Configuration の "API access" タブを選択し、"Add API client" ボタンをクリックします:
API Client を追加するダイアログが表示されます。まず適当な名前(例 MFA-Client)を入力して、Enabled がチェックされていることを確認します(まだ Save を押さずに下にスクロールします):
そのまま下にスクロールして、Access 欄で以下の4つにチェックを入れ、最後に Save をクリックします:
- Authenticate any user
- Read authenticator registrations for all users
- Read second-factor authentication enrollment for all users
- Read users and groups
1つ前の画面に戻り、作成した API client が一覧に表示されていることを確認します。この一覧の右側に EDIT ボタンがあるのでここをクリックします:
クリックすると、この API client の Client ID と Client secret を確認することができます。後ほど使うのでメモしておきます:
【IBM Security Verify for Workforce IAM にユーザーを登録】
次に IBM Security Verify for Workforce IAM に2要素認証を行うユーザーを登録します。左上のハンバーガーメニューから "Users & groups" を選択します:
まだユーザーが登録されていない初回は最初にユーザー登録ダイアログが表示されます。以下を指定して(他は適当に指定して)Save をクリックします:
- Identity source : Cloud Directory
- user name : (これから作成するユーザーのログイン時のユーザー名)
- Work e-mail : (これから作成するユーザーのメールアドレス、この後ここにメールが送信される)
- Mobile number: (これから作成するユーザーの携帯電話番号、日本の携帯電話であれば +81 を付け、更に最初の 0 を消して登録する。このあと SMS 認証で利用する)
ここまで完了したら(次に新規ユーザーでサインインできるよう)このアカウントではいったんサインアウトします。画面右上のアイコンから "Sign out" を選択します:
サインアウトできました:
【IBM Security Verify for Workforce IAM にユーザーのデバイス(スマホ)を登録】
ここからは登録されたユーザーによる作業となります。
先ほどユーザー作成時に指定したメールアドレスの受信ボックスを確認してください。IBM Security から Account created というサブジェクトのメールが送信されているはずです。その中に user name で指定したログイン名と初期パスワードが表示されています。下の URL をクリックしてログインします:
ログイン画面が表示されたら、メールに記載されていた user name と password を指定してログインします:
最初の1回目は初期パスワードから別のパスワードへ変更する必要があるので、自分で管理できるパスワードに変更してください:
全て完了すると登録したユーザーで IBM Security Verify にログインします:
次のこのユーザーのスマートフォンと、認証デバイスを登録します。画面右上のアイコンをクリックして、"Profile & settings" を選択します:
まず登録したユーザー情報のメールアドレスや電話番号が正しいものかどうかをを確認するための画面が表示されます。確認方法は選択できますが、今回は SMS(Text message) を使って確認することにします。"Text message" の横にある "Send code" をクリックします:
すると登録時に指定した電話番号に SMS でコードが届きます。そのコードを認証画面内に登録して Submit します:
正しいコードを入力することができると携帯電話の登録が完了します。一応これだけでも利用できるのですが、専用アプリを登録しておくと2段階認証時の手続きが簡単になるので、続けて専用アプリを登録しておきます。"Add new method" と書かれた箇所をクリックします:
登録するデバイスを選択する画面になります。ここでは IBM Verify app 横の "Add device" をクリックします:
スマートフォンに "IBM Verify" アプリケーションをインストールするよう求められます。App Store や Google Play から "IBM Verify" を検索してアプリをインストールしてください。インストールできたら "Connect your account" を選択します:
画面に QR コードが表示されます。この QR コードをスマホにインストールした IBM Verify を開いて Q読み取ります:
デバイスが登録されますが、まだ "Unauthorized" という扱いになっています。アプリケーションの認証コードを入力してこのアプリケーションとデバイスを認証します:
成功するとこのような画面になります:
"Authentication app" として表示されていれば成功です:
ここまでの作業で上記 1. の多要素認証サービスへの登録作業が完了しました。
ここから下は 2. の作業になります。実際に多要素認証を利用する認証方法ごとに行います。
【Windows へのログイン時に多要素認証を行う場合】
Windows へのログイン時に多要素認証を行う場合の作業手順を説明します。
そのための作業として、対象の Windows PC に IBM Security Verify for Windows Login という Windows アプリケーションを導入します。
まず IBM Security Verify for Windows Login の動作に必要な VSVC++ ランタイムをダウンロードしてインストールします:
https://support.microsoft.com/ja-jp/help/2977003/the-latest-supported-visual-c-downloads
続いて以下から IBM Security Verify Gateway for Windows Login をダウンロードします:
https://exchange.xforce.ibmcloud.com/hub/IdentityandAccess
ダウンロードしたファイルを展開し、setup.exe を実行してインストールします:
インストール後、C:\Program Files\IBM\WindowsLogin\ フォルダ以下にある config.json.sample ファイルをテキストエディタで開きます:
以下の内容で書き換え、config.json という名前で保存します:
{ "ibm-auth-api":{ "client-id":"********", "obf-client-secret":"XXXXXXXXXXXX", /* See obfuscate.exe tool. */ "protocol":"https", "host":"xxxxxxx.verify.ibm.com", "port":443, "max-handles":16 }, "credential-provider":{ "username-format":"%U", /*"trace-file":"c:/tmp/credprov.log", */ "disable-builtin-password-logon": false, "no-mfa-account": "XXXXXXXX\\Administrator", "auth-method":"winpwd-then-choice-then-otp" } }
上記を編集する際の注意点があります。
まず client-id には上述の作業で API client を登録した際に取得した Client ID の値をそのまま入力します。
obf-client-secret の値は少し手順が必要です。config.json.sample と同じフォルダに obfuscate.exe というコマンドラインツールがあります。コマンドプロンプトを開いて、以下のコマンドを実行します:
> obfuscate (API client を登録した際に取得した Client Secret の値)
この実行結果として表示される内容を上記 obf-client-secret の値として入力してください(Client Secret の値をそのまま入力するわけではない点に注意してください)。
そして host は IBM Security Verify for Workforce IAM サインアップ時に指定した tenantId を使った "{tenantId}.verify.ibm.com" という値を指定します。
更に username-format の値には "%U" を、no-mfa-account の値にはこの Windows PC の名前(XXXXXXX)を使って "XXXXXXX\\Administrator" と指定してください(最後の設定により Administrator アカウントのみ多段階認証が無効になります)。
最後にこのファイルを同じフォルダ内に config.json という名前で保存すれば準備完了です。
では実際に Windows で多要素認証が有効になっているかどうかを確認します。Windows のログイン画面で Administrator アカウント以外のユーザーを指定します。するとパスワード入力画面に "Sign-in options" というメニューが現れます:
同部分をタップして開き、盾のようなアイコンを選択します(選択されていることを確認します):
この状態でまずは普通にログインパスワードを入力します:
すると2要素目の認証方法を聞かれます。どれを選択してもいいのですが、ここではメールアドレスを選択してみます:
すると登録したメールアドレスに IBM Security からメールが届きます。その中にワンタイムパスワードが含まれています:
メール内のパスワードをログイン画面に入力して再度 submit します:
2要素認証を経て Windows にログインできました:
【Linux への SSH ログイン時に多要素認証を行う場合】
Linux へ SSH でログインして作業する機会は珍しくないと思いますが、そのログインを2要素認証にすることも可能です。その手順を紹介します。なおここでは Linux 向け手順を紹介しますが、同様にして AIX 版を利用することで AIX へ適用することも可能です。
前提として、上述の 1. の手続き(IBM Security Verify for Workforce IAM へのサインアップとユーザー&デバイスの登録)まで済ませておきます。また今回の作業を行う対象となる Linux サーバーを用意します(SSH 可能な状態でセットアップします)。
続いて以下から IBM Security Verify Gateway for Linux PAM をダウンロードします:
https://exchange.xforce.ibmcloud.com/hub/IdentityandAccess
対象の Linux に root でログインし、以下の手順でパッケージを展開し、インストールします:
# unzip IBMSecurityVerifyGatewayForLinuxPAM_v1.0.3.zip # cd IBMSecurityVerifyGatewayForLinuxPAM_v1.0.3 # unzip centos7.zip (CentOS 7 or 8 の場合) # rpm -ivh *.rpm
同パッケージが正しく動作するようデーモンを設定します。vi などのテキストエディタで /etc/pam_ibm_auth.json を編集します:
{ "ibm-auth-api": { "client-id": "********", "obf-client-secret": "XXXXXXXXXXXX", "protocol": "https", "host": "xxxxxxx.verify.ibm.com", "port": 443, "authd-port": 12, "max-handles": "16" }, : }
↑具体的には上述の IBM Security Verify for Windows Login で指定したものと同様の設定を指定して保存します。
設定ファイルを編集したらデーモンを有効にします:
# systemctl enable ibm_authd_64.service --now
この後で ssh による多段階認証を有効にしますが、「設定が間違っていて、修正したいけど誰もログインできなくなった」という状態を避けるために多段階認証を適用しないユーザーも必要です。今回は root ユーザーは多段階認証なしにログインできるよう設定しておく例を紹介します:
# groupadd -r nomfa # usermod -aG nomfa root
では sshd の設定も変更して、SSH 時の2段階認証を有効にします。まず /etc/pam.d/password-auth ファイルを /etc/pam.d/civ-auth-choice というファイルにコピーし、その上で /etc/pam.d/civ-auth-choice ファイルを編集します:
: : auth requisite pam_unix.so nullok try_first_pass auth sufficient pam_ibm_auth.so auth_method=choice-then-otp exempt_group=nomfa add_devices_to_choice transients_in_choice failmode_insecure accept_on_missing_auth_method : :
まず pam_unix.so を参照している auth から始まる行を探します。そして2列目の sufficient を requisite に変更します。そしてその直下に1行追加し、"auth sufficient pam_ibm_auth.so auth_method=choice-then-otp exempt_group=nomfa add_devices_to_choice transients_in_choice failmode_insecure accept_on_missing_auth_method " という行を追加して保存します。
続いて /etc/ssh/sshd_config ファイルを編集し、ChallengeResponseAuthentication で始まる行を探して、その値を yes に変更します(コメントされていたらコメントアウトします):
:
:
#ChallengeResponseAuthentication yes
ChallengeResponseAuthentication yes
:
:
この後で sshd を再起動します:
# systemctl restart sshd
sshd のプロセスは SELinux で守られていて、特定のポートを通じてのみアクセスできます。この部分も変更する必要があります:
# semanage port -a -t kerberos_port_t -p tcp 12
最後に PAM の設定をこれまでの作業内容を参照するよう変更します。/etc/pam.d/sshd を以下のように変更します:
#%PAM-1.0
auth required pam_sepermit.so
auth substack civ-auth-choice
auth include postlogin
:
:
↑"auth substack" で始まる行を探して、3列目の値を "password-auth" から "civ-auth-choice" に変更して保存します。
これで SSH の2段階認証が有効になっているはずです。動作確認のため以下のコマンドで(localhost で)SSH ログインしてみます(username 部分には存在するユーザーの名前を指定してください):
# ssh username@localhost
上述の Windows の時と同様に、パスワードを聞かれた後に2段階目の認証方法を聞かれます:
今回は1番を選択した例を紹介します。上述の IBM Verify アプリをスマホに導入している場合に使うことができる選択肢です。1を入力すると OTP(ワンタイムパスワード)を聞かれます:
この時点で登録したデバイスの IBM Verify アプリを起動し、このタイミングでのアクセスコード(ワンタイムパスワード)を確認します:
表示されている有効期限内に入力できるようなタイミングを図りつつ、ワンタイムパスワードを入力します:
正しく入力できると ssh が成功し、リモートログインが完了します(下図ではプロンプトが # から $ に変わっています):
Linux の SSH でも2要素認証が実現できました。
【まとめ】
以上、手順含めての紹介だったこともあり、かなり長い説明になってしまいましたが、これだけの手続きで各種ログインの多要素認証が実現できることがわかりました。しかも90日間の体験版として無料提供されている機能を使って実現できたので、実際に本格導入する前の動作確認まで出来て、かなりお得なサービスであるように感じます。
今回紹介した多要素認証は Windows ログインと Linux (SSH) ログインでした。用語などで慣れないと戸惑う部分があるかもしれませんが、自分が躓いた所を中心に日本語解説資料を作るつもりで紹介しました。ぜひ皆さんにも試していただければと思っています。