最初の5分:キーを認識させる
パスワードは脆弱な単一障害点です。認証情報が漏洩したり、巧妙なフィッシングサイトに騙されたりすれば、サーバーは実質的に無防備になります。YubiKey 5CやSecurity Key NFCのようなハードウェアセキュリティキーは、TPM 2.0による自動アンロックと同様に、リモートの攻撃者が決して突破できない物理レイヤーを追加します。複雑な設定ファイルをいじる前に、まずはLinuxカーネルがデバイスを正しく認識しているか確認しましょう。
1. USB接続の確認
YubiKeyを空いているポートに差し込みます。lsusbユーティリティを使用して、ハードウェアが正しく登録されているか確認します:
lsusb | grep -i yubico
“Yubico.com” または “YubiKey” を含む行が表示されるはずです。何も表示されない場合は、電力供給のないUSBハブではなく、マザーボードのポートに直接接続してみてください。USBGuardによるLinuxの要塞化を行っている環境ではデバイスの許可が必要な場合もありますが、これらのキーは低電圧の接続では動作が不安定になることもあります。
2. 必要なミドルウェアのインストール
現代のLinuxディストリビューションでは、ハードウェア信号を認証トークンに変換するための特定のライブラリが必要です. Ubuntu 22.04または24.04の場合は、以下のパッケージをインストールしてください:
sudo apt update
sudo apt install libpam-u2f pamu2fcfg fido2-tools -y
Fedoraユーザーは、dnf install pam-u2f fido2-tools で同様の機能を利用できます。これらのツールは、物理的なタッチ操作とオペレーティングシステムのログインプロンプトを繋ぐ役割を果たします。
FIDO2ハードウェアキーによるSSHの強化
標準的なSSHキーは、単にディスク上のファイルに過ぎません。悪意のある者がローカルマシンへのシェルを取得した場合、~/.ssh/id_rsa を持ち出し、永久にあなたになりすますことができてしまいます。ハードウェアベースのキーは、Teleportによるアクセス制御の集約と同様に、秘密鍵がYubiKeyのセキュアエレメントから決して出ることがないため、この状況を一変させます。たとえ犯人が id_ed25519_sk ファイルを盗んだとしても、物理デバイスがそのマシンに接続されていなければ、それは無用の長物です。
1. ハードウェアベースのキーを生成する
OpenSSH 8.2で ed25519-sk のサポートが導入されました。この形式は、従来のRSAタイプよりも高速で安全です。以下のコマンドを実行してキーを作成します:
ssh-keygen -t ed25519-sk -O resident -O verify-required -C "workstation-key-2024"
各フラグの意味を解説します:
-O resident: YubiKey内に「キーハンドル」を保存します。これにより、USBドライブを持ち歩かなくても、どのコンピュータにキーを差し込んでもSSHアイデンティティを再構築できます。-O verify-required: 認証を試行する前に、YubiKeyが必ずPINの入力を求めるように強制します。
YubiKeyが点滅し始めます。金色の接点部分をタップして、人間が操作していることを証明してください。この物理的なインタラクションにより、マルウェアがバックグラウンドで勝手にキーを使用することを防ぎます。
2. サーバーへのキーのデプロイ
キーを移動する前に、初期サーバーセットアップ用に toolcraft.app/ja/tools/security/password-generator で32文字のランダムな文字列を生成しておくことをお勧めします。ハードウェアキーの設定が完了したら、セキュリティを最大化するためにパスワードログインを完全に無効化できます。
公開鍵をリモートVPSまたはサーバーに送信します:
ssh-copy-id -i ~/.ssh/id_ed25519_sk.pub [email protected]
これで、ログインを試みるたびにプロンプトが表示されるようになります。ターミナルは、あなたが物理的にキーに触れるまで待機します。タッチしなければ、アクセスは許可されません。
ローカルセキュリティ:Sudoにキーを要求する
SSHの保護は不可欠ですが、ローカルの権限昇格も大きなリスクです。sudo コマンドを実行するたびにYubiKeyのタップを要求するようにLinuxを設定できます。これはLinux Sudoersの堅牢化においても有効で、万が一パスワードが記録されてしまっても、不正なスクリプトがルート権限を取得するのを阻止できます。
1. キーをアカウントにマッピングする
まず、専用の設定ディレクトリを作成し、デバイスを登録します:
mkdir -p ~/.config/Yubico
pamu2fcfg > ~/.config/Yubico/u2f_keys
キーが点滅するので、しっかりとタップしてください。バックアップ用のキーがある場合(絶対に用意すべきです)、-n フラグを使用して同じファイルに追記します:
pamu2fcfg -n >> ~/.config/Yubico/u2f_keys
2. PAMスタックの編集
Pluggable Authentication Module (PAM) に対して、U2Fトークンを確認するように指示する必要があります。sudoの設定を開きます:
sudo nano /etc/pam.d/sudo
@include common-auth の直後に以下の行を挿入します:
auth required pam_u2f.so
プロのヒント: sudo -i セッションを維持した別のターミナルウィンドウを開いたままにしておいてください。PAMファイルの記述を間違えると、管理者権限から締め出される可能性があります。アクティブなルートシェルがあれば、すぐに変更を元に戻すことができます。
長期運用のための習慣
ハードウェアキーの導入には、仕事の進め方を少し変える必要があります。インフラから締め出されないための3つの習慣を紹介します。
「2つは1つ、1つはゼロ」の原則
ハードウェアキーは小さく、紛失しやすいものです。唯一のキーを紛失し、パスワードを無効にしていた場合、非常に厄介なことになります。キーは常にペアで購入しましょう。GitHub、ローカルマシン、サーバーのすべてに両方のキーを登録してください。バックアップは自宅の金庫など、安全で耐火性のある場所に保管してください。
レジデントキーによるポータビリティ
デスクトップとノートPCを行き来する場合、ssh-add -K が非常に便利です。これは接続されているYubiKeyからレジデントキーを探し、ローカルのSSHエージェントに読み込みます。もはや、安全でない方法でデバイス間で ~/.ssh フォルダを同期する必要はありません。
PIN保護の強制
物理キー単体では2要素(所持とタッチ)です。PINを追加することで3要素になります。YubiKey Managerを使用してFIDO2 PINを設定しましょう。これにより、万が一物理キーが盗まれても、シークレットコードがなければ使用できなくなります。
ykman fido access change-pin
ハードウェアベースの認証へのアップグレードは、最も効果的なセキュリティ対策です。初期設定には15分ほどかかりますが、Lynisによる要塞化の自動化などと組み合わせて運用することで、リモート攻撃に対する保護は絶対的なものになります。パスワード漏洩の心配から解放され、コードを書くことに集中できるようになります。

