
個人開発で使っているサーバーの SSH 認証に公開鍵認証 + Google Authenticator で二要素認証を導入してみました。導入自体は簡単だったのですが、SELinux 関連で悩むところがあったので、備忘録としてまとめておきます。
使用環境
- AlmaLinux 9.5
- SELinux: Enforcing
Google Authenticator セットアップ
google-authenticator と qrencode をインストールします。qrencode は google-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
PAM に設定を追加して、google-authenticator を有効化します。pam_google_authenticator.so の secret オプションに .google_authenticator の新たな保存先を設定して保存します。
sudo vi /etc/pam.d/sshd
最後に sshd を再起動して設定を変更します。
sudo systemctl restart sshd
動作確認
サーバーに SSH 接続して動作確認します。この時、サーバーに接続しているターミナルはそのまま残して、別のターミナルで SSH 接続できることをテストしてください。万が一設定にミスがあった場合、サーバーに接続できなくなります。
SSH 接続時に以下が表示されますので、Google Authenticator のワンタイムパスワードを入力してログインしてください。問題なければ、サーバーに接続できるはずです。
({username}@{ip-address}) Verification code:
ワンタイムパスワード入力前後にパスワード認証が求められる場合
追加のパスワード認証が求められる場合、PAM でパスワード認証(password-auth)が有効になっている可能性があります。この場合、パスワード認証についての設定をコメントアウトして無効化します。
SSH 接続の度にワンタイムパスワードの入力が求められるので手間は増えますが、セキュリティを強化するためには必要なステップですね。今後もより安全な運用方法を考えていきたいと思います。
コメント
コメントを投稿