密码即服务-初探vault

news2024/12/26 9:20:28

欢迎关注微信公众号 singless

1 介绍

https://www.vaultproject.io/
https://lonegunmanb.github.io/essential-vault/

简单来说,在我们日常的工作中,免不了要和许多的机密信息打交道,可以是云服务的 Access Key 和 Secret Key,也可以是生产服务器的证书、SSH 口令、证书,或者数据库的用户名密码。以往在工作中我们经常面临着这样的问题:

  • 执行密码轮换策略很痛苦
  • 掌握机密的员工离职后可能泄密或是恶意报复
  • 开发者不小心把机密信息随着代码上传到公网的源码仓库造成泄密
  • 管理多个系统的机密非常麻烦
  • 需要将机密信息安全地加密后存储,但又不想将密钥暴露给应用程序,以防止应用程序被入侵后连带密钥一起泄漏

Vault 就是用来解决这些问题的利器。

生产环境推荐的Vault架构如下

HashiCorp 推荐使用 Consul 作为 Vault 的数据存储 Backend(推荐但并不强制,Vault 支持丰富的数据存储 Backend)。本文使用consul作为vault的后端存储。

2 安装vault

笔者服务器为Ubuntu,其他系统请参考以下链接进行安装

https://developer.hashicorp.com/vault/downloads?product_intent=vault
root@ceph-4:~# wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
root@ceph-4:~# echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
root@ceph-4:~# sudo apt update && sudo apt install vault
root@ceph-4:~# vault version
Vault v1.15.0 (b4d07277a6c5318bb50d3b94bbd6135dccb4c601), built 2023-09-22T16:53:10Z

3 启动consul

以dev方式启动一个consul

root@ceph-4:~# sudo apt update && sudo apt install consul
root@ceph-4:~# consul agent -dev

4 vault操作

4.1 启动vault

创建vault的配置文件,指定后端存储为consul,数据存储路径为vault/,同时指定vault的端口为8200,并禁用tls

root@ceph-4:~# cat /root/config.hcl  
storage "consul"{
address = "127.0.0.1:8500"
path    = "vault/"
}

listener "tcp"{
address     = "127.0.0.1:8200"
tls_disable = 1
}
root@ceph-4:~# vault server -config=/root/config.hcl ##启动vault服务

vault保存在Backend中的数据都是加密的。需要用密钥进行解密,这个密钥在vault中称为master key,master key需要手动创建。vault会使用shamir算法将master key切分成M份shared key,管理员需要至少提供其中N份shared key才能还原出master key(M和N都可配置,M≥N)。

Vault 刚启动时由于无法解密主密钥,所以处于 Seal 封印状态,这时 Vault 是无法进行任何操作的。解密主密钥的过程称为 Unseal 解封。在未解封(unseal)时,Vault 几乎无法执行任何操作。比方身份认证、管理挂载表等等,都无法执行。唯一可以执行的操作就是解封并检查封印状态。

4.2 生成key

root@ceph-4:~# vault operator init -address='http://127.0.0.1:8200'

执行上面的命令可以生成master key,默认master key会被分成5份,其中的任意3份可以组合成master key。root token是用来登录vault的账户,拥有最高的权限。这些key都需要自己保存好,vault并不会保存这些信息。

4.3 查看vault的状态

root@ceph-4:~# vault status -address='http://127.0.0.1:8200'

从图中我们可以看到,vault处于seal状态,且seal使用的是shamir算法,总共的shared key(unseal key)数量是5,threshold表示当有3把shared key时,可以解封vault,"unseal progress"代表我们当前提供了多少把shared key。

4.4 解封和封印vault

我们提供之前生成的三个shared key用于解封

root@ceph-4:~# vault operator unseal -address='http://127.0.0.1:8200' /glIbUIEG7/5IBc+OVVczoBiKocYBCb44F0cmz9mH8/E
root@ceph-4:~# vault operator unseal -address='http://127.0.0.1:8200' VIWROv3z+yLn/jbURZ/EhKMLYoEI7hvR9Rvvv2lP+udy
root@ceph-4:~# vault operator unseal -address='http://127.0.0.1:8200' 71DTfw9gZUAVSTlY6i3V9k1SYtyJQ6dNfZwox0NHc8SF

可以看到,在提供key时,unseal progress的数量一直在增加,当我们提供3个key 后,vault的sealed变为false状态,解封成功。

如果觉得系统存在风险,可以使用root token登录vault,执行以下命令将vault重新封印

