作者はhttps://www.brightfunds.org/organizations/electronic-frontier-foundation-inc[Electronic Frontier Foundation]を選択して、https://do.co/w4do-cta [Write for DOnations]プログラム。

前書き

2要素認証(2FA)は、アカウントまたはデバイスに正常にログインするために複数の情報を入力する必要がある認証方法です。 ユーザー名とパスワードの組み合わせを入力することに加えて、2FAでは、6桁の確認コードなど、ワンタイムパスワード_(OTP)などの追加の情報を入力する必要があります。

一般に、2FAでは、ユーザーがさまざまなタイプの情報を入力する必要があります。

  • パスワードなど、ユーザーが_知っている_こと

  • 認証アプリケーションから生成された検証コードなど、ユーザーが_has_するもの

2FAは_multi-factor authentication_(MFA)のサブセットです。MFAは、ユーザーが知っていることや持っているものに加えて、ユーザーが_is_するものを必要とします。 これは、指紋や音声認識などの技術を使用する生体認証の場合です。

2FAは、特定のサービスまたはデバイスの認証プロセスを強化するのに役立ちます。パスワードが侵害された場合でも、攻撃者はセキュリティコードの生成に使用される認証アプリを保持するユーザーのデバイスにアクセスする必要があります。 このため、多くのオンラインサービス(https://www.digitalocean.com/docs/accounts/security/2fa/[DigitalOceanを含む])は、ユーザーアカウントの2FAを有効にして、認証に関するアカウントのセキュリティを強化する可能性を提供します。段階。

このガイドでは、Google PAMモジュールを使用してUbuntu 18.04をインストールした非ルートsudoerユーザー用に2FAを構成します。 非rootユーザーで2FAを構成しているため、ロックアウトの場合でも* root *アカウントからマシンにアクセスできます。 チュートリアルは、サーバーとデスクトップインストール(ローカルとリモートの両方)の両方に適用できるほど一般的です。

前提条件

このガイドを始める前に、次のものが必要です。

  • 1つのUbuntu 18.04サーバーまたはデスクトップ環境。 Ubuntuサーバーを使用している場合は、https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04 [Ubuntu 18.04 initial server setup]ガイドに従ってセットアップしてください。 sudo特権を持つ非ルートユーザーとファイアウォールが含まれます。

  • Google Authenticatorなどの2FA QRコードをスキャンできるモバイルデバイスにインストールされた認証アプリケーションhttps://authy.com/[Authy]。

ステップ1-Google PAMモジュールのインストール

Ubuntu 18.04で2FAを設定するには、Linux用https://github.com/google/google-authenticator-libpam[GoogleのPAMモジュール]をインストールする必要があります。 Pluggable Authentication Module(PAM)は、Linuxが使用する認証メカニズムです。 GoogleのPAMモジュールを使用して、ユーザーがGoogle生成のOTPコードを使用して2FAで認証するようにします。

最初に、前提条件で構成した非rootユーザーとしてログインします。

ssh @

Ubuntuリポジトリーを更新して、オーセンティケーターの最新バージョンをダウンロードします。

sudo apt-get update

リポジトリが最新になったので、PAMモジュールの最新バージョンをインストールします。

sudo apt-get install libpam-google-authenticator

これは依存関係のない非常に小さなパッケージであるため、インストールには数秒かかります。 次のセクションでは、システム上の非rootユーザー用に2FAを構成します。

ステップ2-ユーザー用の2FAの構成

PAMモジュールをインストールしたので、それを実行して、ログインしているユーザーのQRコードを生成します。 これによりコードが作成されますが、Ubuntu環境では、このチュートリアルの後半で有効にするまで2FAは必要ありません。

`+ google-authenticator +`コマンドを実行して、PAMモジュールを起動して設定します。

google-authenticator

このコマンドは、構成に関するいくつかの質問をするプロンプトを表示します。 最初の質問では、トークンを時間ベースにするかどうかを尋ねられます。 時間ベースの認証トークンは、設定された時間が経過すると失効します。ほとんどのシステムでは、デフォルトで30秒に設定されています。 時間ベースのトークンは、時間ベースではないトークンよりも安全であり、ほとんどの2FA実装はそれらを使用します。 ここでいずれかのオプションを選択できますが、このチュートリアルでは、時間ベースの認証トークンを使用するために「+ Yes +」を選択します。

OutputDo you want authentication tokens to be time-based (y/n)

この質問に答えると、コンソールに数行の出力が表示されます。

  • QRコード:これは、認証アプリを使用してスキャンする必要があるコードです。 スキャンすると、すぐにコード生成デバイスに変わり、30秒ごとに新しいOTPが作成されます。

  • 秘密鍵:これは、認証アプリを構成する代替方法です。 QRスキャンをサポートしないアプリを使用している場合は、秘密キーを入力して認証アプリを構成できます。

  • 確認コード:これは、この特定のQRコードが生成する最初の6桁の確認コードです。

  • 緊急スクラッチコード:バックアップコードとも呼ばれるこれらの使い捨てトークンを使用すると、認証デバイスを紛失した場合に2FA認証を渡すことができます。 アカウントからロックアウトされないように、これらのコードは安全な場所に保管してください。

認証アプリを設定し、安全な場所にバックアップコードを保存すると、設定ファイルを更新するかどうかを確認するプロンプトが表示されます。 `+ n `を選択した場合、設定プログラムを再度実行する必要があります。 変更を保存して先に進むには、「 y +」と入力します。

OutputDo you want me to update your "~/.google_authenticator" file (y/n)

次の質問では、認証コードを複数回使用することを禁止するかどうかを尋ねられます。 デフォルトでは、30秒間有効のままであっても、各コードは1回しか使用できません。 これは、使用後に確認コードを手に入れることができた攻撃者からのリプレイ攻撃を防ぐため、最も安全な選択です。 このため、コードの複数回の使用を禁止する方が安全です。 同じトークンの複数の使用を禁止するには、「+ y +」と答えます。

OutputDo you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n)

