pam_oath
OATH Toolkit はワンタイムパスコード (OTP) を使用する2段階認証を実現します。RFC 標準になっている2つの OTP 手法に対応 (HOTP, TOTP)。OTP を生成するアプリケーションは iOS, Android, Blackberry などの端末で使うことができます。Google Authenticator と同じように認証メカニズムは Linux の PAM システムと統合されています。このページではインストールと設定について説明します。
インストール
oath-toolkit パッケージをインストールしてください。
oath の設定
oath のシードは16進数の数字で、ユーザーごとに一意である必要があります。新しいシードを生成するには、以下のコマンドラインを使用します:
$ openssl rand -hex 10
12345678909876543210
oath はユーザーごとに必要で、設定ファイル /etc/users.oath
の中にリンクします。Root ユーザー でファイルを作成して、ユーザーのシードを記述してください:
/etc/users.oath
# Option User Prefix Seed HOTP/T30/6 user - 12345678909876543210
HOTP が必要な場合は、次の設定を使用します。
/etc/users.oath
# Option User Prefix Seed HOTP user - 12345678909876543210
ファイルに root ユーザーのみがアクセスできることを確認します。
# chmod 600 /etc/users.oath # chown root /etc/users.oath
PAM の設定
特定のサービスだけで oath を有効にするには、例えば ssh なら /etc/pam.d/sshd
ファイルを編集してファイルの先頭に以下の行を追加します:
auth sufficient pam_oath.so usersfile=/etc/users.oath window=30 digits=6
これで正しい oath コードを入力したときに認証が通るようになります。認証を必須にして pam スタックの処理を止めるようにしたい場合は以下のように設定します:
auth required pam_oath.so usersfile=/etc/users.oath window=30 digits=6
SSH ログインが機能するためには、ファイル /etc/ssh/sshd_config
でこれらのオプションが有効になっていることを確認します:
ChallengeResponseAuthentication yes UsePAM yes
sshd.service
を再起動して、変更を有効にします。
公開鍵認証やパスワード認証が有効な場合でも、OATH のリクエスト・レスポンスを強制したい場合は、 /etc/ssh/sshd_config
に以下を追加します:
AuthenticationMethods publickey,keyboard-interactive:pam KbdInteractiveAuthentication yes PasswordAuthentication yes
OATH パスワードを使用したログイン
TOTP でログインする場合:
$ oathtool -v --totp -d 6 12345678909876543210
HOTPでログインする場合:
$ oathtool -v -d 6 12345678909876543210
上記の 12345678909876543210 は適当なシードに置き換えてください。以下のような表示がされます:
Hex secret: 1ab4321412aebc Base32 secret: DK2DEFASV26A==== Digits: 6 Window size: 0 Start counter: 0x0 (0) 820170
最後の数字は実際にログインに使用することができます。また、Base32 secret は qr コードを生成するのに必要な文字列です。qr コードを生成するには qrencode パッケージをインストールして次のコマンドを実行:
qrencode -o user.png 'otpauth://totp/user@machine?secret=DK2DEFASV26A===='
user, machine, DK2DEFASV26A==== は適当な文字列に置き換えてください。生成が完了したら、お好きな画像作成アプリケーションで qrcode を視覚化して使用することができます。FreeOTP を使用して png のスクリーンショットを撮影し、必要になったときに OTP パスを表示するのが一番簡単です。