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

推荐订阅源

S
Schneier on Security
A
Arctic Wolf
S
Security Affairs
O
OpenAI News
SecWiki News
SecWiki News
TaoSecurity Blog
TaoSecurity Blog
H
Heimdal Security Blog
T
Threat Research - Cisco Blogs
Hacker News: Ask HN
Hacker News: Ask HN
N
News | PayPal Newsroom
Google Online Security Blog
Google Online Security Blog
C
Cisco Blogs
The Hacker News
The Hacker News
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
C
CXSECURITY Database RSS Feed - CXSecurity.com
P
Privacy International News Feed
V
Vulnerabilities – Threatpost
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
T
Tenable Blog
T
The Exploit Database - CXSecurity.com
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Spread Privacy
Spread Privacy
人人都是产品经理
人人都是产品经理
www.infosecurity-magazine.com
www.infosecurity-magazine.com
V2EX - 技术
V2EX - 技术
L
LINUX DO - 最新话题
The GitHub Blog
The GitHub Blog
博客园 - 三生石上(FineUI控件)
T
The Blog of Author Tim Ferriss
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
The Cloudflare Blog
N
News and Events Feed by Topic
量子位
Google DeepMind News
Google DeepMind News
Application and Cybersecurity Blog
Application and Cybersecurity Blog
L
LINUX DO - 热门话题
P
Palo Alto Networks Blog
Stack Overflow Blog
Stack Overflow Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Attack and Defense Labs
Attack and Defense Labs
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Hacker News - Newest:
Hacker News - Newest: "LLM"
Apple Machine Learning Research
Apple Machine Learning Research
The Register - Security
The Register - Security
Microsoft Security Blog
Microsoft Security Blog
Know Your Adversary
Know Your Adversary
Webroot Blog
Webroot 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 初始化 loki (二) 部署 loki (一) 简介 prometheus (六) Alertmanager prometheus (五) 记录规则与告警规则 prometheus (四) 黑盒监控 prometheus (三) 服务发现 prometheus (二) 静态配置 prometheus (一) 简介及部署 traefik (四) TraefikService 服务 traefik (三) Middleware 中间件 traefik (二) ingressRoute 路由 traefik (一) 简介、部署和配置 kubernetes | Gateway API 简介及部署 linux | dns 配置文件中 search 和 options ndots 详解 kubernetes | command args 和 dockerfile 中的 ENTRYPOINT CMD kubernetes | statefulset 控制器详解 docker | dockerfile 最佳实践 docker | dockerfile 指令详解 linux | kill 命令详解以及 linux 中的信号 troubleshooting | elasticsearch 安装插件报错 shell | if 条件判断 docker | 下载外网镜像的几种方式 python | 鬼谷子数学问题 steam挂刀教程 linux | history 命令的格式化输出 shell | 将本地镜像批量推送到 harbor windows | hosts 文件修复 kubernetes | configmap & secret kubernetes | RBAC 鉴权和 NetworkPolicy kubernetes | service & ingress kubernetes | 存储 kubernetes | 滚动升级和自动伸缩 kubernetes | 控制器 kubernetes | 日志 kubernetes | 调度 kubernetes | pod kubernetes | 杂记 linux | set 命令详解 ceph | openeuler 部署 ceph-v16 ceph | ceph-v16 离线安装解决方案 pxe 如何应对复杂的服务器硬件环境 python | 批量修改目录下文件名 《微习惯》 ceph | openeuler (aarch64) 部署 ceph-v16 troubleshooting | glibc 误升级后修复 pxe 安装配置大全 《人间失格》 跑步日常 [置顶] Hello, hugo! shell | 检索某 url 中所有文件的内容 shell | 不同执行方式的区别 shell | 开启 debug 模式 vscode | 常见问题 windows & linux 多网卡时设置默认路由以及添加静态路由 mysql (二) 主从复制原理 GTID 并行复制 mysql (一) 部署 mysql | 杂记 cicd | jenkins 部署 mall-swarm 项目 httpd 源码打包编译成 rpm 包 openssl 源码打包编译成 rpm 包 centos7 | 修改网卡名称 ceph | pool pg_num 配置 docker | 脚本方式批量导出/导入镜像 centos 密码尝试次数过多问题处理 centos7 | 升级内核至 5.10 CVE-1999-0526 ceph | centos7 部署 ceph-v12 python | 修改 pip 源 troubleshooting | 安装 cloud-init 后导致 ssh 连接失败 windows | autohotkey 常用脚本
麒麟 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 配置文件,注释我们添加的内容。

以上.