当前位置:网站首页>一种跳板机的实现思路
一种跳板机的实现思路
2022-06-28 09:56:00 【InfoQ】
一、 跳板机思路简介
- Linux服务器
- Windows服务器
- 其他终端(MySQL终端、Redis终端、网络设备终端 等等)
二、背景知识
2.1 Linux 的 PAM 机制

2.2 PAM 的核心能力

2.3 PAM 模块类型
- auth
- account
- session
- password
2.4 常见 PAM 模块
- pam_unix.so模块
- pam_cracklib.so模块
- pam_loginuid.so模块
- pam_securetty.so模块
- pam_rootok.so模块
- pam_console.so模块
- pam_permit.so模块
- pam_env.so模块
- pam_xauth.so模块
- pam_stack.so模块
- pam_warn.so模块
三、跳板机系统架构
3.1 微服务和高可用设计
3.1.1 微服务设计
- 监听8080端口,提供http接口能力
- 认证某个账号是否存在且正常
- 认证某个账号对某台服务器是否有登录权限
- 认证某个账号对某台服务器是否有sudo权限
- 数据拉取:账号、主机、危险命令库等
- 是jmp访问数据库的唯一入口
- 监听2200端口,提供ssh代理能力
- 可直接访问Linux服务器、其他终端
- 监听8080端口,提供websocket/socket.io连接能力
- 通过ssh协议转发socket.io的流量到jmp-ssh
- 支持网页终端的连接和访问
- 监听8080端口,提供socket.io连接能力
- 实现rdp代理,以便于操作Windows服务器
- 支持基于网页的远程桌面服务
- 提供文件上传下载能力,支持在jmp中通过sftp命令,支持任意sftp客户端连接
- 访问S3,以便存取文件
- 部署在每台Linux服务器中
- jmp-agent常驻进程
- jmp专用pam模块
3.1.2 高可用设计
3.2 跳板机各子服务交互图

四、核心设计思路
4.1 登录跳板机
- 用户使用ssh客户端登录到jmp-ssh服务,与jmp-ssh服务交互。
- jmp-ssh服务获得ssh会话建立过程中的账号、加密后密码、二次认证信息。
- jmp-ssh服务访问jmp-api服务,提交账号、加密后密码、二次认证信息,以便知晓该用户是否有登录jmp的权限。

4.2 登录目标服务器
- 仅当用户已经登录到jmp-ssh或者已经通过了jmp-socket的前端身份认证时方可登录目标服务器。
- 用户在jmp-ssh提供的伪终端下输入ssh xxxx(xxxx为目标服务器的主机名或者IP地址)。
- jmp-ssh通过ssh连接到目标服务器,自动携带用户名信息,尝试建立会话。
- 由于目标服务器上的jmp-agent接管了sshd的身份识别和权限认证,因此jmp.so获取ssh会话建立过程中的用户名,将用户名和本机IP地址信息加密,调用jmp-api接口进行权限认证。
- jmp-api根据内置的策略,以及查询授权表,断定该用户对该机器是否有登录权限。
- jmp-agent得到鉴权结果,对有权限的,则ssh会话建立成功,否则会话建立失败。
- jmp-ssh获得会话建立结果和原因,返回给用户ssh终端。

4.3 命令交互
- 仅当用户已经登录到某台机器时,才可命令交互。
- 当用户在ssh客户端上敲入字符,传递到jmp-ssh,jmp-ssh判断语句是否结束。
- 当语句结束,则jmp-ssh根据该机器的危险命令规则,匹配用户输入的语句,决定告警、拦截、通过。
- jmp-ssh将通过的语句或需要告警的语句传递到目标服务器,目标服务器执行并返回结果。

4.4 切换用户 / 特权账号
- 仅当用户已经登录到某台机器时,才可能触发切换用户的行为。
- 当用户在ssh客户端执行sudo xxxx、su、id等等命令时,jmp-ssh透传命令到目标服务器上。
- 目标服务器上的sshd进程执行sudo xxxx、su、id等等命令,由于目标服务器上已经被jmp-agent接管了身份失败和权限认证,因此由jmp.so获取登录用户名、当前用户名、本机地址信息、目标用户名信息,调jmp-api的接口进行sudo权限认证。
- jmp-api判断该用户是否拥有对该机器切换到xx账号的权限(如是否有root权限)。
- sudo、su、id等进程通过jmp.so获得了鉴权结果,决定是否切换用户。

