二段階認証でLinuxサーバへログインする方法
ネットバンキングやGmailなど、二段階認証可能なサービスが増えています。二段階認証を入れることで、セキュリティを強固にすることができ、アカウントの乗っ取り等の対策が可能になります。
二段階認証では、二つの要素で認証を行います。たとえばGmailでは、「ID/パスワード」と「ショートメールでのコード」で認証することが可能です。(明示的に二段階認証を行うための設定が必要です)
Linuxサーバについても二段階認証の設定が可能なので、設定方法をまとめてみました。
Contents
前提
- 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の場合、「認証に失敗しました、再試行してください」とエラーメッセージがでます。
気にせず、チャレンジレスポンス認証を使ってログインをすると、無事にサーバへログインできると思います。
ちなみに、認証順は制御できないので、公開鍵認証を後に実行しても大丈夫なようです。
上手く接続できない場合
rootログインをしようとしている場合は、PermitRootLogin without-passwordを無効化しておきます。パスワード認証を禁止する設定ですが、二段階認証のパスワードも禁止されてしまうため無効化する必要があります。
vi /etc/ssh/sshd_config # PermitRootLogin without-passwordを入れている場合は除外 #PermitRootLogin without-password
それでもうまく、動作しない場合はsecureログ等を確認しつつ試してみましょう。
二段階認証 公開鍵+GoogleAuthenticator
一歩発展させて、Google Authenticatorで認証させてみます。
前提として、epelリポジトリが利用できる状況が必要です。
設定方法
Google Authenticatorを使うと、AndroidやiOS上のアプリで認証コードを確認することが可能になります。
まずは、必要なライブラリをインストールします。その後、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
この記事へのコメントはこちら