GNU/Linux >> Linux の 問題 >  >> Ubuntu

UbuntuサーバーでSSH2要素認証(2FA)を設定する

このチュートリアルでは、有名なGoogle認証システムを使用してUbuntuサーバーでSSH2要素認証を設定する方法を説明します。 UbuntuサーバーでのSSHサービスのセキュリティが大幅に向上します。

2要素認証の仕組み

通常、Ubuntuサーバーにリモートでログインするには、パスワードを入力するか、SSHキーを使用するだけです。二要素認証(2FA)では、ログインするために2つの情報を入力する必要があります。そのため、SSHサーバーにログインするには、時間ベースのワンタイムパスワードも入力する必要があります。このワンタイムパスワードは、IETF標準であるTOTPアルゴリズムを使用して計算されます。最近では、多くのWebサイトやサービス(Facebook、Google、Twitterなど)がユーザーにアカウントを保護するための2FAを提供しています。また、SSHサーバーで2FAを有効にすることをお勧めします。

このチュートリアルでは、設定方法を説明します

  • 2FAによるパスワード認証
  • 2FAによる公開鍵認証

:この記事で使用するオープンソースサーバーソフトウェアは、libpam-google-authenticatorと呼ばれます。 、デフォルトのUbuntuリポジトリからインストールされます。 Googleは、いかなる形や形式の認証プロセスにも関与していません。サーバーソフトウェアとモバイルアプリはネットワークアクセスを必要としません。

ステップ1:UbuntuサーバーにGoogle認証システムをインストールして構成する

Ubuntuサーバーにログインし、次のコマンドを実行して、デフォルトのUbuntuパッケージリポジトリからGoogle認証システムをインストールします。

sudo apt install -y libpam-google-authenticator

次に、google-authenticatorを実行します ホームディレクトリに新しい秘密鍵を作成するコマンド。

google-authenticator

「認証トークンを時間ベースにしますか?」と尋ねられたとき yと答えてください 。

次に、携帯電話のTOTPアプリを使用してスキャンできるQRコードが表示されます。私がお勧めする2つのアプリがあります:

  • Google認証システム 最もよく知られているTOTPモバイルアプリです。携帯電話のGooglePlayまたはAppleAppStoreからインストールできます。
  • Google認証システム モバイルアプリはオープンソースではありません。 Googleを信頼できない場合は、RedHatが開発したオープンソースのTOTPモバイルアプリであるFreeOTPを使用できます。

携帯電話でGoogle認証システムまたはFreeOTPを使用してQRコードをスキャンします。 QRコード全体をスキャンするには、ターミナルウィンドウを拡大する必要があることに注意してください。

QRコードは秘密鍵を表します。秘密鍵は、SSHサーバーとTOTPモバイルアプリでのみ認識されます。 QRコードをスキャンすると、携帯電話に6桁のワンタイムパスワードが表示されます。デフォルトでは、30秒ごとに変更されます。 SSH経由でUbuntuサーバーにログインするには、後でこのワンタイムパスワードを入力する必要があります。

ターミナルウィンドウには、秘密鍵、確認コード、緊急スクラッチコードが表示されます。この情報は、後で使用できるように安全な場所に保存することをお勧めします。

次に、 yと入力できます 残りのすべての質問に答えます。これにより、Google Authenticator構成ファイルが更新され、同じ認証トークンの複数の使用が無効になり、時間枠が長くなり、ブルートフォースログインの試行から保護するためのレート制限が有効になります。

ステップ2:Google認証システムを使用するようにSSHデーモンを構成する

  • 2FAによるパスワード認証
  • 2FAによる公開鍵認証

2FAによるパスワード認証

SSHキーを使用しない場合は、以下の手順に従ってください。

SSHサーバー構成ファイルを開きます。

sudo nano /etc/ssh/sshd_config

ファイル内で次の2つのパラメータを見つけ、両方がはいに設定されていることを確認します 。

UsePAM yes

ChallengeResponseAuthentication yes

PAM プラグ可能な認証モジュールの略です。 Linuxシステムにさまざまな認証方法をプラグインする簡単な方法を提供します。 SSHでGoogle認証システムを有効にするには、PAMとチャレンジレスポンス認証を有効にする必要があります。

rootユーザーに2FAの使用を許可する場合は、PermitRootLoginを見つけます。 パラメータを設定し、その値をyesに設定します 。 PermitRootLogin noにすることはできません またはPermitRootLogin prohibit-password

PermitRootLogin yes

ファイルを保存して閉じます。次に、SSHデーモンのPAMルールファイルを編集します。

sudo nano /etc/pam.d/sshd

このファイルの先頭に、ChallengeResponseAuthenticationのときにパスワード認証を有効にする次の行が表示されます。 yesに設定されています 。

@include common-auth

