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