次の質問では、認証トークンを通常の有効期間の前後に短時間受け入れるかどうかを尋ねます。 検証コードは非常に時間に敏感です。つまり、デバイスが同期されていない場合、トークンを拒否できます。 このオプションを使用すると、検証コードのデフォルトの有効期間を延長することでこの問題を回避でき、デバイスが一時的に同期していなくても、認​​証コードが受け入れられます。 `+ yes `を選択するとシステムのセキュリティが低下するため、すべてのデバイスで時間が同じであることを確認するのが最適なオプションです。 猶予期間を許可しないようにするには、この質問に「 n +」と答えます。

OutputBy default, tokens are good for 30 seconds and in order to compensate for
possible time-skew between the client and the server, we allow an extra
token before and after the current time. If you experience problems with poor
time synchronization, you can increase the window from its default
size of 1:30min to about 4min. Do you want to do so (y/n)

最後の質問では、ログイン試行のレート制限を有効にするかどうかを尋ねられます。 これにより、30秒ごとに3回を超えるログイン試行の失敗が許可されなくなります。これは、優れたセキュリティ強化テクニックです。 `+ y +`と答えて有効にします:

OutputIf the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting (y/n)

これで、PAMモジュールを使用して非rootユーザーの2FAコードを構成および生成しました。 コードが生成されたので、環境で2FAを有効にする必要があります。

ステップ3-Ubuntuで2FAをアクティブ化する

Google PAMモジュールは現在、ユーザーに2FAコードを生成していますが、Ubuntuはユーザーの認証プロセスの一部としてコードを使用する必要があることをまだ知りません。 このステップでは、通常の認証方法に加えて2FAトークンを要求するようにUbuntuの構成を更新します。

この時点で2つの異なるオプションがあります。

  • ユーザーがシステムにログインするたびに、およびユーザーが `+ sudo +`権限を要求するたびに2FAを要求できます。

  • ログイン中にのみ2FAを要求できます。その後の「+ sudo +」認証試行ではユーザーパスワードのみが必要になります。

最初のオプションは、 `+ sudo +`パーミッションを必要とするアクションを保護したい共有環境に理想的です。 2番目のアプローチは、システム上の唯一のユーザーであるローカルデスクトップ環境にとってより実用的です。

ログインおよびsudoリクエストに2FAを要求する

ログイン時および後続の特権エスカレーションリクエスト中に2FAのプロンプトを表示するには、既存のファイルの最後に行を追加して、 `+ / etc / pam.d / common-auth +`ファイルを編集する必要があります。

`+ common-auth `ファイルは、使用されているデスクトップ環境に関係なく、システム上のすべての認証メカニズムに適用されます。 また、ターミナルから新しいパッケージをインストールする際の「 sudo +」エスカレーション要求中など、ユーザーがシステムにログインした後に発生する認証要求にも適用されます。

