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
も同じですか?
何が悪いのですか?任意の助けいただければ幸いです。
それをうまく機能させました、最初に行いました:
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日
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]
は、sufficient
とrequisite
の両方の制御値の組み合わせのようなものです。成功した場合はすぐに終了し(十分な場合)、失敗した場合も、すぐに終了します(必須)。
Pam_google_authenticator.soのnullok
引数は、ユーザーの~/.google_authenticator
ファイルが見つからない場合、公開鍵認証が通常どおり続行されることを意味することに注意してください。これは、2FAを使用してアカウントのサブセットのみをロックダウンする場合に役立ちます。
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/dir
、chmod 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アカウントが作成されます。