本文已参与 新人创作礼 活动,一起开启掘金创作之路
什么是多因子?
多因子其实就是在用户名密码的基础上再增加一层验证,就好比银行APP,除了用户名密码之外还可能需要手机验证码或者人脸识别才能最终登录成功。今天分享的多因子认证登录服务器是在ssh登录服务器时不仅需要用户名密码,还需要一个手机上的动态码,同时验证通过后才能成功登录,以此来增加服务器的安全性。Google Authenticator双因素认证是一种采用时间同步技术的系统,采用了基于时间、事件和密钥三变量而产生的一次性密码来代替传统的静态密码。每个动态密码卡都有一个唯一的密钥,该密钥同时存放在服务器端,每次认证时动态密码卡与服务器分别根据同样的密钥,同样的随机参数(时间、事件)和同样的算法计算了认证的动态密码,从而确保密码的一致性,从而实现了用户的认证。因每次认证时的随机参数不同,所以每次产生的动态密码也不同。由于每次计算时参数的随机性保证了每次密码的不可预测性,从而在最基本的密码认证这一环节保证了系统的安全性。
采用Google Authenticator进行开启双因素身份认证过程(以CentOS7为例):
1、同步系统时间(很重要),最好安装chrony进行同步
# ntpdate ntp1.aliyun.com
2、安装相关依赖
# yum install -y git automake libtool pam-devel
3、编译安装google-authenticator
如果没法拿下来的可以访问我的百度盘分享链接:
提取码:eswb
# git clone https://github.com/google/google-authenticator-libpam.git
# cd google-authenticator-libpam/
# ./bootstrap.sh
# ./configure
# make && make install
# cp /usr/local/lib/security/pam_google_authenticator.so /lib64/security/
4、配置ssh
#vi /etc/pam.d/sshd
增加:auth required pam_google_authenticator.so no_increment_hotp noskewadj
参数说明: no_increment_hotp #确保计数器不会因失败尝试而递增 noskewadj #不自动调整时间偏差 nullok #如果用户尚未设置OTP,则允许用户在没有OTP的情况下登录 echo_verification_code #默认情况下,PAM模块在用户输入验证码时不会回显验证码。
# vi /etc/ssh/sshd_config
修改:
ChallengeResponseAuthentication yes #启用其它认证
UsePAM yes #启用UsePAM模块
PasswordAuthentication yes #允许密码认证
改完重启sshd服务:
# systemctl restart sshd
5、手机端安装Google Authenticator
苹果手机可以直接在app store中搜索并安装
安卓手机可以自行百度或者使用身份宝来代替,如果是Google Authenticator可能需要FQ,这里我已经把它上传到百度云了,有需要的可以自行取用:
链接:pan.baidu.com/s/1nU90NGye…
提取码:39vw
6、运行google-authenticator 命令生成一个新的密钥,哪个账号需要动态验证码,请切换到该账号下操作。可以在不同用户下执行这个命令以生成各自的二次验证码,一个账户只能有一个手机验证
# google-authenticator
Do you want authentication tokens to be time-based (y/n) y #是否想做一个基于时间的令牌,这里选择 y
#此处为二维码,使用手机端Google Authenticator进行扫描,因为不能截图只能拍照的形式展现给大家
Your new secret key is: V43LQ5NXUVHNIR6COEVS7YQBAY #如果在手机的谷歌身份验证器上不想通过"扫描条形码"的方式添加,就输入这个key,通过"手动输入验证码的方式"。账号就是服务器主机名。
Enter code from app (-1 to skip): 243476 #此处填写手机生成的数字验证码,填完记得点"添加账号"
Your emergency scratch codes are:
53874265
91259575
31654896
29974004
67702334
#以上5个代码是紧急代码,务必牢记,这是在你的动态口令无法使用的情况下使用的,记住,用一个失效一个。后期可以登录上去后,重新生成!
Do you want me to update your "/root/.google_authenticator" file (y/n) y
#是否更新你的google认证文件,第一次设置,一定要选择 y
Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n) y
#是否禁止口令多用,为防止中间人欺骗。这里选择 y
By default, tokens are good for 30 seconds. In order to compensate for
possible time-skew between the client and the server, we allow an extra
token before and after the current time. If you experience problems
with poor time synchronization, you can increase the window from its default
size of +-1min (window size of 3) to about +-4min (window size of
17 acceptable tokens).Do you want to do so? (y/n) y
#默认情况,1个口令的有效期是30s,这里是为了防止主机时间和口令客户端时间不一致,设置的误差,根据具体需求,可以选择y,也可选n。
If the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting (y/n) y
#是否打开尝试次数限制,默认情况,30s内不得超过3次登录测试,防止别人暴力破解。这里选择 y
7、此时使用SSH登录工具进行登录,除了账号密码外还需要手机上的动态码才能进行登录
注意:验证码会30秒变更一次,右边的小圆是倒计时
上面是通过windows的终端登录的,下面再分享下加了多因子认证之后如何使用xshell登录(其他的工具比如SecureCRT或者MobaXterm大家自行摸索哈)
点击确定之后成功登录:
好了今天就分享到这里,如果觉得还不错的小伙伴记得点赞关注加收藏哦,哈哈~~
本人一直在从事devops运维相关工作,欢迎大家关注我的个人公众[运维小白成长之路],会不定期更新运维相关经验分享,希望能和大家一起成长~~