RHEL CentOS 8 SSH双因素认证

2020-06-09 11:55:24 浏览数 (1)

双因素认证

  双因素认证就是通过 用户已知信息(用户名和密码) 用户预先未知信息 二要素组合到一起实现双因素身份认证。双因素认证是一种采用时间同步技术的系统,采用了基于时间、事件和密钥三变量而产生的一次性密码来代替传统的静态密码。每个动态密码卡都有一个唯一的密钥,该密钥同时存放在服务器端,每次认证时动态密码卡与服务器分别根据同样的密钥,同样的随机参数(时间、事件)和同样的算法计算了认证的动态密码,从而确保密码的一致性,从而实现了用户的身份认证。

TOTP

Time-Based One-Time Password Algorithm,基于时间同步的一次性口令,动态口令。

TOTP认证步骤

  • ① 用户开启双因素认证后,服务器生成一个密钥。
  • ② 服务器提示用户扫描二维码,把密钥保存到用户的手机。也就是说,服务器和用户的手机,现在都有了同一把密钥。
  • ③ 用户登录时,手机客户端使用这个密钥和当前时间戳,生成一个哈希,有效期默认为30秒。用户在有效期内,把这个哈希提交给服务器。
  • ④ 服务器也使用密钥和当前时间戳,生成一个哈希,跟用户提交的哈希比对。只要两者不一致,就拒绝登录。

身份验证器 (本次使用Google Authenticator)

Google Authenticator

Microsoft Authenticator

TOTP Authenticator

阿里云身份宝

时间同步

在 CentOS 8 中,dnf install ntp 时提示没有ntp安装软件。

代码语言:javascript复制
#添加wlnmp的yum源
rpm -ivh http://mirrors.wlnmp.com/centos/wlnmp-release-centos.noarch.rpm
#安装时间同步软件
yum install wntp
#同步事件
ntpdate  192.168.99.107
#时间同步计划任务
crontab   -e
*/10 * * * * /usr/sbin/ntpdate 192.168.99.107; /sbin/hwclock -w 
#重启计划任务
systemctl   restart crond

google-authenticator

epel仓库

代码语言:javascript复制
dnf install  epel-release

google-authenticator

代码语言:javascript复制

dnf install google-authenticator

google-authenticator版本

代码语言:javascript复制
rpm -qa |grep google-authenticator
google-authenticator-1.07-1.el8.x86_64

二维码生成工具

不安装二维码生成工具,google-authenticator将无法生成二维码,但可以将生成的链接复制到浏览器中生成二维码。

代码语言:javascript复制
dnf  install qrencode

运行 google-authenticator

google-authenticator 参数介绍

  第1个:问你是否想做一个基于时间的令牌,先择y

  第2个:是否更新你的google认证文件,由于第一次设置,所以一定选y 

  第3个:是否禁止口令多用,这里选择y,禁止它,以防止中间人欺骗。

  第4个:默认情况,1个口令的有效期是30s,这里是为了防止主机时间和口令客户端时间不一致,设置的误差,可以选择y,也可选n,看要求严谨程度

  第5个:是否打开尝试次数限制,默认情况,30s内不得超过3次登陆测试,防止别人暴力破解。

注意:

参数设置将被存储在用户的〜/.google_authenticator文件中,emergency scratch codes 中的5个代码是紧急代码,务必牢记!在你的动态口令无法使用的情况下使用的,记住,用一个失效一个。后期可以登陆系统重新生成。

手机 Google Authenticator

手机上的Google Authenticator应用扫描二维码

PAM SSH

配置系统PAM 模块中 sshd 支持google_authenticator的认证

代码语言:javascript复制

vim /etc/pam.d/sshd
#在文件最底部添加如下行(先进行密码认证再进行google_authenticator的认证):
auth required pam_google_authenticator.so
-----------------------------------------------------------------------
#在文件第一行添加如下行(先进行google_authenticator认证再进行密码的认证):
auth required pam_google_authenticator.so no_increment_hotp

SSH 服务

代码语言:javascript复制
vim /etc/ssh/sshd_config 
PasswordAuthentication yes
ChallengeResponseAuthentication yes
UsePAM yes

重启ssh服务

代码语言:javascript复制
systemctl restart sshd

登陆验证

身份验证优化

局域网内特定网段访问主机不进行google-authenticator验证,其他网段访问需要进行google-authenticator验证。。。

PAM SSH配置

代码语言:javascript复制
#在文件顶部添加如下行:vim /etc/pam.d/sshd
auth [success=1 default=ignore] pam_access.so accessfile=/etc/security/access-localhost.conf
auth       required pam_google_authenticator.so no_increment_hotp

添加access-localhost.conf文件

代码语言:javascript复制
cat /etc/security/access-localhost.conf
  : ALL : 192.168.99.0/24
  : ALL : LOCAL
- : ALL : ALL

重启ssh服务

代码语言:javascript复制
systemctl restart sshd

登陆验证

0 人点赞