二段階認証でLinuxサーバへログインする方法

 

ネットバンキングやGmailなど、二段階認証可能なサービスが増えています。二段階認証を入れることで、セキュリティを強固にすることができ、アカウントの乗っ取り等の対策が可能になります。

二段階認証では、二つの要素で認証を行います。たとえばGmailでは、「ID/パスワード」と「ショートメールでのコード」で認証することが可能です。(明示的に二段階認証を行うための設定が必要です)

Linuxサーバについても二段階認証の設定が可能なので、設定方法をまとめてみました。

前提

  • OSはCentOS6
  • 公開鍵認証でログインできるユーザがいること
  • epelリポジトリがインストールされていること

※CentOS7でもほぼ一緒の方法で実装可能です。puttyや別のLinuxサーバのsshコマンドではログインできましたが、TeraTermやPoderosaなどのターミナルからログインできないようなのでご注意ください。

二段階認証 公開鍵+チャレンジレスポンス

公開鍵とチャレンジレスポンスの二段階認証の設定方法を紹介します。チャレンジレスポンスでは、Linuxユーザのパスワードで認証を行います。

設定方法

sshdの設定変更を行います。チャレンジレスポンス認証を有効にして、二段階認証の設定を追加します。

二段階認証の設定は、「RequiredAuthentications2」を利用します。CentOS7の場合は「AuthenticationMethods」へ置き換わっています。

vi /etc/ssh/sshd_config

# チャレンジレスポンス認証を有効
ChallengeResponseAuthentication yes

# 二段階認証を有効
# CentOS7の場合は、AuthenticationMethods publickey,keyboard-interactive
RequiredAuthentications2 publickey,keyboard-interactive

設定を変更したら、コンフィグの確認を実施します。正常な場合は何も出力されません。

sshd -t

sshdを再起動させて、設定を反映させます。

/etc/init.d/sshd restart

ターミナルの接続は維持したままログインの確認を行います。設定が間違っていると、二度とサーバへログインできなくなってしまうので、必ずセッションは維持したままにしておきましょう。

まず、公開鍵認証でログインを試みます。TeraTermの場合、「認証に失敗しました、再試行してください」とエラーメッセージがでます。

公開鍵認証でログイン

公開鍵認証でログイン

気にせず、チャレンジレスポンス認証を使ってログインをすると、無事にサーバへログインできると思います。

エラーは気にせずチャレンジレスポンスでログイン

エラーは気にせずチャレンジレスポンスでログイン

login3

ちなみに、認証順は制御できないので、公開鍵認証を後に実行しても大丈夫なようです。

上手く接続できない場合

rootログインをしようとしている場合は、PermitRootLogin without-passwordを無効化しておきます。パスワード認証を禁止する設定ですが、二段階認証のパスワードも禁止されてしまうため無効化する必要があります。

vi /etc/ssh/sshd_config
# PermitRootLogin without-passwordを入れている場合は除外
#PermitRootLogin without-password

それでもうまく、動作しない場合はsecureログ等を確認しつつ試してみましょう。

二段階認証 公開鍵+GoogleAuthenticator

一歩発展させて、Google Authenticatorで認証させてみます。

前提として、epelリポジトリが利用できる状況が必要です。

設定方法

Google Authenticatorを使うと、AndroidやiOS上のアプリで認証コードを確認することが可能になります。

google authenticatorのコード

google authenticatorのコード

まずは、必要なライブラリをインストールします。その後、epelリポジトリからGoogle Authenticatorのインストールを行います。

yum -y install git pam-devel automake libtool
yum -y install google-authenticator --enablerepo=epel

インストールが完了したら、設定したいユーザでログインを行います。そのユーザでgoogle-authenticatorコマンドを実行するとsecret keyが発行されます。

google-authenticator

https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/root@xxxxxxxxx%3Fsecret%3DXXXXXXXXXXXXXXX
Your new secret key is: XXXXXXXXXXXXXXX
 ・
 ・
 ・

secret keyをアプリに登録すると利用が可能になります。URLをクリックするとQRコードが表示されるので、QRコードを読み取ってもよいでしょう。

4つほど質問がありますが、全て「y」で問題ありません。

sshdをgoogle authenticatorと連携させるために、PAMの設定を行います。

vi /etc/pam.d/google-auth

#%PAM-1.0
#%PAM-1.0
auth        required      pam_env.so
auth        sufficient    pam_google_authenticator.so
auth        requisite     pam_succeed_if.so uid >= 500 quiet
auth        required      pam_deny.so
vi /etc/pam.d/sshd

# 追加
auth       substack     google-auth

# 削除
#auth       include      password-auth

反映が完了したらログインを試してみましょう。チャレンジレスポンス認証の入力に、アプリに表示されているコードを設定することでログインできると思います。

Topic

特定ユーザだけ公開鍵認証にしたい場合

特定のユーザだけ公開鍵認証にしたい場合は、Matchディレクティブを使います。

vi /etc/pam.d/sshd
Match User root
  PermitRootLogin without-password
  AuthenticationMethods publickey
  • このエントリーをはてなブックマークに追加
  • Pocket

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。