Google Authenticator 身份验证

  • A+
所属分类:自动化工具

什么是双因子认证

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

说白了,就像我们几年前去银行办卡送的口令牌,以及网易游戏中的将军令,在你使用网银或登陆游戏时会再让你输入动态口令的。

产品分类

市面上有基于硬件的,也有基于软件的产品,具体可以另搜啊,本人喜欢开源的东东,并找到了Google开源的二次认证系统Google Authenticator
OpenSource,可以利用智能手机生产30秒动态口令配合登陆linux系统,该验证器提供了一个六位数的一次性密码。目前ios 和Android
都有客户端供于下载。

目的

1.实现登陆linux 服务器时,先输入动态口令,认证成功后,在下一步输入用户密码。如果口令失败,不会进行下一步的本地密码认证。

2.部署完成后,即使服务器不能上网,或者手机客户端不能上网,整个二步验证系统还是可以正常运行的。

部署

安装开发者工具,主要后续需要编译,这有gcc等编译器,以及需要用到的库

yum groupinstall "Development Tools" -y

安装pam 开发包

yum install pam-devel -y

NTP同步阿里云时间服务器

[root@Jenkins3 bin]# crontab -e
#ntpdate by liuyalei
00 */1 * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1

Git hub 下载源码

cd /root/tools
git clone https://github.com/google/google-authenticator-libpam.git

编译安装

cd google-authenticator-libpam
./bootstrap.sh
./configure
echo $?
make && make install

配置系统PAM模块,修改sshd支持谷歌的认证,要求所有用户先使用谷歌验证SSH认证。在sshd 文件的第一行,内容如下:

vim /etc/pam.d/sshd
auth required pam_google_authenticator.so no_increment_hotp

注意:这里插一条错误记录,xshell新开窗口,用测试用户连接报错。

tailf /var/log/secure
Nov 3 11:33:40 py sshd[38649]: Address 192.168.1.250 maps to localhost, but 
this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
Nov 3 11:33:40 py sshd[38649]: PAM unable to 
dlopen(/usr/lib64/security/pam_google_authenticator.so): 
/usr/lib64/security/pam_google_authenticator.so: cannot open shared object file: 
No such file or directory
Nov 3 11:33:40 py sshd[38649]: PAM adding faulty module: 
/usr/lib64/security/pam_google_authenticator.so
Nov 3 11:33:45 py sshd[38649]: Failed password for rd from 192.168.1.250 port 
10129 ssh2
Nov 3 11:33:46 py sshd[38649]: error: Received disconnect from 192.168.1.250: 
0: [preauth]

修改方法:创建软链接即可,必须创建,或者直接复制过去也可。

ln -s /usr/local/lib/security/pam_google_authenticator.so 
/usr/lib64/security/pam_google_authenticator.so

重启sshd 服务

systemctl restart sshd

安装二维码生成工具。这步也可以省略,如果不装的话,因为下一步生成的二维码就会成一个链接,到时将链接复制到你的浏览器中,也是可以出现二维码的,到时利用智能手机打开google
author 进行扫描,或者不使用二维码,因为部分安卓手机没有google play服务。

wget -c http://fukuchi.org/works/qrencode/qrencode-3.4.4.tar.gz
tar zxvf qrencode-3.4.4.tar.gz
cd qrencode-3.4.4
yum install libpng libpng-devel
./configure
make && make install

Linux系统登陆用户生成密钥

运行google-authenticator 命令,它将会在当前登陆用户的家目录中生成一个新的密钥(),同理 work用户也要执行以下操作

su - rd
[rd@py ~]$ google-authenticator

上述共需回答5个y

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

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

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

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

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

家目录会保存刚刚生成的信息

[root@py google-authenticator-libpam]# vim /home/rd/.google_authenticator
2KELM2L7S4PUYBSLC5FT5DG7CU
" RATE_LIMIT 3 30
" WINDOW_SIZE 17
" DISALLOW_REUSE
" TOTP_AUTH
76950340
10034232
61455354
50805889
88511253

Google Play 下载 google Authenticator,可以通过扫描二维码添加,但是国内安卓手机都是阉割版,没有google
play。直接使用verification code的方式,添加刚刚生成的2KELM2L7S4PUYBSLC5FT5DG7CU密钥串。

xshell需要修改登陆方式:属性--连接--用户身份验证--选择keyboard
interactive,首次输入Google动态密码,然后输入用户的静态密码。

优化:解决内网主机跳过二次认证(生产环境安全要求高,可以不做)

编辑pam.d下的sshd 文件,在第一行增加内容,主要是指定允许的主机信息文件,如下所示:

[root@test ~]# more -2 /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

然后在/etc/security/目录下创建access-localhost.conf文件,并添加内容如下:

[root@test ~]# cat /etc/security/access-localhost.conf
# skipped local network for google auth...
+ : ALL : 192.168.1.0/24
+ : ALL : LOCAL
- : ALL : ALL

重启sshd 服务

systemctl restart sshd

测试,内网主机登陆便直接使用密钥登陆了。

YaLei

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: