AlmaLinux 9 - SSH 認証に Google Authenticator を使って二要素認証を設定する

個人開発で使っているサーバーの SSH 認証に公開鍵認証 + Google Authenticator で二要素認証を導入してみました。導入自体は簡単だったのですが、SELinux 関連で悩むところがあったので、備忘録としてまとめておきます。

使用環境

  • AlmaLinux 9.5
  • SELinux: Enforcing

Google Authenticator セットアップ

google-authenticatorqrencode をインストールします。qrencodegoogle-authenticator で QR コードを表示させる時に使います。

sudo dnf install -y google-authenticator qrencode

google-authenticator は対話形式のセットアップを提供しているので、それを使用します。このセットアップの中で Google Authenticator のアプリと連携するので、スマートフォンを準備してください。

google-authenticator

初期設定完了後、~/.google_authenticator が作成されていれば成功です。

SELinux が有効な場合

SELinux が有効な場合、ホームディレクトリはデフォルトで user_home_t のコンテキストが設定されています。そのため、sshd はこのファイルにアクセスできず、二要素認証が機能しません。そこで、sshd がアクセス権限を持つ ~/.ssh/ にファイルを移動します。

mv ~/.google_authenticator ~/.ssh/.google_authenticator

この操作に伴い .google_authenticator の保存場所が変わったので、後の手順で新たな保存場所を設定します。

sshd 設定変更

sshd に設定を追加して、チャレンジレスポンス認証を有効化します。

sudo vi /etc/ssh/sshd_config.d/00-custom.conf
/etc/ssh/sshd_config.d/00-custom.conf

PAM に設定を追加して、google-authenticator を有効化します。pam_google_authenticator.so の secret オプションに .google_authenticator の新たな保存先を設定して保存します。

sudo vi /etc/pam.d/sshd
/etc/pam.d/sshd

最後に sshd を再起動して設定を変更します。

sudo systemctl restart sshd

動作確認

サーバーに SSH 接続して動作確認します。この時、サーバーに接続しているターミナルはそのまま残して、別のターミナルで SSH 接続できることをテストしてください。万が一設定にミスがあった場合、サーバーに接続できなくなります。

SSH 接続時に以下が表示されますので、Google Authenticator のワンタイムパスワードを入力してログインしてください。問題なければ、サーバーに接続できるはずです。

({username}@{ip-address}) Verification code:

ワンタイムパスワード入力前後にパスワード認証が求められる場合

追加のパスワード認証が求められる場合、PAM でパスワード認証(password-auth)が有効になっている可能性があります。この場合、パスワード認証についての設定をコメントアウトして無効化します。

/etc/pam.d/sshd

SSH 接続の度にワンタイムパスワードの入力が求められるので手間は増えますが、セキュリティを強化するためには必要なステップですね。今後もより安全な運用方法を考えていきたいと思います。

コメント