root@ceph-4:~# vault operator seal -address='http://127.0.0.1:8200'

4.5 登录vault

root@ceph-4:~# vault login -address='http://127.0.0.1:8200' hvs.EjKzWarVoX2yQOQkNTrO3RCd

4.6 重建root token

如果root token泄露或root token不甚丢失,可以使用本节的方法重建root token。重建 Root 令牌有两种办法,分别是一次性密码(one time password)简称OPT,以及 pgp。本次使用OPT方式重建。

root@ceph-4:~# export VAULT_ADDR=http://127.0.0.1:8200  ##为了不用每次都输入一个-address参数,我们定义一个VAULT_ADDR的变量
root@ceph-4:~# vault operator generate-root -init  ##生成OPT密码,这个密码我们需要记住,后面需要用到

下面来重新生成root token,会提示我们输入shared key,因为我们默认是需要三个shared key来生成master key,所以命令需要执行三次。最后一次命令执行时,会生成一个encoded token,我们使用otp可以将它解码为root token

root@ceph-4:~# vault operator generate-root

解码root token

root@ceph-4:~# vault operator generate-root -decode=MDtATTsEGC4ZDzQPORIYVzIHIz8wCGYLGjkODA -otp=XM3cMjJcIjSzxWo6CFuMGk0CjhbY  ##使用这个就可以重新生成root token了
hvs.vnRMPeguAEwaqAVrwcVHpQlU

5 配置使用一次性密码登录SSH

5.1 原理介绍

实现原理图如下

我们需要在被登录的服务器上配置 vault-ssh-helper 程序,它可以取代 Linux 默认的登录验证程序,在用户传递了登录用户名密码后,转而向 Vault 服务器请求验证用户名密码的正确性。用户首先登录 Vault,通过 Vault 创建一个属于目标服务器的 otp,随后远程连接目标服务器,给出这组 otp,在 vault-ssh-helper 验证通过后成功登录,同时 Vault 服务器会在成功验证后删除这个 otp,确保密码的确是一次性的。

5.2 安装vault-ssh-helper

https://github.com/hashicorp/vault-ssh-helper
root@ceph-4:~# wget https://releases.hashicorp.com/vault-ssh-helper/0.2.1/vault-ssh-helper_0.2.1_linux_amd64.zip
root@ceph-4:~# unzip vault-ssh-helper_0.2.1_linux_amd64.zip
root@ceph-4:~# mv vault-ssh-helper /usr/bin/
root@ceph-4:~# vault-ssh-helper -version
vault-ssh-helper v0.2.1

创建配置文件

root@ceph-4:~# mkdir /etc/vault-ssh-helper.d/
root@ceph-4:~# cat /etc/vault-ssh-helper.d/config.hcl
vault_addr = "<VAULT_ADDRESS>"
ssh_mount_point = "ssh"
tls_skip_verify = true
allowed_roles = "*"

5.3 sshd配置

编辑/etc/pam.d/sshd文件

root@ceph-4:~# vim /etc/pam.d/sshd

注释@include common-account一行并加上两行auth

auth requisite pam_exec.so quiet expose_authtok log=/tmp/vaultssh.log /usr/local/bin/vault-ssh-helper -dev -config=/etc/vault-ssh-helper.d/config.hcl
auth optional pam_unix.so not_set_pass use_first_pass nodelay

检查ssh配置中以下三个值的配置是否正确

root@ceph-4:~# grep -E "ChallengeResponseAuthentication|PasswordAuthentication|UsePAM" /etc/ssh/sshd_config |grep -v "^#"
PasswordAuthentication no
ChallengeResponseAuthentication yes
UsePAM yes

重启ssh服务

root@ceph-4:~# systemctl restart sshd

5.4 vault服务配置

启动vault服务

root@ceph-4:~# cat /root/config.hcl
storage "consul" {
  address = "127.0.0.1:8500"
  path    = "vault/"
}

listener "tcp" {
 address     = "192.168.85.151:8200"  ##填写本机ip地址
 tls_disable = 1
}

listener "tcp" {
 address     = "127.0.0.1:8200"
 tls_disable = 1
}
root@ceph-4:~#
root@ceph-4:~# vault server -config=/root/config.hcl

参考第四节解封vault并用root token登录vault,shared key和root token可以使用之前的

登录后启用ssh模块

root@ceph-4:~# vault secrets enable ssh
Success! Enabled the ssh secrets engine at: ssh/

然后我们写入一条角色,允许使用 otp 登录 ssh