次のコマンドでこのファイルを開きます。

sudo nano /etc/pam.d/common-auth

ファイルの最後に強調表示された行を追加します。

/etc/pam.d/common-auth

...
# and here are more per-package modules (the "Additional" block)
session required    pam_unix.so
session optional    pam_systemd.so
# end of pam-auth-update config

この行は、Ubuntu認証システムに、Google PAMモジュールからのログイン時に2FAを要求するように指示します。 「+ nullok 」オプションを使用すると、既存のユーザーは、アカウントに2FA認証を設定していない場合でもシステムにログインできます。 言い換えると、2FAを設定したユーザーは、次回のログイン時に認証コードを入力する必要がありますが、 ` google-authenticator +`コマンドを実行していないユーザーは、ユーザー名とパスワードのみでログインできます2FAを構成するまで。

行を追加した後、ファイルを保存して閉じます。

ログインのみに2FAを要求する

デスクトップ環境のシステムに初めてログインしたときにのみ2FAのプロンプトを表示する場合は、使用しているデスクトップマネージャーの構成ファイルを編集する必要があります。 通常、構成ファイルの名前はデスクトップ環境の名前と一致します。 たとえば、Ubuntu 16.04以降のデフォルトのUbuntuデスクトップ環境である `+ gdm `の設定ファイルは ` / etc / pam.d / gdm +`です。

DigitalOcean Dropletなどのヘッドレスサーバーの場合、代わりに `+ / etc / pam.d / common-session +`ファイルを編集します。 環境に基づいて関連ファイルを開きます。

sudo nano

強調表示された行をファイルの最後に追加します。

/etc/pam.d/common-session

#
# /etc/pam.d/common-session - session-related modules common to all services
#
...
# # and here are more per-package modules (the "Additional" block)
session required    pam_unix.so
session optional    pam_systemd.so
# end of pam-auth-update config

これにより、ユーザーがコマンドライン経由でローカルまたはSSH経由でシステムに接続するときに2FAを要求するようにUbuntuに指示されますが、 `+ sudo +`リクエストなどの後続の認証試行中には指示されません。

これで、Ubuntuが正常に設定され、ログイン中、またはシステムで実行されるすべての認証済みアクションのいずれかで2FAのプロンプトが表示されます。 これで、構成をテストし、Ubuntuインストールにログインするときに2FAのプロンプトが表示されることを確認する準備ができました。

ステップ4-2FAのテスト

前のステップで、30秒ごとにコードを生成するように2FAを構成しました。 このステップでは、Ubuntu環境にログインして2FAをテストします。

まず、ログアウトしてからUbuntu環境に再度ログインします。

ssh @

パスワードベースの認証を使用している場合、ユーザーパスワードの入力を求められます:

OutputPassword:

パスワードを入力すると、2FA確認コードの入力を求められます。

OutputVerification code:

確認コードを入力すると、ログインできます:

ログインでのみ2FAが有効になっている場合、セッションが期限切れになるか、手動でログアウトするまで、2FAコードの入力を再度求められることはありません。

`+ common-auth +`ファイルを使用して2FAを有効にした場合、ログインおよびsudo特権の要求ごとに2FAを要求されます。

[email protected]: ~# sudo -s

sudo password for :



[email protected]:

この手順では、2FA構成が期待どおりに機能していることを確認しました。 このフェーズで確認コードの入力を求められなかった場合は、チュートリアルのステップ3に戻り、正しいUbuntu認証ファイルを編集したことを確認してください。

ステップ5-2FAロックアウトの防止

電話を紛失したり、ワイプした場合は、2FA対応アカウントへのアクセスを回復するための適切なバックアップ方法を用意することが重要です。 2FAを初めて設定するとき、ロックアウトから確実に回復できるようにするためのいくつかのオプションがあります。

  • 秘密の構成コードのバックアップコピーを安全な場所に保存します。 これは手動で行うことができますが、Authyのような一部の認証アプリはバックアップコード機能を提供します。

  • 2FA対応環境の外部からアクセスできる安全な場所に回復コードを保存します。

何らかの理由でバックアップオプションにアクセスできない場合は、追加の手順を実行して、2FA対応のローカル環境またはリモートサーバーへのアクセスを回復できます。

