惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
酷 壳 – CoolShell
酷 壳 – CoolShell
WordPress大学
WordPress大学
小众软件
小众软件
博客园 - 司徒正美
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Jina AI
Jina AI
Hugging Face - Blog
Hugging Face - Blog
博客园 - Franky
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
量子位
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
雷峰网
雷峰网
云风的 BLOG
云风的 BLOG
M
MIT News - Artificial intelligence
F
Fortinet All Blogs
T
Tailwind CSS Blog
Martin Fowler
Martin Fowler
I
InfoQ
The GitHub Blog
The GitHub Blog
有赞技术团队
有赞技术团队
The Cloudflare Blog
罗磊的独立博客

lvbibir's Blog

shell | 磁盘空间分析脚本 Linux cat 和 tee 命令写入文件 python | 使用 uv 管理你的 python 环境 Claude Code 完整配置指南 windows | mihomo 内核独立部署指南 linux | 磁盘扩容 wsl | 释放长久运行占用的磁盘空间 mysql | 线程上限问题处理 suse 12sp5 升级 openssh 及 openssl suse 12sp5 部署 mysql 5.7 《谁的青春不迷茫》 docker | centos7 部署 docker vim | 基础配置和使用 windows | rime 输入法 & 雾凇方案 shell | sshpass 批量传输文件及执行命令 wsl | 原生 linux 方式安装 docker nodejs | fnm + pnpm 开发环境配置 wsl | 安装配置 miniconda 虚拟环境 wsl | 自动更新系统代理 wsl | bashrc 环境变量不正确加载的处理方法 wsl | win10 安装 wsl2 troubleshooting | ssh 成功但是 scp 失败 linux | 常用命令总结 docker 部署 piclist shell | 检测网站存活并自动钉钉告警 Zabbix | 监控端口连通性并自动追踪 TCP 路由 windows | 自定义开机快速启动项 windows | miniconda 配置 python 虚拟环境 Zabbix | 监控主机到指定 ip 的流量大小 shell | centos 初始化
麒麟 7.6 安装谷歌 OTP 认证模块
lvbibir · 2024-07-31 · via lvbibir's Blog
文章目录
  • 0 前言
  • 1 安装
    • 1.1 从 Github 上下载源码
    • 1.2 依赖安装 编译
    • 1.3 配置
    • 1.4 生成二次验证代码 以及如何启停

0 前言

做等保三级项目安全集成建设,测评的时候有个高危不符合项叫做多因子认证(等保里面高危是一票否决项所以必须整改)。这一项要求在登录堡垒机的时候做多因子认证(短信、手机令牌、Ukey 等),在登录堡垒机后每台服务器登录时仍要进行一次多因子认证。但是因为一些原因本来这个事应该由主机安全实现登录,主机安全版本不够升级(华为云企业主机安全)就只能想办法自己折腾。最后还是查到了使用谷歌认证模块,可以实现 OTP 认证,这里就不解释什么是 HOTP 和 TOTP 了有需求的可以自己查原理。

采用 TOTP 方式进行认证也比较蛋疼,在实际的运维开发环境中,并非只有一人需要登录服务器进行操作(不然我要堡垒机干嘛),但是为了使用 OTP 认证,需要每个人都在手机上保留每台服务器的密钥,这不方便管理也不能保证密钥的安全性,如果是三方厂商提供的运维支持就更要命了。

再提醒一下,如果部署了堡垒机,堡垒机可能不支持在登陆的时候使用多因子,此时的解决方案是使用堡垒机登录内网运维主机,从运维主机上再使用 Xshell 等远程连接工具登录其它 Linux 服务器,此时再使用 OTP 认证。

安装过程很简单(yum 等摇轮椅式部署就不说了,以源码方式举例),只需要从 Github 上下载源码,上传到服务器,安装依赖进行编译、安装,配置 PAM 认证模块以及 sshd 配置文件,生成密钥,保存备份密钥,重启 sshd 服务即可。

1 安装

下面分步骤记录安装情况

安装环境:中标麒麟 V7.6

1.1 从 Github 上下载源码

https://github.com/google/google-authenticator-libpam

将源码下载为.zip 或者以你喜欢的方式下载,README 文档写的很详细,除了是英文以外没啥毛病

1.2 依赖安装 编译

