こちらを参考に2段階認証(2FA)を試してみた。とりあえずお手軽な TOTP (Time-based One-Time Password)。スマホに専用アプリをインストールして、表示される6桁の数字を ID と PW とともに入力することで管理画面にログインできるようにする。指紋等の生体認証(WebAuthn)はまだ敷居が高そう。
これまでは、ブラウザで PVE,PBS 管理画面にアクセスするため、PC(Ubuntu,Windows)の hosts ファイルに IP 、domain、host を追記していた。
これを、名前解決はプロバイダの DNS におまかせして hosts ファイルへの追記をやめようと考えたのがきっかけ。いや、何か問題があるわけじゃない。全く単なる興味本位。
そうすると https://pve.example.com:8006/ や https://pbs.example.com:8007/ でアクセスするということは、必然的に WAN 側から PVE,PBS の各サーバーにアクセスできることになり、さすがに ID と Password だけで管理画面にアクセスできる状態はよろしく無いから、2段階認証を取り入れることにした。
はじめに
外部からのアクセスを、(Buffalo 製の Wi-Fi ルーターの場合)ルーターの IP フィルターとポート変換で制御すれば、リバースプロキシを経由せずともクライアント PC から各サーバーに到達できる。
これでも何ら問題ないけど、せっかく各サーバーまで SSL 通信できるようになったことだし、https 標準の port 443 で接続(8006 等の指定なし)できるようリバースプロキシに設定を追記した。こちらの記事の設定で、pve.example.com 用に port 8006 への転送を追記するだけ(pbs.example.com も同じく)。
あと、もし何かしらの理由で管理画面にアクセスできなくなると困るから、ssh でログインできることを確認しておくこと。最悪の場合はサーバーの前に移動してローカルでログインすれば何とかなるけど。
自分の環境だと外部からの ssh 接続は許可していない(Wi-Fi ルーターの port は開けていない)。当たり前だけど2段階認証はあくまでも管理画面ログイン用だから、ID,Password ログイン無効の公開鍵認証方式で無い限り、外部から ssh 接続ができる状態では 2FA の意味がない。
Proxmox Backup Server の設定
管理画面にログインして、左サイドメニューの「設定」の「Access Control」から、「Two Factor Authentication」をクリックする。
続いて「追加」ボタンをクリックして表示されるリストから「TOTP」を選択すると、こちらのような QR コードが表示される。
これを、スマホにインストールした FreeOTP などのアプリで読み込んで、表示されるコードを Verify Code に入力して「追加」をクリックすれば2段階認証の設定完了。
次回からはログイン画面から ID と Password を入力したあと、続いてコードの入力ダイアログが表示されるから、スマホで表示されるコードを入力すればログイン完了。全てのユーザーに同じ操作を実行しておくこと。
2段階認証の設定は以上だけど、このままだと PVE のストレージに?マークが表示されてバックアップできなくなる。
理由は、これまでの ID,Password だけのユーザー認証ではストレージ(PBS)に接続できないから。
慌てずに、PBS の管理画面でユーザーに紐付いた「API Token」を追加して、普通のユーザーと同じようにアクセス権限を設定すること。もともとアクセス権限の存在している user@pbs の設定は削除せずそのままで。
それから PVE の管理画面で、?マークが表示されているストレージを一度削除(データは消えないので大丈夫)してから、改めてストレージを追加する。
このとき、ユーザー名は user@pbs!token のような、PBS で追加した API Token を、パスワードは API Token の追加時に一度だけ表示されるキーを入力すること。
最後に、各バックアップの owner を新しい user@pbs!token に変更する。これを忘れるとバックアップができなかった。方法は、下の画像の各 VM/CT の Actions 列の人アイコンをクリックして、表示されたダイアログから追加した user@pbs!token を選択する。
もしくは、PBS に ssh でログインして、vm100 の場合は /mnt/datastore/store1/vm/100/ にあるファイル owner をエディタで書き換えても OK。
あと、2段階認証をやめたいときは管理画面から設定を削除できるけど、もし管理画面へログインできない状態になったら、ssh でログインして /etc/proxmox-backup/tfa.json の中身を {}(中括弧の開くと閉じる) にすると 2FA の設定が全て消える。tfa.json と tfa.json.lock の各ファイル削除しても同様。
Proxmox VE の設定
手順は PBS とほぼ同じ。
管理画面の左サイドメニューの「アクセス権限」の「ユーザー」か��、2段階認証を設定するユーザーを選択して「TFA」をクリック、表示されるQR コードをスマホアプリで読み取って、コードを入力すれば設定完了。
いきなり root で試すのも危険なので、まずは適当なユーザーを追加して動作を確認してみれば安心。管理画面から一度ログアウトしてから、追加したユーザーでログインを試すことができる。
問題なければ root も同じように 2FA を追加する。
PVE も ssh でログインできる状態なら、最悪、管理画面へのログインができなくなっても、ファイル /etc/pve/user.cfg を直接編集して 2FA の設定を削除できる。
具体的には対象ユーザーの行(下は root の場合)の後ろにある x!oath を削除する。
user:root@pam:1:0:::hoge@pve.example.com::x!oath:
その他
OTP のスマホアプリは色々あるけど、FreeOTP がシンプルでよさげ。
スマホを機種変更したときに token の引き継ぎができるかどうか判らないけど、自分の環境だと登録すべきユーザー数が限られているから、最初からやり直してもいいか。
コメント