pam_oath

提供: ArchWiki
ナビゲーションに移動 検索に移動

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 ユーザー でファイルを作成して、ユーザーのシードを記述してください:

ヒント: 1 つの端末で root ユーザー権限を使用してセッションにログインし、別の端末で PAM 設定を変更します。この方法では、PAM 設定に問題がある場合でも、ログインして修正するためのアカウントが残っているため、リモート接続する場合に特に便利です。
/etc/users.oath
# Option User Prefix Seed
HOTP/T30/6 user - 12345678909876543210
警告: T を 60 より大きく設定しないでください。エラーが発生します:(OATH_UNKNOWN_USER: Cannot find information about user)

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
ヒント: ローカルログインの場合は、/etc/pam.d/login を編集してください。

OATH パスワードを使用したログイン

TOTP でログインする場合:

$ oathtool -v --totp -d 6 12345678909876543210
警告: TOTP モード設定時のエラー SHA512 は開発者が修正していません。Gitlab の open issue を参照してください。

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 パスを表示するのが一番簡単です。

ノート: ユーザーの秘密鍵は、このシステムで最も重要な情報です。OTP を提供するように携帯電話をセットアップすると、その携帯電話はそのキーを持つようになります。png ファイル内の qr コードには、そのキーが含まれています。このファイルには細心の注意を払う必要があります。暗号化された媒体にのみ保存する必要があります(あなたの携帯電話は、まともなレベルのセキュリティのために暗号化を使用する必要があります)。そうでない場合は、サードパーティ製アプリケーションからのアクセスを防ぐため、Samsung Knox のようなサンドボックス内に閉じ込めることもできません。

参照