root@ceph-4:~# vault write ssh/roles/otp_key_role key_type=otp default_user=singless cidr_list=0.0.0.0/0
Success! Data written to: ssh/roles/otp_key_role

这里我们指定了生成的 otp 的默认用户名是 singless,生成 otp 时要确保对应的用户名在要登录的服务器上已经存在,否则即使 Vault 验证通过,也是无法正常登录的。这里的 cidr_list 可以限制试图登录的来访 ip 范围。

生成一个otp

root@ceph-4:~# vault write ssh/creds/otp_key_role ip=192.168.85.151

ip为运行vault-ssh-helper的服务器ip,key为生成的otp密码,通过username一行可以知道,otp是为singless用户生成的。

我们在使用singless用户通过ssh连接到服务器上,通过otp密码可以正常连接到服务器。且OTP密码只可使用一次。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1123587.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

whois人员信息python批处理读入与文本输出

使用pytho读取一个ip列表文本&#xff0c;批量获取whois输出并写入到一个文本 import socketif __name__ __main__:# 江苏电信DNS地址mylog open(whois.log, mode a,encodingutf-8)for line in open("ip.txt"):s socket.socket(socket.AF_INET, socket.SOCK_STR…

uniapp map polygons 区域填充色(fillColor)在ios显示正常,但在安卓手机显示是黑色的,怎么解决?

uniapp map polygons 区域填充色&#xff08;fillColor&#xff09;在ios显示正常&#xff0c;但在安卓手机显示是黑色的,怎么解决&#xff1f; <MapPage :longitude"item.centerCoord[0]" :latitude"item.centerCoord[1]":polygons"[{ points: it…

虚拟机使用linux常用问题(虚拟机操作系统:ubuntu 22.04LTS)

1.虚拟机连接外网 ubuntu解决网络连接的解决方案 明明连接好了但是没有网络的情况 2.虚拟机磁盘扩容 相关博客 利用gparted工具时,直接将unallocated空间的前一个位置的磁盘resize,将unallocated的空间全部覆盖 3.虚拟机与本机共享文件 安装vmtools 设置选项中安装vmtools…

软件为什么单独标注支持IPV6?IPV6和IPV4有什么区别?

ipv4和ipv6有何区别&#xff1f; 最关键的区别在于能够提供网络ip地址的数量。 ipv4是互联网协议第四版&#xff0c;地址长度为32位&#xff0c;可以提供ip地址总量为43亿个。目前ipv4地址资源已面临枯竭。 ipv6是互联网协议第六版&#xff0c;地址长度为128位&#xff0c;可…

python打包和发布package

打包 偶尔有一些复用性很高&#xff0c;复杂度也很高的函数要反复调用&#xff0c;可以自行打包&#xff0c;安装 打包结构如下 以iso_timer为例 mkdir common vim __init__.py cd common vim __init__.py vim format.py# init.py from .common import *# /common/init.p…

这Bug只能通过压测发现

大家好&#xff0c;我是洋子。之前发布过一篇有关于在性能测试当中发现Bug的文章《因为一个Bug&#xff0c;差点损失了100w》 这篇文章当时还登上了CSDN全站综合热榜TOP1&#xff0c;最近工作在做性能测试时&#xff0c;又发现了几个比较有意思得Bug&#xff0c;本期分享其中的…

Office技巧(持续更新)

1. Word 1.1 标题设置为多级列表 选住一级标题&#xff0c;之后进行“定义新的多级列表” 1.2 图片和表的题注自动排序 正常插入题注后就可以了。如果一级标题是 “汉字序号”&#xff0c;那么需要对题注进行修改&#xff1a; 从原来的 图 { STYLEREF 1 \s }-{ SEQ 图 \* A…

Android之Monkey源码分析(第十三篇:触摸事件流程分析)

前言 前面讲了一些monkey作者的设计思想&#xff08;有的我没写完&#xff0c;还没发布&#xff0c;惨&#xff09;&#xff0c;这篇来点实际的&#xff0c;monkey程序是如何发起一个触摸事件的呢&#xff1f; 本例子中假设使用的命令是&#xff1a; adb shell monkey -p com.…

公众号留言功能怎么使用?如何开启?

为什么公众号没有留言功能&#xff1f;根据要求&#xff0c;自2018年2月12日起&#xff0c;新申请的微信公众号默认无留言功能。有些人听过一个说法&#xff1a;公众号粉丝累计到一定程度或者原创文章数量累计到一定程度就可以开通留言功能。其实这个方法是2018年之前才可以&am…

