GoogleAuthenticator+SSH双因子(2FA)认证登陆CentOS7系统

等级保护三级中对主机的身份鉴别有一个控制项明确要求: 应采用两种或两种以上组合的鉴别技术对管理用户进行身份鉴别。

我们正常登陆操作系统都是通过账户和口令的方式,这个控制项则要求用两种或两种以上组合的鉴别技术对管理用户进行身份鉴别。在Linux系统中,Google authenticator是个不错的组件,结合手机就可以实现Linux操作系统的双因子认证功能。

一、配置时间同步

确保 ntpd 已安装并正常运行运行

yum install -y ntpdate
1 3 * * * /usr/sbin/ntpdate pool.ntp.org > /dev/null 2>&1   #在计划任务中增加

ntpdate是用来自动同步时间的程序

二、yum安装Google authenticator

yum安装与源码安装二选一。

1、安装EPEL yum源

yum -y install epel-release

或使用

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

2、安装Google-authenticator

(1)、查看yum源是否有google-authenticator 组件

yum list google-auth*

images

(2)、安装google-authenticator 组件

yum -y install google-authenticator

images

三、源码安装Google authenticator

yum安装与源码安装二选一。

1、下载源码包

wget https://github.com/google/google-authenticator-libpam/archive/1.04.tar.gz

2、解压并进入目录

tar zxvf 1.04.tar.gz
cd google-authenticator-libpam-1.04/

3、编译安装

./bootstrap.sh && ./configure && make && make install

4、复制google 身份验证器pam模块到系统下

cp /usr/local/lib/security/pam_google_authenticator.so /lib64/security/

四、配置ssh

1、编辑 /etc/pam.d/sshd

将原来首行 auth required pam_sepermit.so 注释掉,重新插入下面内容

auth required pam_google_authenticator.so

images

2、编辑 /etc/ssh/sshd_config

找到“#ChallengeResponseAuthentication yes ”,改成:ChallengeResponseAuthentication yes

并把ChallengeResponseAuthentication no 前面加上“# ”:

images

3、重启sshd服务

systemctl restart sshd

五、启动google-authenticator

1、交互式配置方式

切换至想要使用 Google Authenticator 来做登录验证的账号,执行下面操作

google-authenticator

然后会出现下面一系列交互式的对话做对应的设置,并提示是否要输入app的动态码。

Do you want authentication tokens to be time-based (y/n) y
# 这里是个二维码
Your new secret key is: U2OWUAZGNCDMH3K6R53SQAB
Your verification code is 412153
Your emergency scratch codes are:
  55076776
  39195812
  30771185
  64601508
  27142905

这里会显示一个二维码,如果你的终端不支持显示二维码,可以手动输入后面的密钥(secret key)来代替扫描二维码,之后的操作会用到这个二维码/密钥(secret key)。这里还有一个认证码(verifiction code),暂时不知道有什么用,以及 5 个紧急救助码(emergency scratch code),紧急救助码就是当你无法获取认证码时(比如手机丢了),可以当做认证码来用,每用一个少一个,但其实可以手动添加的,建议如果 root 账户使用 Google Authenticator 的话一定要把紧急救助码另外保存一份。

Do you want me to update your "/home/test/.google_authenticator" file? (y/n) y

是否更新用户的 Google Authenticator 配置文件,选择 y 才能使上面操作对当前用户生效,其实就是在对应用户的 Home 目录下生成了一个 .google_authenticator 文件,如果你想停用这个用户的 Google Authenticator 验证,只需要删除这个用户 Home 目录下的 .google_authenticator 文件就可以了。

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) n

是否增加时间误差?这里选择 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

是否启用次数限制?这里选择 y,默认每 30 秒最多尝试登录 3 次。

2、参数式一键启动方式

上面交互式的设置也可用通过参数一次性设置(推荐)

google-authenticator -t -f -d -l test@example -i example -r 3 -R 30 -W

可以看到,通过参数还可以自定义 发行商 和 标签,执行 google-authenticator -h 来查看所有的参数设置

google-authenticator [<options>] -h, --help Print this message -c, --counter-based Set up counter-based (HOTP) verification -t, --time-based Set up time-based (TOTP) verification -d, --disallow-reuse Disallow reuse of previously used TOTP tokens -D, --allow-reuse Allow reuse of previously used TOTP tokens -f, --force Write file without first confirming with user -l, --label=<label>      Override the default label in "otpauth://" URL -i, --issuer=<issuer>    Override the default issuer in "otpauth://" URL -q, --quiet Quiet mode -Q, --qr-mode={NONE,ANSI,UTF8} -r, --rate-limit=N       Limit logins to N per every M seconds -R, --rate-time=M        Limit logins to N per every M seconds -u, --no-rate-limit Disable rate-limiting -s, --secret=<file>      Specify a non-standard file location -S, --step-size=S        Set interval between token refreshes -w, --window-size=W      Set window of concurrently valid codes -W, --minimal-window Disable window of concurrently valid codes 

六、设置 Google Authenticator 手机 App

手机类型 App 程序名称
IOS Google Authenticator
Android 谷歌动态口令(请在手机对应的应用商店里搜索下载)

安装完后,打开 Google Authenticator/谷歌动态口令 App,点击 开始设置,选择 扫描条形码 扫描上面 google-authenticator 命令生成的二维码,然后手机上就能看到对应的认证码了。

这里的认证码每 30 秒变化一次,认证码上面的 example.com对应的是 google-authenticator 参数 -i 设置的发行商,认证码下面的 test@example对应的是 google-authenticator 参数 -l 设置的标签,如果你没有通过 google-authenticator 的参数设置发行商和标签,默认会使用系统的 hostname 来作为发行商,标签则则使用用户名和 hostname 的组合,格式为 username@hostname,标签其实是后期可以通过手机App来修改的,而发行商则修改不了。

现在重新使用 SSH 登录服务器,就会要求输入密码和 Verification code 来验证身份。如果登陆时遇到问题,请查看日志文件 /var/log/secure。

七、配置xshell连接

1、新建连接配置完成ip地址与端口

images

2、点击左上角 用户方法验证 –> 方法 选择 Keyboard Interactive。

images

3、点击下方确认即可。

 

© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏
分享
评论 抢沙发