デスクトップログインとLinuxユーザー認証#

はじめに#

This guide will walk you through the configuration of Linux to use FIDO Universal 2nd Factor, i.e. FIDO U2F with libpam-u2f and Nitrokey FIDO2.

`Nitrokey Pro 2でログインする場合。<https://shop.nitrokey.com/shop/product/nk-pro-2-nitrokey-pro-2-3>`__ Nitrokey Storage 2 および Nitrokey を使用してコンピュータにログインする場合。開始 は、` こちら <../../pro/linux/login-with-pam.html>`_ から入手可能な手順を参照してください。

要求事項#

使い方#

GUI方式#

  1. 左下の Show Applications をクリックし、検索バーに次のように設定を入力します:**

    img1
  2. 右のバーを下にスクロールすると Users が表示されます。

    img2
  3. Unlock すると、パスワードの入力を要求されます

    img3
  4. Administrator を選択し、任意のユーザー名とパスワードを入力してください**。

    img4
  5. **ステップ4が終了したら、終了です。

    img5

CLIメソッド#

  1. バックアップユーザーを作成し、root権限を付与する

    これらのコマンドを使って行うことができます。

    $ sudo adduser <backup_user>
    $ sudo usermod -aG sudo <backup_user>
    

    U2Fを1人のユーザーで設定したい場合、ユーザーセッションからロックアウトされても、``<backup_user>``でログインし、メンテナンスを進めることができます。

    警告

    以下のガイドは、あなたのコンピュータをロックアウトする可能性があります。このようなリスクを認識した上で、まずはセカンダリのコンピューターで以下の手順を使用するか、完全にバックアップを取った後に使用することをお勧めします。

    PAM モジュール を設定した後、データにアクセスできなくなる場合があります。

  2. ``rules`` **Nitrokey FIDO2 を認識するように設定する。

    アンダー /etc/udev/rules.d ダウンロード 41-nitrokey.rules

    $ cd /etc/udev/rules.d/
    $ sudo wget https://raw.githubusercontent.com/Nitrokey/libnitrokey/master/data/41-nitrokey.rules
    

    そして、``udev``サービスを再起動します。

    $ sudo systemctl restart udev
    
  3. インストール libpam-u2f

    Ubuntu 20.04では、公式リポジトリから``libpam-u2f``を直接ダウンロードすることができます。

    $ sudo apt install libpam-u2f
    

    注釈

    クリックすると他のオプションが表示されます

    • あるいは、libpam-u2fGit から構築することも可能です。

    • ライブラリが正しくインストールされていることを確認するには、次のコマンドを入力します。

    $ file /lib/x86_64-linux-gnu/security/pam_u2f.so
    

    出力は以下のようになります。

    /lib/x86_64-linux-gnu/security/pam_u2f.so: \ ELF 64-bit LSB shared object, x86-64, version 1 (SYSV),\ dynamically linked, BuildID[sha1]=1d55e1b11a97be2038c6a139579f6c0d91caedb1, stripped
    
  4. ディレクトリを準備する

    ホームディレクトリの下に``.config/Nitrokey/``を作成する。

    $ mkdir ~/.config/Nitrokey
    

    そして、Nitrokey FIDO2を差し込みます。

    準備が完了したら、ログイン時の2要素認証にNitrokey FIDO2を使用するようにコンピュータを設定し、``sudo``の設定を開始します。

  5. U2Fの設定ファイルを生成する

    設定ファイルを生成するために、pamu2fcfg``に付属するユーティリティーを使用します。便宜上、ユーティリティーの出力を``u2f_keys``の.config/Nitrokey``のファイルに直接書き込みます。まず、Nitrokey FIDO2を(まだ接続していなければ)接続して、以下のコマンドを入力します。

    $ pamu2fcfg > ~/.config/Nitrokey/u2f_keys
    

    上のコマンドを実行したら、点滅している間にキーをタッチする必要があります。そうすると、``pamu2fcfg``の出力に、``u2f_keys``が以下のような形式で追加されます。

    <username>:Zx...mw,04...0a
    

    なお、出力はもっと長くなりますが、ここでは重要な部分を削除しています。より良いセキュリティのために、また、設定ファイルが生成されたら、``.config/Nitrokey``ディレクトリを``etc/``ディレクトリの下に移動させます。

    $ sudo mv ~/.config/Nitrokey /etc
    

    Tip

    • ``.config/Nitrokey``の下のファイルは、``u2f_keys``という名前でなければなりません。

    • まず、1人のユーザーで手順をテストすることをお勧めします。この目的のために、前のコマンドでは、``-u``オプションを使って、以下の例のようにユーザーを指定しています。

      $ pamu2fcfg -u <username> > ~/.config/Nitrokey/u2f_keys
      
    • 個々のユーザーの設定については、次のステップでホームディレクトリを指定するか、PAMの設定で``authfile``オプションを含めないようにします。

  6. バックアップ

    このステップは任意ですが、Nitrokey FIDOの紛失、盗難、破壊に備えて、バックアップのNitrokeyを用意しておくことをお勧めします。

    バックアップ・キーを設定するには、上記の手順を繰り返し、pamu2fcfg -n を使用します。これにより、<username> のフィールドが省略され、出力は次のように``<username>`` のある行に追加することができます。

    <username>:Zx...mw,04...0a:xB...fw,04...3f
    
  7. Pluggable Authentication Moduleの変更 PAM

    最後のステップは、``/etc/pam.d/``にあるPAMモジュールファイルの設定です。このガイドでは、``common-auth``のファイルを修正します。このファイルは、すべてのサービスに共通する認証設定を処理するからですが、他のオプションも可能です。以下のコマンドで、このファイルを変更することができます。

    $ cd /etc/pam.d
    $ sudo $editor common-auth
    

    そして、ファイルの先頭に以下の行を追加する:

    #Nitrokey FIDO2 config
    auth    sufficient pam_u2f.so authfile=/etc/Nitrokey/u2f_keys cue prompt nouserok
    

    Tip

    • セントラル認証マッピングを使用しているので、``pam_u2f``オプションで使用するファイルの場所を``authfile``に指示する必要があります。

    • キーの入れ忘れが多い場合``prompt`` オプション make pam_u2f print Insert your U2F device, then press ENTER. となり、Nitrokeyを挿入する機会を与えてくれます。

    • Nitrokeyをタッチするように促されたい場合。cue オプションでは、pam_u2f print Please touch the device. メッセージを表示します。

    • nouserok`は、ユーザー名とパスワードを使ってログインできるようにするもので、セットアップがうまくいき、通常のユーザー名とパスワードによるログインが不要になった時点で、これを削除したいかもしれない。

    ``common-auth``を修正したら、ファイルを保存して終了します。

    ターミナルで sudo ls と入力すれば、設定をテストできる。すると、``Please touch the device.``というメッセージが表示され、ターミナルに同じような出力が出るはずだ:

    nitrouser@nitrouser:~$ sudo ls
    [sudo] password for nitrouser:  Please touch the device.
    

    また、ユーザーセッションからログアウトしてからログバックすることで、設定をテストすることができます。Nitrokey FIDO2のプラグを抜き差しし、パスワードを入力すると、同様の画面が表示されます。

    img6

使用方法#

PAMモジュールの修正後は、すぐに設定を試すことができますが、コンピュータを再起動し、Nitrokey FIDO2を抜き差しすることをお勧めします。

このガイドの指示を適切にテストした後(バックアップを設定した後)、次のようにします。``required``や``requisite``の制御フラグの代わりに、``sufficient``のいずれかを使用することをお勧めします。

``required``および``requisite``のフラグは、より厳格なアクセスコントロールを提供し、ログインや設定されたサービスの利用にはNitrokey FIDO2が必要となります。

``PAM``の設定ラインでのコントロールフラグについて、より詳しい情報が必要な場合は、このガイドの最後のセクションを参照して、その違いやそれぞれの使用の意味を理解してください。

PAMモジュール#

いくつかのPAMモジュールファイルがあり、必要に応じて変更することができます。

  • ``/etc/pam.d/common-auth``のファイルを修正することで、グラフィック・ログインと``sudo``の2要素認証にNitrokey FIDOを使用することができるようになります。注意:``common-auth``は、ファイルの最後に追加の設定行を追加して変更する必要があります。

  • If you wish to use FIDO U2F authentication solely for Gnome’s graphic login, you might prefer to modify the/etc/pam.d/gdm-password

  • また、``/etc/pam.d/sudo``コマンドを使用する際にFIDO U2Fを使用したい場合は、``sudo``ファイルを変更することもできます。

制御フラグ#

ステップ7では、``sufficient``の制御フラグを使用して、Nitrokeyが接続されている場合とそうでない場合のPAMモジュールの動作を決定しました。しかし、以下の制御フラグを使用することで、この動作を変更することが可能です。

  • required。これは最も重要なフラグです。認証を継続するためには、モジュールの結果が成功する必要があります。このフラグは、Nitrokeyにアクセスできない場合、コンピュータからロックアウトされる可能性があります。

  • requisite``required``と似ていますが、特定のモジュールが失敗を返した場合には、制御は直接アプリケーションまたは上位のPAMスタックに戻されます。また、このフラグは、Nitrokeyにアクセスできない場合、コンピュータからロックアウトすることができます。

  • sufficient``である:モジュールの結果が失敗した場合は無視される。sufficient``フラグはテスト用として安全であると考えられている。

  • オプションである:optional``:このモジュールの成否は、このサービス+タイプに関連するスタック内の唯一のモジュールである場合にのみ重要である。オプションフラグ optional はテスト目的で使用しても安全であると考えられている。

警告

  • ``required``または``requisite``が設定されている場合、U2F認証が失敗すると、全体の認証が失敗することになります。設定されたNitrokey FIDOが差し込まれていない、紛失している、または破壊されている場合に失敗となります。

  • PAMモジュールの設定を誤り、required``requisite``のフラグを使用した場合は、コンピュータへのアクセスを失います。

  • また、セントラル認証マッピングを設定した場合、sudo を使用することができなくなります。*また、requiredrequisite のフラグを使用していた場合は、使用できなくなります。