web-dev-qa-db-ja.com

パブリックキー(パスワードなし)+ Ubuntu 14.04.1で動作するGoogleオーセンティケーターでSSHを取得しようとしています

Ubuntu 14.04.1を使用しています(OpenSSH 6.6およびlibpam-google-authenticator 20130529-2)。

公開鍵が(パスワードなしで)認証され、ユーザーがGoogleの認証システムからのコードの入力を求められるSSHログインを設定しようとしています。

これらの手順に従う/適応すると、パスワードプロンプトとGoogle認証プロンプトが表示されます。

パッケージをインストールし、/etc/ssh/sshd_configおよび/etc/pam.d/sshファイルを編集しました

/etc/ssh/sshd_config

ChallengeResponseAuthentication yes
AuthenticationMethods  publickey,keyboard-interactive
UsePAM yes

/etc/pam.d/sshの下部:

auth required pam_google_authenticator.so nullok # (I want to give everyone a chance to set up their 2FA before removing "nullok")

PAMは注文に依存することは知っていますが、sshd_configも同じですか?

何が悪いのですか?任意の助けいただければ幸いです。

21
JT.

それをうまく機能させました、最初に行いました:

apt-get install libpam-google-authenticator

/etc/pam.d/sshd以下の行を変更/追加しました(上部):

# @include common-auth
auth required pam_google_authenticator.so

そして/etc/ssh/sshd_config

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

正常に動作し、公開鍵による認証後に「確認コード」プロンプトが表示されます。 PAMからパスワード認証方法を効果的に削除したので、password + token OR key + tokenを使用した認証をどのように許可するかわかりません。

Ubuntu 14.04.1 LTS(GNU/Linux 3.8.0-19-generic x86_64)とssh -vを使用:OpenSSH_6.6.1p1 Ubuntu-2ubuntu2、OpenSSL 1.0.1f 2014年1月6日

28
Linus Kendall

auth [success=done new_authtok_reqd=done default=die] pam_google_authenticator.so nullok/etc/pam.d/sshdの上部に配置することで、これを最終的に機能させることができました。

pam.d manページ によると:

  • success=doneは、Google認証システムがサインオフした場合、それ以上の認証は実行されないことを意味し、追加のパスワードプロンプトはありません。
  • default=dieは、Google認証システムがログイン試行を拒否した場合、認証がすぐに失敗し、パスワードプロンプトがスキップされることを意味します。

したがって、[success=done new_authtok_reqd=done default=die]は、sufficientrequisiteの両方の制御値の組み合わせのようなものです。成功した場合はすぐに終了し(十分な場合)、失敗した場合も、すぐに終了します(必須)。

Pam_google_authenticator.soのnullok引数は、ユーザーの~/.google_authenticatorファイルが見つからない場合、公開鍵認証が通常どおり続行されることを意味することに注意してください。これは、2FAを使用してアカウントのサブセットのみをロックダウンする場合に役立ちます。

7
bluegate010

Linus Kendallの回答は古いシステムで機能するはずですが、新しいLinuxマシンでは問題があります。私のArch LinuxベースのWebサーバーでは、sshキーを受け取った後、設定によってpamがオーセンティケーターコードとパスワードを要求します(つまり、3つすべてが必要です)。

この問題を防ぎ、すべてのシステムで機能するより簡単な解決策は、/etc/pam.d/sshdのエントリを次のように変更することです。

auth sufficient pam_google_authenticator.so

そして、Linusが言及した ``/etc/ssh/sshd`に同じ編集を行うには:

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

サーバーが公開鍵を受け入れた後、認証トークンを要求するはずです。パスワードは要求されません。

余談ですが、sftpユーザーアカウントが必要な場合は、おそらくそれを機能させるためにgoogleオーセンティケーターをバイパスする必要があります。ここでは、sftp jailを使用して安全にそれを行う方法の提案を示します。 etc/ssh/sshd_config

Subsystem sftp internal-sftp
Match User ftp-user
  PasswordAuthentication yes
  AuthenticationMethods password
  ChrootDirectory /path/to/ftp/dir
  ForceCommand internal-sftp

/ path/to/ftp/dir rootへのアクセス許可を書き込み専用にする必要があります(例:chown root:root /path/to/ftp/dirchmod 755 /path/to/ftp/dir。そのディレクトリより上のすべての親にも安全なアクセス許可が必要です。通常、私が行う方法これは、chrootディレクトリを/home/shared/userにして、そこにディレクトリ(「data」など)を作成し、共有したいディレクトリを次のようにマウントします:Sudo mount -o bind /path/to/ftp/dir /home/shared/user/data

これらの手順をすべて実行すると、sshユーザー用の公開鍵+ googleオーセンティケーターログイン、およびデータ転送用の機能的なパスワードで保護されたsftpアカウントが作成されます。

6
Mike Dacre