手順6-ローカル環境での2FAロックアウトからの回復(オプション)

マシンに物理的にアクセスできる場合は、レスキューモードで起動して2FAを無効にできます。 Rescueモードは、管理タスクを実行するために使用されるLinuxの_target_タイプ(https://en.wikipedia.org/wiki/Runlevel[runlevel]に類似)です。 レスキューモードに入るには、Ubuntuのデフォルトのブートローダーである_GRUB_の設定を編集する必要があります。

GRUBにアクセスするには、最初にマシンを再起動します。

reboot

GRUBメニューが表示されたら、* Ubuntu *エントリが強調表示されていることを確認します。 これは18.04インストールのデフォルト名ですが、インストール後に手動で変更した場合は異なる場合があります。

image:https://assets.digitalocean.com/articles/CART-64052/grub_menu.png [Ubuntu 18.04のデフォルトのGRUBメニュー]

次に、システムを起動する前に、キーボードの「+ e +」キーを押してGRUB設定を編集します。

image:https://assets.digitalocean.com/articles/CART-64052/grub_edit.png [編集モードのGRUB設定ファイル]

表示されるファイルで、「+ linux 」で始まり「 $ vt_handoff 」で終わる行が表示されるまでスクロールダウンします。 この行の最後に移動して、「 systemd.unit = rescue.target 」を追加し、「 $ vt_handoff 」と「 systemd.unit = rescue.target +」の間にスペースを入れてください。 これにより、Ubuntuマシンがレスキューモードで起動するようになります。

image:https://assets.digitalocean.com/articles/CART-64052/grub_rescue.png [メンテナンスモードを有効にするためのGRUB設定ファイルの編集]

変更を行ったら、「+ Ctrl + X 」キーボードの組み合わせでファイルを保存します。 マシンが再起動し、コマンドラインに表示されます。 「 Enter」を押してレスキューモードに入ります。

image:https://assets.digitalocean.com/articles/CART-64052/rescue_mode.png [Ubuntu 18.04のコマンドラインメンテナンスモードプロンプト]

レスキューモードになったら、Google Authenticator構成ファイルを開きます。 これは、ロックアウトされたユーザーのホームディレクトリ内にあります。

nano /home//.google-authenticator

このファイルの最初の行はユーザーの秘密キーで、認証アプリの構成に使用されます。

これで2つの選択肢があります。

  • 秘密鍵をコピーして、認証アプリを構成できます。

  • クリーンな状態から始めたい場合は、 `+〜/ .google-authenticator`ファイルを完全に削除して、このユーザーの2FAを無効にすることができます。 非rootユーザーとして再度ログインした後、2FAをもう一度構成して、新しい秘密鍵を取得できます。

どちらの選択でも、GRUBブートローダーを使用して、ローカル環境での2FAロックアウトから回復できます。 次のステップでは、リモート環境での2FAロックアウトから回復します。

手順7-リモート環境での2FAロックアウトからの回復(オプション)

非ルートsudoerアカウントがリモートマシンでロックアウトされている場合、* root *ユーザーを使用して2FAを一時的に無効にするか、2FAを再構成できます。

  • root *ユーザーでマシンにログインすることから始めます。

ログインしたら、ロックアウトされたユーザーのホームディレクトリ内にあるGoogle認証システム設定ファイルを開きます。

sudo nano /home//.google_authenticator

このファイルの最初の行は、ユーザーの秘密キーです。これは、認証アプリを構成するために必要なものです。

これで2つの選択肢があります。

  • 新しいデバイスまたはワイプされたデバイスをセットアップする場合は、秘密キーを使用して認証アプリを再構成できます。

  • クリーンな状態から開始したい場合は、このユーザーの2FAを無効にするために `+ / home //。google_authenticator`ファイルを完全に削除できます。 非rootユーザーとしてログインした後、2FAをもう一度構成して、新しい秘密鍵を取得できます。

どちらの選択でも、* root *ユーザーを使用して、ローカル環境での2FAロックアウトから回復できました。

結論

このチュートリアルでは、Ubuntu 18.04マシンで2FAを構成しました。 環境で2FAを構成すると、アカウントに保護層が追加され、システムのセキュリティが強化されます。 従来の認証方法に加えて、ログインするために追加の確認コードも入力する必要があります。 これにより、ログイン資格情報を取得できた攻撃者は、この追加の確認コードなしでアカウントにログインできなくなります。