JT.*_*JT. 23 ubuntu ssh two-factor google-authenticator
我使用的是 Ubuntu 14.04.1(使用 OpenSSH 6.6 和 libpam-google-authenticator 20130529-2)。
我正在尝试设置 SSH 登录,其中公钥进行身份验证(没有密码),并提示用户输入来自 Google 身份验证器的代码。
遵循/调整这些说明后,我收到了密码提示和 Google 身份验证提示:
我已经安装了软件包,编辑了我的/etc/ssh/sshd_config和/etc/pam.d/ssh文件
在/etc/ssh/sshd_config:
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
UsePAM yes
Run Code Online (Sandbox Code Playgroud)
并在底部/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")
Run Code Online (Sandbox Code Playgroud)
我知道 PAM 是顺序相关的,但sshd_config也是?
我究竟做错了什么?任何帮助,将不胜感激。
小智 30
让它运行良好,首先做了:
apt-get install libpam-google-authenticator
Run Code Online (Sandbox Code Playgroud)
在/etc/pam.d/sshd我更改/添加了以下几行(在顶部):
# @include common-auth
auth required pam_google_authenticator.so
Run Code Online (Sandbox Code Playgroud)
并在/etc/ssh/sshd_config:
ChallengeResponseAuthentication yes
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive
PasswordAuthentication no
Run Code Online (Sandbox Code Playgroud)
运行良好,我现在在使用公钥进行身份验证后收到“验证码”提示。我不确定如何允许使用密码+令牌或密钥+令牌进行身份验证,因为我现在已经有效地从 PAM 中删除了密码身份验证方法。
使用带有 ssh -v 的 Ubuntu 14.04.1 LTS(GNU/Linux 3.8.0-19-generic x86_64):OpenSSH_6.6.1p1 Ubuntu-2ubuntu2,OpenSSL 1.0.1f 2014 年 1 月 6 日
Linus Kendall 的答案应该适用于较旧的系统,但在较新的 Linux 机器上它是有问题的;在我的基于 arch linux 的网络服务器上,该配置导致 pam 在收到我的 ssh 密钥(即我需要所有 3 个密钥)后要求我提供身份验证器代码和密码。
防止此问题并且应该适用于每个系统的更简单的解决方案是将条目更改/etc/pam.d/sshd为:
auth sufficient pam_google_authenticator.so
Run Code Online (Sandbox Code Playgroud)
然后对 Linus 提到的“/etc/ssh/sshd”进行相同的编辑:
ChallengeResponseAuthentication yes
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive
PasswordAuthentication no
Run Code Online (Sandbox Code Playgroud)
在服务器接受您的公钥后,这应该会要求您提供身份验证器令牌。它不应该询问您的密码。
附带说明一下,如果您希望拥有一个 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
Run Code Online (Sandbox Code Playgroud)
您需要将 /path/to/ftp/dir root 上的权限设为只写(例如chown root:root /path/to/ftp/dir,chmod 755 /path/to/ftp/dir该目录上方的所有父目录也需要安全权限。我通常这样做的方法是通过/home/shared/user创建chroot 目录,创建一个目录(例如“数据”),然后安装我想像这样共享的任何目录:sudo mount -o bind /path/to/ftp/dir /home/shared/user/data
如果您按照所有这些步骤进行操作,您的 ssh 用户将拥有公钥 + google 身份验证器登录名,以及一个用于数据传输的受密码保护的功能性 sftp 帐户。
我终于能够通过放置auth [success=done new_authtok_reqd=done default=die] pam_google_authenticator.so nullok在/etc/pam.d/sshd.
根据pam.d 手册页:
success=done 意味着如果 Google Authenticator 注销,将不再执行身份验证,这意味着没有额外的密码提示。default=die 意味着如果谷歌身份验证器拒绝登录尝试,身份验证将立即失败,跳过密码提示。所以[success=done new_authtok_reqd=done default=die]是排序之间的混合sufficient和requisite控制值,因为我们要的行为从两个:如果成功,立即终止(足够的),如果失败,也立即(必需的)终止。
请注意,nullokpam_google_authenticator.so的参数意味着如果~/.google_authenticator找不到用户的文件,则公钥身份验证将照常进行。如果我只想使用 2FA 锁定我帐户的一个子集,这很有用。
| 归档时间: |
|
| 查看次数: |
27526 次 |
| 最近记录: |