每日一题 2316. 统计无向图中无法互相到达点对数(中等,图连通分量)

题目很简单&#xff0c;只要求出每个连通分量有多少个节点即可首先通过建立一个字典来表示每个节点的邻接关系遍历每个节点&#xff0c;并通过邻接关系标记在当前连通分量内的所有的点&#xff0c;这样就可以知道一个连通分量内有多少个点在这里我陷入了一个误区&#xff0c;导…

【Linux】32条指令带你玩转 Linux !

目录 1&#xff0c;whoami 2&#xff0c;who 3&#xff0c;pwd 4&#xff0c;ls 1&#xff0c;ls 2&#xff0c;ls -l 3&#xff0c;ls -a 4&#xff0c;ls -al 5&#xff0c;ls -d 6&#xff0c;ls -ld 5&#xff0c;clear 6&#xff0c;cd 1&#xff0c;cd 2&…

看得懂的——数据库中的“除”操作

通过一个例子来解释数据库中的“除”操作 R➗S其实就是判断关系R中X各个值的象集Y是否包含关系S中属性Y的所有值 求解步骤 第一步 找出关系R和关系S中相同的属性&#xff0c;即Y属性。在关系S中对Y做投影&#xff08;即将Y列取出&#xff09;&#xff1b;所得结果如下&#x…

掌握测评补单技术对Shopee、Lazada店铺有什么好处?

虾皮(Shopee)、lazada作为东南亚地区最大的电商平台之一&#xff0c;吸引了众多卖家加入其平台&#xff0c;竞争激烈。在如此庞大的市场中&#xff0c;如何优化你的shopee、lazada店铺商品再结合自养号测评&#xff0c;提高曝光率和销售能力成为关键。本文将分享一些有效的方法…

解决dirsearch扫描工具pkg_resources模块警告问题

一、pkg_resources模块问题 ┌──(kali㉿kali)-[~/桌面/XXX/dirsearch-master] └─$ python dirsearch.py -h /home/kali/XX/XXXX/dirsearch-master/dirsearch.py:23: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io…

VMware Workstation安装ESXi和vCenter(8.0)

一、环境准备 虚拟机&#xff1a;VMware Workstation 17 Pro ESXi&#xff1a;ESXi-8.0U2-22380479-standard vCenter&#xff1a;VMware-VCSA-all-8.0.2-22385739.iso 主要是内存设置&#xff0c;因为vCenter需要14Gb内存&#xff0c;所以这个至少16Gb。 硬盘需要2块&…

【漏洞复现】蓝凌EIS智慧协同平台saveImg接口存在任意文件上传

漏洞描述 蓝凌智慧协同平台满足组织企业在知识、协同及项目管理系统中建设等需求。该平台在saveImg接口处存在任意文件上传,攻击者可通过该漏洞上传Weshell控制服务器。 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,…

65%更小的APK和70%更少的内存:如何优化我的Android App的内存

65%更小的APK和70%更少的内存&#xff1a;如何优化我的Android App的内存 (Note: This is a translation of the provided title) 为什么应用程序内存很重要&#xff1f; 使用最少的内存的高效应用程序可以提升性能&#xff0c;节省设备资源并延长电池寿命。它们提供流畅的用…

学生台灯选什么光源好?适合学生的护眼台灯推荐

现在的台灯可以说是孩子必不可少的一个学习灯具了&#xff0c;几乎每家每户都会备着一台。不过台的好坏也有区别&#xff0c;相对而言&#xff0c;以前所用的白炽灯、日光灯、节能灯等等传统台灯已经是不适合孩子使用的了&#xff0c;目前而言最好的是LED灯。下面小编为大家推荐…

【消费战略】解读100个食品品牌|意面突起,“空刻”的品类心智占位!

空刻意面&#xff0c;一个开创意大利面速食化的新消费品牌&#xff0c;凭借着核心大单品意大利面&#xff0c;在过去短短的几年中&#xff0c;获得不俗的市场成绩和品牌影响力&#xff0c;占领了空刻意面的消费心智&#xff1a; 2019年&#xff0c;AIRMETER氢刻意面上线天猫旗舰…

急需一个可以短视频配音的手机App~

很多小伙伴视频拍摄得很好&#xff0c;但不想用自己的声音做解说旁白&#xff0c;怎么办&#xff1f;这时候就急需一个可以配音的手机App&#xff01;今天给大家推荐一款一款专注于文字转语音的智能语音合成工具——悦音配音。声音堪比真人发声的配音服务平台&#xff0c;里面拥…