3段階認証?


9

Ubuntuを使用しています。

libpam-google-authenticator(電話で生成されたコードを使用してログインできます)と証明書認証が連携して動作するように設定できるかどうか、そして可能であれば、どうすればいいのかと思っていますそれを設定します。したがって、私のアカウントにログインするには、私のパスワード、私の電話(およびそのパスコード)、そして私の証明書/秘密鍵とそのパスワードが必要です。

私は両方とも独立して動作するようになりましたが、それらを一緒に動作させることはできませんでした。どういうわけかそれは可能だと確信しています。

ありがとう。


通常、あなたは重複した要因によって多くを得ることはありません。証明書とコードジェネレーターは、「持っているもの」の要素に適合します。パスワードは「知っているもの」に適合します。他の一般的な要因は、「あなたが何か」(バイオメトリクス)です。
Zoredache 2013

回答:


8

PAMモジュールを一緒にチェーンすることでこれを行うことができます。しかし、詳細に入る前に:

PAMを誤って設定すると、システムにログインできなくなる可能性があります。

ありがたいことに、シングルユーザーモードでいつでも起動して問題を修正できますが、PAMは必要以上に混乱させたいものではないことを警告してください。

とにかく、これの背後にある考え方は、スタッキングPAMモジュールを利用してpam-google-authenticatorpam_unix(これがパスワードをチェックする)と証明書モジュールがすべてアクセスを許可する必要があることを確認することです。デフォルトでは、PAMは認証モジュールがユーザーを認証できるように構成されており、他のモジュールはスキップされます。

/etc/pam.d/common-authでは、上部に次のような行が表示されます。

auth    [success=2 default=ignore]  pam_unix.so nullok_secure try_first_pass

これはpam_unix.so、成功する必要があることをPAMに伝えます。次の2つのルール(通常は別の認証モジュールで、次にpam_deny.so)をスキップして、オプションのモジュールに進みます。ただし、モジュールに障害が発生した場合、そのモジュールは無視され、制御はチェーン内の次のモジュールに渡されます。これは、コントロールがオプションのブロックにスキップするか、PAMがpam_deny.soにヒットしてそこで失敗するまで、各認証モジュールを続けます。

これを活用してpam-google-authenticatorpam_unix.soおよび証明書PAMモジュールがすべてアクセスに成功する必要があります。使用しているGoogle認証モジュールまたは証明書モジュールの名前はわかりませんが、common-authファイルで見つけることができるはずです。したがって、このようなものを上に置くことによって:

auth    requisite   pam_unix.so nullok_secure
auth    requisite   pam_google_authenticator.so
auth    requisite   pam_certificate_auth.so
auth    [success=<n>]   pam_permit.so

<n>ここのpam_permit.soモジュールと次のモジュールの間のモジュール数に置き換えるpam_permit.so-つまり、これは最上位の認証モジュールの[success = n default = ignore]コード+ 1に設定する必要があります。この構文は少しファンキーです、ただし、上記のモジュールが成功した後は、authモジュールをスキップします。

もちろん、この3段階認証を自分のユーザーアカウントだけに制限する方法について疑問に思うかもしれません。これはpam_succeed_if.soモジュールで行うことができ、上記の3ステップの認証ブロックの上に挿入する必要があります。

auth    [success=ignore default=4]  pam_succeed_if.so user = <username>

どこに<username>あなたのユーザ名に置き換えられます。この行は単にpam_succeed_if.soが成功する(別名ユーザー名がその行のユーザー名と一致する)ことを示し、PAMは次のモジュール(3ステップの認証モジュール)に進みます。そうでない場合、PAMは実際のモジュール(このモジュールから4モジュール離れている)にジャンプする必要があります。

グループのメンバーシップや特定のユーザー名など、複数のものを一致させるには、複数の行を使用する必要があります。次に例を示します。

auth    [success=1 default=ignore]  pam_succeed_if.so user = <username>
auth    [success=ignore default=4]  pam_succeed_if.so user ingroup <group>

これを実行する前に、common-authファイルをバックアップし、シングルユーザーモードと、緊急時に古いファイルを復元する方法についても理解します。この構成は私によってテストされていませんが、動作するはずです。

これを初めてテストする場合は、1つまたは2つのルートシェルを開いて、そのままにしておきます。common-authをバックアップで簡単に置き換えることができるため、問題が発生した場合のフォールバックとして機能します。次に、これらの変更を行います。次に、を使用suしてユーザーアカウントにログインします。3段階の認証プロセスを実行する必要があります。

pam_succeed_if.soモジュールの完全なドキュメントはhttp://linux.die.net/man/8/pam_succeed_ifにあります。


正解です。これを2回以上賛成できれば、そうします。
アーロンミラー

ありがとう!けれども- -私は(sshd_configファイルでRSAAuthenticationとPubkeyAuthentication設定を使用して)の.ssh / authorized_keysにに私の公開鍵を追加しているとOTPコードのために私はpam_google_authenticator使用しているログイン証明書の場合google-authenticator.googlecode.com/hgを。それではどのように機能しますか?
Jesse W

@JesseWこれが機能するには、PAMと公開鍵を使用するようにSSHDを設定する必要があります。私は具体的にはわからないが、あなたは確かに設定する必要がありますChallengeResponseAuthenticationし、UsePAMその後、/etc/pam.d/sshdまたは/etc/pam.d/commonのいずれかに上記の私の答えで詳述ラインを設定し、「はい」に-auth、これをすべてのログインに対して実行するか、SSHに対してのみ実行するかによって異なります。「pam_certificate_auth.so」フィラー行を削除し、結果として[success = <n>行を変更することを忘れないでください。
Xenopathic 2013

2

私はこの投稿を読んで、それがクールに聞こえたと思いました-これが私が三要素認証を機能させる方法です 私はそれについてここにブログ投稿を書きました。

基本的に、私はPAMでGoogle認証システムとパスワードを設定してから、OpenSSHで公開鍵認証を設定し(これにより他の2つがバイパスされます)、最後にOpenSSHがPAMを介して認証することを最後に要求します(最後の行)

/ etc / ssh / sshd_confから

PubkeyAuthentication yes
ChallengeResponseAuthentication yes
PasswordAuthentication no
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive

1

/etc/pam.d/sshdの先頭に追加する必要があるのは、Pubkey + GoogleAuthのみです

#auth    requisite    pam_unix.so nullok_secure #if you want password, too :)
auth    requisite    pam_google_authenticator.so
auth    [success=2]  pam_permit.so

OpenSSH> = 6.2でsshd_configを編集していると思います

より偏執的なセキュリティのために、いくつかの追加の設定を追加します:D

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.