因此,我一直在学习使用pam_oath和FreeOTP电话应用程序为这两个因素配置SSH的CentOS 7计算机以进行2因子身份验证,并为这两个因素加上本地用户名/密码。我已经阅读了各种在线文章,并且似乎都遵循以下文章中列出的基本说明:
https://wiki.archlinux.org/index.php/Pam_oath
https://jonarcher.info/2015/07/hardening-ssh-with-otp-for-2-factor-authentication/
https://www.brianlane.com/post/setup-oath-ssh-login-on-fedora/
在我的主要CentOS计算机上执行此操作之前,我启动了VirtualBox VM进行测试,并进行了最低限度的CentOS 7安装。我按照说明进行操作,并提示输入“一次性密码(OATH)”凭据,但是我注意到我可以输入any小于等于6个字符的字母数字字符串,然后提示我输入我的本地用户名/密码。只要我正确输入本地密码,就可以授予外壳访问权限。
这里是最初的最小CentOS 7安装(CentOS Linux版本7.7.1908(核心))之后我遵循的步骤:
yum update && yum upgrade
yum install epel-release
yum install pam_oath oathtool gen-oath-safe
验证足够的pam_oath.so usersfile = / etc / liboath / users.oath窗口= 10位数= 6
因此,/ etc / pam.d / sshd的前几行以前看起来像这样:
#%PAM-1.0
auth required pam_sepermit.so
auth substack password-auth
auth include postlogin
# Used with polkit to reauthorize users in remote sessions
以及之后:
#%PAM-1.0
auth sufficient pam_oath.so usersfile=/etc/liboath/users.oath window=10 digits=6
auth required pam_sepermit.so
auth substack password-auth
auth include postlogin
gen-oath-safe jdoe hotp
通过QR码将密钥添加到手机上的FreeOTP应用程序中
将十六进制代码添加到/etc/liboath/users.oath:
HOTP jdoe-已删除
UsePAM yes
ChallengeResponseAuthentication yes
PasswordAuthentication yes
semanage fcontext -a -t systemd_passwd_var_run_t '/etc/liboath(/.*)?'
restorecon -rv /etc/liboath/
systemctl restart sshd
因此,当我通过SSH连接到该主机,并输入6个字符或更少的字符串时,我可以使用本地密码登录:
login as: jdoe
Keyboard-interactive authentication prompts from server:
One-time password (OATH) for `jdoe':
Password:
End of keyboard-interactive prompts from server
Last login: Sun Mar 22 18:03:08 2020 from 192.168.1.240
[jdoe@pkcentos7 ~]
如果我为OATH密码输入7个字符或更多的字符串,则会发生以下情况:
login as: jdoe
Keyboard-interactive authentication prompts from server:
One-time password (OATH) for `jdoe':
End of keyboard-interactive prompts from server
Access denied
Keyboard-interactive authentication prompts from server:
One-time password (OATH) for `jdoe':
End of keyboard-interactive prompts from server
Access denied
Keyboard-interactive authentication prompts from server:
One-time password (OATH) for `jdoe':
我浏览了Google搜索返回的其他各种文章,但没有清楚地看到缺少的步骤或设置。
在此方面的任何帮助将不胜感激。预先谢谢您,如果需要任何其他信息,请让我知道。
保罗
将pam模块的控制从sufficient
更改为[success=done new_authtok_reqd=done default=die]
我的pam行看起来像:
auth [success=done new_authtok_reqd=done default=die] pam_oath.so usersfile=/etc/users.oath
sshd_config:
PasswordAuthentication no
AuthenticationMethods publickey,keyboard-interactive:pam
UsePAM yes
ChallengeResponseAuthentication yes