因为我的环境是内网,连不上互联网的 yum 仓库,内网 yum 源还因为一些原因要关停一段时间所以是完全不能指望,所有缺少的依赖都需要自己下载,为了节省时间我也都下载好了打包到一起,如果有需要可以下载(不保证以后更高版本能用)

链接:https://pan.quark.cn/s/09cc2553daa5

提取码:q4Qd

压缩包密码 Thewind-rises.github.io

tar -zxf google-authenticator-rpms.tar.gz
cd google-authenticator-rpms.tar.gz
rpm -Uvh *.rpm --nodeps --force

我个人在安装的过程中遇到以下两个软件包安装过稍早的版本,使用 –replacefiles 参数可以替代

rpm -ivh perl-libs-5.16.3-297.el7.x86_64.rpm --replacefiles
rpm -ivh perl-5.16.3-297.el7.x86_64.rpm --replacefiles

至此如果没有报错,那么依赖应该就准备好了

unzip google-authenticator-libpam-master.zip
cd google-authenticator-libpam-master
./bootstrap.sh
make
make install

如果编译过程出错需要重新编译那么就在源代码根目录执行以下命令,然后去源代码压缩包把里面的 Makefile.am 重新上传,排完错以后再重新编译

rm -rf autom4te.cache
rm -rf aclocal.m4
rm -rf config.*
rm -rf configure
rm -rf Makefile*

如果没有报错那么执行 google-authenticator 应该会回显版本号等信息,看到就说明安装成功了。

1.3 配置

配置主要针对两文件:/etc/pam.d/sshd/etc/ssh/sshd_config

/etc/pam.d/sshd

将以下内容放到第一行

auth required pam_google_authenticator.so nullok no_increment_hotp

其中 nullokno_increment_hotp 这两个可选参数能够在 Github 上的 README 文件中找到解释

nullok 表明目前多因子登录是一个可选项,适用于密钥还没分发到所有人的时候,如果确认所有授权者都拿到了密钥应当将此删除

no_increment_hotp 建议配置,此选项可以不把 OTP 认证失败记作 SSH 登陆失败,避免有笨比情况发生(比方说我测试认证的时候头铁,OTP 硬是过不去,去查日志才发现安装后少了一个软连接文件,可能是系统原因)锁定账户

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

/etc/ssh/sshd_config 保证有以下两个条目

PubkeyAuthentication yes
ChallengeResponseAuthentication yes

保存并关闭

至此配置完成,你的系统在 sshd 服务重启之后应该就能正确使用两步认证登录了。

1.4 生成二次验证代码 以及如何启停

出处 https://cloud.tencent.com/developer/article/1698883

使用下面命令运行 Google Authenticator 设置程序:

google-authenticator -t -f -d -w 3 -e 10 -r 3 -R 30

选项说明:

-t : 使用 TOTP 验证
-f : 将配置保存到 ~/.google_authenticator
-d : 不允许重复使用以前使用的令牌
-w 3 : 允许的令牌的窗口大小。 默认情况下,令牌每 30 秒过期一次。 窗口大小 3 允许在当前令牌之前和之后使用令牌进行身份验证以进行时钟偏移。
-e 10 : 生成 10 个紧急备用代码
-r 3 -R 30 : 限速,每 30 秒允许 3 次登录
更多帮助信息可以使用 --help 选项查看。

程序运行后,将会更新配置文件,并且显示下面信息:

二维码,您可以使用大多数身份验证器应用程序扫描此代码。

一个密钥,如果您无法扫描二维码,请在您的应用中输入此密钥。

此时程序会提示让你输入初始验证码来测试,输入你用各类验证器获取到的一次性密码即可

完成测试后会给出 10 个一次性使用紧急代码的列表,请妥善保存,如果有所有人都登录不上的情况指不定可以用这个救急,但是注意每一个使用过的验证码都会失效。

如果需要仅对特定用户使用两次验证,那就 su 到对应用户并进入其 home 目录,执行生成代码操作即可,生成完毕后会在 home 目录生成.google_authenticator 文件,里面保存了该账户的 OTP 密钥以及紧急代码。

不需要使用两步验证时,只要删除.google_authenticator 即可,同时建议更改 PAM 配置文件,注释我们添加的内容。

以上.