SSHで2FAを有効にするには、次の2行を追加します。

# two-factor authentication via Google Authenticator
auth   required   pam_google_authenticator.so

ファイルを保存して閉じます。次に、SSHデーモンを再起動して、変更を有効にします。

sudo systemctl restart ssh

今後、SSHデーモンでは、ユーザーパスワードと確認コード(Google認証システムによって生成されるワンタイムパスワード)を入力する必要があります。次のスクリーンショットは、CentOSボックスからUbuntu20.04サーバーへのSSHログインセッションを示しています。

2FAによる公開鍵認証

SSHキーを使用してSSHサーバーにログインする場合は、以下の手順に従ってください。

SSHサーバー構成ファイルを開きます。

sudo nano /etc/ssh/sshd_config

ファイル内で次の2つのパラメータを見つけ、両方がはいに設定されていることを確認します 。

UsePAM yes

ChallengeResponseAuthentication yes

PAM プラグ可能な認証モジュールの略です。 Linuxシステムにさまざまな認証方法をプラグインする簡単な方法を提供します。 SSHでGoogle認証システムを有効にするには、PAMとチャレンジレスポンス認証を有効にする必要があります。

rootユーザーに2FAの使用を許可する場合は、PermitRootLoginを見つけます。 パラメータを設定し、その値をyesに設定します 。 PermitRootLogin noにすることはできません またはPermitRootLogin prohibit-password

PermitRootLogin yes

次に、このファイルの最後に次の行を追加します。これは、SSHデーモンに、ユーザーが公開鍵認証とチャレンジ/レスポンス認証の両方に合格する必要があることを通知します。

AuthenticationMethods publickey,keyboard-interactive

ファイルを保存して閉じます。次に、SSHデーモンのPAMルールファイルを編集します。

sudo nano /etc/pam.d/sshd

このファイルの先頭に、ChallengeResponseAuthenticationのときにパスワード認証を有効にする次の行が表示されます。 yesに設定されています 。パスワードの代わりにSSHキーを使用するため、この行をコメントアウトする必要があります。

@include common-auth

SSHで2FAを有効にするには、次の2行を追加します。

# two-factor authentication via Google Authenticator
auth   required   pam_google_authenticator.so

ファイルを保存して閉じます。次に、SSHデーモンを再起動して、変更を有効にします。

sudo systemctl restart ssh

今後は、SSHキーとGoogle認証システムの確認コードを使用してログインする必要があります。

メモ

  • Ubuntuサーバーの各ユーザーはgoogle-authenticatorを実行する必要があります 二要素認証を使用するには、コマンドを実行してQRコードをスキャンします。ユーザーが設定せずにログインしようとすると、「権限が拒否されました(キーボードインタラクティブ)」というエラーメッセージが表示されます。 」が表示されます。
  • 緊急スクラッチコードはバックアップコードです。電話を紛失した場合は、ワンタイムパスワードの代わりに、5つの緊急スクラッチコードのいずれかを入力して、2段階の検証を完了することができます。これらのコードは1回限りの使用です。
  • 秘密鍵を変更する場合は、サーバーにログインしてgoogle-authenticatorを実行するだけです。 もう一度コマンドを実行して、~/.google_authenticatorを更新します ファイル。
  • ワンタイムパスワードは共有秘密鍵と現在の時刻を使用して計算されるため、以前は4分のタイムスキューを許可していましたが、UbuntuサーバーでNTP時刻同期を有効にして、正確な時刻を維持することをお勧めしますUbuntuサーバーとモバイルアプリの間。 UbuntuサーバーとTOTPモバイルアプリは異なるタイムゾーンを使用できます。

SSH2要素認証を無効にする方法

SSHデーモンのPAMルールファイルを編集します。

sudo nano /etc/pam.d/sshd

次の行をコメントアウトします。

auth   required   pam_google_authenticator.so

ファイルを保存して閉じます。 /etc/ssh/sshd_configに次の行を追加した場合 ファイル、

AuthenticationMethods publickey,keyboard-interactive

keyboard-interactiveを削除します 認証方法。

AuthenticationMethods publickey

ファイルを保存して閉じます。次に、SSHデーモンを再起動します。

sudo systemctl restart ssh

Ubuntu
  1. Ubuntu16.04で2要素認証を使用してSSHを保護する

  2. Ubuntu20.04でSSHの多要素認証を設定する

  3. Google認証システムを使用して2要素認証を設定する

  1. Ubuntu18.04でSSHキーを生成する方法

  2. Ubuntu20.04SSHサーバー

  3. Ubuntu20.04にsftpサーバーをインストールしてセットアップする方法

  1. SSHサーバーUbuntu22.04をインストールします

  2. Ubuntu18.04でSSHキーを設定する方法

  3. Ubuntu18.04でOpenVPNサーバーをセットアップする方法