4.5 使用网页交互
- 仅针对用户已经通过网页完成了登录(如sso)的情况。
- 用户通过网页访问jmp-socket服务。
- jmp-socket服务获取用户名信息、网页登录sso信息,提交给jmp-api,生成一个临时登录凭证。
- jmp-socket访问jmp-ssh,提交临时登录凭证。
- jmp-ssh发起登录的二次认证,等待用户完成二次认证。
- jmp-socket在用户完成二次认证后,承担了ssh客户端的角色,与jmp-ssh交互。

4.6 危险命令拦截
- jmp-ssh在用户已经登录到目标服务器后,在该会话内,加载目标机器对应服务的危险命令规则,初始化正则匹配逻辑。
- jmp-ssh在用户输入语句结束后,根据该机器的危险命令规则,匹配用户输入的语句。
- jmp-ssh根据危险命令规则匹配后策略,决定对该输入做如下处理:告警、拦截、通过。
- 对于通过的,jmp-ssh传递命令到目标服务器。
- 对于告警的,jmp-ssh传递命令到目标服务器,但是向用户、用户的直属领导、jmp系统管理员发送危险命令告警。
- 对于拦截的,jmp-ssh拒绝传递命令,同时向用户、用户的直属领导、jmp系统管理员发送危险命令告警。

4.7 非Linux服务器的跳板机
- Windows服务器
- MySQL终端和Redis终端
- 网络设备管理终端
五、权限规则和审批链路设计
5.1 默认拥有的权限

5.2 权限申请的审批链路
- 如果没有默认权限,但是需要登录机器,或者需要使用ROOT权限,则需要申请。
- 如果为组织申请权限,则该组织(部门)下所有成员均有锁申请的权限。

六、这种实现思路的优点
6.1 操作方便,体验较好
6.2 安全可靠,容易审计
6.3 服务间职责明确
七、总结与展望
边栏推荐
- Bron filter Course Research Report
- June 27, 2022: give a 01 string with a length of N. now please find two intervals so that the number of 1 is equal and the number of 0 is equal in the two intervals. The two intervals can intersect bu
- PMP考试重点总结五——执行过程组
- 缓存之王Caffeine Cache,性能比Guava更强
- The R language uses the avplots function in the car package to create added variable plots. In image interaction, manually identify (add) strong influence points that have a great impact on each predi
- Django数据库操作以及问题解决
- Bridge mode
- 接口自动化框架脚手架-利用反射机制实现接口统一发起端
- Settings of gift giving module and other custom controls in one-to-one video chat system code
- 再見!IE瀏覽器,這條路由Edge替IE繼續走下去
猜你喜欢
随机推荐
QT signal and slot communication mechanism (when multiple windows communicate back and forth [parent and child windows])
R语言使用car包中的avPlots函数创建变量添加图(Added-variable plots)、在图像交互中,在变量添加图中手动标识(添加)对于每一个预测变量影响较大的强影响点
2022-06-27:给出一个长度为n的01串,现在请你找到两个区间, 使得这两个区间中,1的个数相等,0的个数也相等, 这两个区间可以相交,但是不可以完全重叠
Multithreading concurrent parallel threaded process
Proxy mode (proxy)
接口自动化框架脚手架-利用反射机制实现接口统一发起端
用 Compose 实现个空调,为你的夏日带去清凉
Decorator
Unity 从服务器加载AssetBundle资源写入本地内存,并将下载保存的AB资源从本地内存加载至场景
代理模式(Proxy)
mysql打不开,闪退
PMP考试重点总结四——规划过程组(2)
flink cep 跳过策略 AfterMatchSkipStrategy.skipPastLastEvent() 匹配过的不再匹配 碧坑指南
idea连接sql sever失败
bad zipfile offset (local header sig)
PMP Exam key summary IX - closing
Dolphin scheduler uses system time
大纲笔记软件 Workflowy 综合评测:优点、缺点和评价
各位大佬,问下Mysql不支持EARLIEST_OFFSET模式吗?Unsupported star
【OpenCV 例程200篇】213. 绘制圆形









