SSHサービスはパスワードの総当たり攻撃を最も受けやすく、新しくサーバーを起動したばかりでも、数時間後にはログに不明なIPアドレスからの接続試行が記録されていることがあります。試行回数を減らすために、まずsshdの設定でポート番号を変更することをお勧めします。また、文字、記号、数字を含む強固なパスワードを設定しましょう。Linuxサーバーの場合、通常は一般ユーザー用のパスワードとroot用のパスワードの2つを覚えておく必要があります。複数のサーバーを管理している場合は、ホスト、ログイン、パスワードなどのセッション設定を保存するアプリケーションを使うのが一般的ですが、これらの情報があなたのワークステーションにアクセスできる第三者に漏れるリスクがあります。信頼できる対策を講じることが重要です。
二要素認証では、ログインとパスワードに加えて、時間とユニークなキーに基づいてコードを生成するスマートフォンアプリケーションを使用します。ログインとパスワードを入力した後に、Google Authenticatorアプリで確認コードを入力するよう求められます。
必要なパッケージのインストール
yum install pam pam-devel google-authenticator
モバイルアプリのインストール
- Android デバイス向けにダウンロード
- iOS デバイス向けにダウンロード
- Microsoft Storeからダウンロード
設定
デフォルトでは、ユーザーのログインをsshdの設定で無効にするのが望ましいです。新しいサーバーを設定する場合、まずユーザーを作成し、パスワードを設定して、そのユーザーでログインします。以下のコマンドを使用します。
adduser ユーザー名
passwd ユーザー名
su ユーザー名
二要素認証を設定するユーザーで次のコマンドを実行してください。
google-authenticator
最初のメッセージで「y」を押して./google_authenticatorファイルを更新しますかと尋ねられたら、「y」を押します。他のユーザーがコードを再使用できないように、繰り返し使用を禁止するかどうかのプロンプトで再度「y」を押します。他のオプションについても、すべて「y」を押すことでソフトウェアの効率が向上します。
秘密鍵とリカバリーコードを紙に書き留めてください。この情報はオフラインで保管することをお勧めします。たとえ第三者がこの情報を入手しても、ホスト、ログイン、パスワードを知らない限り、アクセスすることはできません。
次に、PAMの設定を行い、SSHサービスに二要素認証を適用します。これらの操作はrootユーザーで実行する必要があります。
vi /etc/pam.d/sshd
ファイルの最初に以下の行を追加して、設定を次のようにしてください。
#%PAM-1.0
auth required pam_unix.so no_warn try_first_pass
auth required pam_google_authenticator.so
他の行はそのまま残し、ファイルを保存します。その後、SSHサービスの設定に移りましょう。
vi /etc/ssh/sshd_config
「ChallengeResponseAuthentication no」という設定を見つけ、「no」を「yes」に変更します。変更を保存し、サービスを再起動してください。
service sshd restart
次に、スマートフォンのアプリを設定します。「手動でキーを入力する」オプションを見つけてタップし、先ほどメモした秘密鍵を入力して保存します。これで、パスワード入力後に表示されるVerification code欄に入力するコードが表示されます。
変更方法:
- 入力順序の変更:
デフォルトではログイン、パスワード、次に確認コードを入力するように設定していますが、まず確認コードを入力し、その後パスワードを入力したい場合は、ファイルの最初の行を削除し、以下のようにしてください。
#%PAM-1.0
auth required pam_google_authenticator.so
- rootログイン時の二要素認証
例えば、一般ユーザーでログインしてからsu
コマンドでrootに切り替える際に、rootのパスワードとアプリのコードを要求するように設定したい場合は、rootで./google_authenticator
コマンドを実行し、設定します。その後、以下のファイルを編集します。
vi /etc/pam.d/su
ファイルの先頭に以下の行を追加してください。
#%PAM-1.0
auth required pam_unix.so no_warn try_first_pass
auth required pam_google_authenticator.so
これで完了です。この設定では、サービスの再起動は不要です。rootに切り替える際には、アプリの認証コードが要求されます。
P.S. 設定が正しいか確認するために別のSSHセッションでテストを行うことをお勧めします。エラーがあった場合は、元に戻して修正することが可能です。