您现在的位置是:系统运维 >>正文
一种跳板机的实现思路
系统运维713人已围观
简介作者 | vivo 互联网运维团队- Yang Lei本文介绍了一种跳板机实现思路,阐述了基本原理,并讲解了特点和相对优势。一、跳板机思路简介本文所描述的跳板机下文称为“jmp”)支持:Linux服务 ...
作者 | vivo 互联网运维团队- Yang Lei
本文介绍了一种跳板机实现思路,种跳阐述了基本原理,板机并讲解了特点和相对优势 。现思
一、种跳 跳板机思路简介
本文所描述的板机跳板机(下文称为“jmp”)支持:
Linux服务器Windows服务器其他终端(MySQL终端、Redis终端 、现思网络设备终端 等等)有别于市面上常见的种跳jumpserver方案 ,使用本文所搭建的板机跳板机将不会存储任何Linux服务器的账号 、密码、现思密钥等信息 ,种跳杜绝了信息泄露的板机可能。本文最大的高防服务器现思特点是借助Linux的PAM机制 ,通过修改Linux服务器系统层配置,种跳部分接管了Linux系统的板机身份认证能力,关于这一点,现思下文将详细描述 。
二 、背景知识
2.1 Linux 的 PAM 机制PAM(Pluggable Authentication Modules)机制,是一种广泛应用于当代Unix、Linux发行版的系统层身份认证框架。通过提供一系列动态链接库和两套编程接口(Service Programming Interface 和 Application Programming Interface),源码下载将系统提供的服务与该服务的认证方式分离,从而使得可以根据需要灵活地给不同的服务配置不同的认证方式而无需更改服务程序。

功能
应用程序API
服务模块SPI
认证管理
pam_authenticate
pam_sm_authenticate
pam_setcred
pam_sm_setcred
账号管理
pam_acc_mgmt
pam_sm_acc_mgmt
会话管理
pam_open_session
pam_sm_open_session
pam_close_session
pam_sm_close_session
口令管理
pam_chauthok
pam_sm_chauthok
2.3 PAM 模块类型auth
用来对用户的身份进行识别,如:提示用户输入密码 ,或判断用户是否为root等。account
对帐号的各项属性进行检查 ,如:是否允许登录,建站模板是否达到最大用户数 ,或是root用户是否允许在这个终端登录等 。session
这个模块用来定义用户登录前的,及用户退出后所要进行的操作 ,如:登录连接信息、用户数据的打开与关闭、挂载文件系统等。password
使用用户信息来更新 ,如:修改用户密码 。2.4 常见 PAM 模块pam_unix.so模块
【auth】提示用户输入密码 ,源码库并与/etc/shadow文件相比对 ,匹配返回0(PAM_SUCCESS)。
【account】检查用户的账号信息(包括是否过期等) ,帐号可用时,返回0 。
【password】修改用户的密码,将用户输入的密码 ,作为用户的新密码更新shadow文件。
pam_cracklib.so模块
这个模块可以插入到一个程序的密码栈中,用于检查密码的免费模板强度 。pam_loginuid.so模块
用来设置已通过认证的进程的uid,以使程序通过正常的审核 。pam_securetty.so模块
如果用户要以root登录时,则登录的tty必须在/etc/securetty中之前。pam_rootok.so模块
pam_rootok模块用来认证用户id是否为0 ,为0返回PAM_SUCCESS。pam_console.so模块当
用户登录到终端时,改变终端文件文件的权限.在用户登出后,再将它们修改回来 。亿华云pam_permit.so模块
该模块任何时候都返回成功 。pam_env.so模块
pam_env允许设置环境变量;默认下若没有指定文件 ,将依据/etc/security/pam_env.conf进行环境变量的设置pam_xauth.so模块
pam_xauth用来在用户之间转发xauth-key。pam_stack.so模块
pam_stack可以调用另一个服务;即多个服务可以包含到一个设置中,当需要修改时只修改一个文件就可以了 。pam_warn.so模块
pam_warn用来记录服务、终端用户 、远程用户和远程主机的信息到系统日志,模块总是返回PAM_IGNORE、指不希望影响到认证处理 。三 、跳板机系统架构
3.1 微服务和高可用设计3.1.1 微服务设计整个跳板机系统可拆分为5个服务,和1个组件 。
① jmp-api 服务
监听8080端口,提供http接口能力认证某个账号是否存在且正常认证某个账号对某台服务器是否有登录权限认证某个账号对某台服务器是否有sudo权限数据拉取 :账号、主机 、危险命令库等是jmp访问数据库的唯一入口② jmp-ssh 服务
监听2200端口,提供ssh代理能力可直接访问Linux服务器 、其他终端③ jmp-socket 服务
监听8080端口 ,提供websocket/socket.io连接能力通过ssh协议转发socket.io的流量到jmp-ssh支持网页终端的连接和访问④ jmp-rdp 服务
监听8080端口 ,提供socket.io连接能力实现rdp代理,以便于操作Windows服务器支持基于网页的远程桌面服务⑤ jmp-sftp 服务
提供文件上传下载能力 ,支持在jmp中通过sftp命令,支持任意sftp客户端连接访问S3,以便存取文件⑥ jmp-agent 组件
部署在每台Linux服务器中jmp-agent常驻进程定时从jmp-api拉取服务和权限信息 ,缓存到本地文件
根据需要检测文件改动,确保配置文件不被恶意修改
jmp专用pam模块
提供jmp.so动态库,为pam模块
安装脚本释放配置文件 ,修改/etc/pam.d/xxx文件,生效jmp的pam模块
接管身份识别和权限认证,调用jmp-api接口以完成鉴权
3.1.2 高可用设计jmp中任何一个服务都是无状态的,因而支持异地多机房部署
http协议的服务(jmp-api、jmp-socket 、jmp-rdp) ,通过Nginx配置路由 ,且配置自动负载均衡策略 。非http的服务(jmp-ssh 、jmp-sftp) ,通过4层负载均衡(lvs、vgw)实现高可用 。自动降级策略
危险命令识别能力存在耗时久的可能性 ,因此当发现识别危险命令的接口超时,则自动忽略危险命令识别。身份认证接口超时的情况下,则使用jmp-agent本地缓存的身份信息 ,如获取不到本地缓存 ,则使用配置项的默认策略(全部通过或者全部拒绝)。jmp-agent组件的高可用
由于jmp-agent部署在业务服务器上,所处环境可能随时发生变化,因此必须具备较强的适应性(磁盘空间不足 、inode满、内存不足、网络不稳定、域名解析异常等等) 。针对磁盘空间或inode不足,jmp-agent可能无法使用本地文件缓存 ,因此此时选择降级,忽略缓存。针对网络不稳定问题,jmp-agent选择增加同jmp-api、jmp-ssh的通信超时 ,同时可降级鉴权 ,确保操作不受影响 。针对解析异常问题 ,jmp-agent无法通过域名同服务交互,此时使用内置的固定ip同服务交互。3.2 跳板机各子服务交互图
从图中可见,作为核心服务的jmp-ssh承载了ssh流量的代理转发,将来自用户ssh客户端、jmp-socket服务的ssh流量转发到目标服务器上,并将来自目标服务器的返回结果送达回ssh客户端 、jmp-socket服务 。因此 ,可在jmp-ssh服务上识别来自用户的危险命令,在送达目标服务器之前就给出告警或者直接拦截,避免恶意操作或者误操作给业务造成影响 。
图中的jmp-api作为同数据库和缓存直接交互的服务,在整个系统中承担数据接口和管理端的角色,接受来自全量服务器中jmp-agent组件的用户身份鉴别和权限校验请求 ,是整个系统中的控制中枢。
jmp-api也同时提供的权限设置能力,通过与流程系统对接,可方便的为人员/部门申请机器/服务/项目的登录权限或root权限,此外 ,jmp-api也对登录权限和root权限的可申请人做出限制 ,针对不同项目/服务 ,对权限有效时间做出限制 ,严格控制权限粒度。
由于同一个项目/服务往往由同一个组的人维护 ,因此jmp-api内置了默认的权限策略,可允许项目/服务的负责人对项目/服务直接拥有登录权限 ,而无需申请;仅支持对应项目/服务的运维负责人默认拥有root权限,其他所有人如果希望获取root权限,则必须经过申请,由对应服务的运维负责人审批 。
图中的jmp-agent是部署在每一台Linux服务器上的 ,通过在Linux上修改/etc/pam.d/sshd、/etc/
pam.d/remote、/etc/pam.d/sudo等等文件 ,让 jmp.so (属于jmp-agent.rpm或jmp-agent.deb的一部分)接管ssh服务 、sudo程序等关键系统程序的身份识别、权限认证 。从而使得在不增加/etc/passwd 、/etc/shadow内容的前提下实现了在任意一台服务器上识别出所有人员身份的能力 。
图中的jmp-rdp仅作为Windows服务器的rdp代理服务,并提供基于web的远程桌面能力。
图中的jmp-socket则提供基于web的Linux服务器操作终端,从而让用户不使用ssh客户端也能够方便地登录服务器。
四 、核心设计思路
4.1 登录跳板机用户使用ssh客户端登录到jmp-ssh服务 ,与jmp-ssh服务交互。jmp-ssh服务获得ssh会话建立过程中的账号、加密后密码、二次认证信息 。jmp-ssh服务访问jmp-api服务 ,提交账号 、加密后密码 、二次认证信息,以便知晓该用户是否有登录jmp的权限。





Windows服务器对于
Windows服务器 ,使用jmp-rdp服务,将rdp协议数据转成由socket.io承载的应用数据(依赖Apache Guacamole),并通过web页面的Canvas展示实时图像并接受键盘鼠标事件 。MySQL终端和Redis终端
仅支持部署在Linux服务器上的MySQL和Redis 。在服务器上通过mysql.sock ,使jmp-agent连接到本地MySQL服务 ,jmp-agent转发标准输入和标准输出到jmp-ssh。在服务器上通过redis.sock ,使jmp-agent连接到本地Redis服务,jmp-agent转发标准输入和标准输出jmp-ssh。该方法理论上支持任意可通过unixsocket连接的服务。网络设备管理终端
对于网络终端 ,则jmp-ssh读取jmp-api接口,获取对应网络设备的连接信息(协议类型、账号信息等),实现连接和操作。五 、权限规则和审批链路设计
5.1 默认拥有的权限无需申请 ,即可拥有的权限。
授权的主体
权限的目标
权限的类型
服务负责人
服务的线上主机
登录权限
服务的线下主机
登录权限+ROOT权限
项目负责人
项目的线上主机
登录权限
项目的线下主机
登录权限+ROOT权限
服务的运维
服务的线上主机
登录权限+ROOT权限
服务的线下主机
项目的运维
项目的线上主机
登录权限+ROOT权限
项目的线下主机
5.2 权限申请的审批链路如果没有默认权限 ,但是需要登录机器 ,或者需要使用ROOT权限 ,则需要申请 。如果为组织申请权限,则该组织(部门)下所有成员均有锁申请的权限。这里明确了申请流程的审批链路 :

六、这种实现思路的优点
6.1 操作方便 ,体验较好通过该思路所建设的跳板机系统,操作上比较方便 ,即支持了ssh、又兼容了rdp ,同时提供了网页端操作入口 ,体验较好。同时,由于采用微服务架构 ,服务间耦合较小 ,比较容易做到高可用,从而很少出现卡顿、延时等现象 ,整体稳定性可靠,体验上有保证 。
6.2 安全可靠,容易审计本文的最大特点就是在目标服务器上使用了pam机制,通过jmp.so接管多个服务的身份识别和权限认证 ,从而做到了在不修改标准命令的基础上,统一接管权限 ,统一管控。并且做到了在登录到目标机器上后 ,可以进一步ssh到其他服务器 ,所有的交互过程全程记录,所有的操作命令都会被记录下来。
由于通过该思路所实现的跳板机直接将用户名作为目标服务器ssh会话的登录名,所以在系统内部所记录的日志里也是直接的用户名,而不是如jumpserver等方案的统一账号,这种方式下 ,更容易定位到操作轨迹的真实执行人,一目了然。
危险命令拦截功能 ,更是可以很大程度上避免恶意操作或者破坏性强的误操作 ,为业务稳定性增加一层保障 。
6.3 服务间职责明确由于采用了微服务架构 ,可以做到每个服务的横向扩展,从而做到了通过扩容服务的方式管控更多的机器 。服务间职责明确,可根据需要裁减jmp-rdp、jmp-socket、jmp-sftp ,也可以根据需要增加新的服务 ,适配性较好 。
七 、总结与展望
随着服务器规模的扩大,如何管理这些服务器成为一个越来越重要的问题 。针对服务器的登录访问,本文介绍了跳板机的一种实现思路 ,并描述了该思路的优点和独特之处。通过该思路可以一定程度上构建简单 、易用且高可用的跳板机,从而解决服务器登录问题 。如果读者对这个实现思路感兴趣 ,或者有任何疑问 ,欢迎与我们沟通。我们也非常愿意与各位一起学习,研究技术。
Tags:
转载:欢迎各位朋友分享到网络,但转载请说明文章出处“算法与编程”。http://www.bzli.cn/html/237e199761.html
相关文章
《数据出境安全评估办法》发布:出海企业需加快对标合规
系统运维随着数字经济的蓬勃发展,数据跨境活动也开始日益频繁。明确数据出境安全评估的具体规定,不仅是促进数字经济健康发展、防范化解数据跨境安全风险的需要,也是维护国家安全和社会公共利益的需要,是保护个人信息权益 ...
【系统运维】
阅读更多苹果Plus续航能力的全面解析(一款出色的智能手机,更持久的电池寿命将带来什么改变?)
系统运维在如今科技发达的社会中,智能手机已经成为人们生活中不可或缺的一部分。然而,随着手机功能的不断增强,续航能力成为了用户普遍关注的焦点之一。在这个领域中,苹果Plus系列一直以来都备受瞩目,因其出色的续航 ...
【系统运维】
阅读更多无线网络连接(揭秘WiFi和路由器连接的工作原理和优势)
系统运维随着现代科技的飞速发展,无线网络连接已经成为了我们生活中不可或缺的一部分。而在这个无线网络世界中,WiFi和路由器的连接技术扮演着至关重要的角色。本文将为您详细揭秘WiFi和路由器连接的工作原理和优势 ...
【系统运维】
阅读更多
热门文章
最新文章
友情链接
- 解决未安装音频输出设备的问题(如何在没有音频输出设备的情况下获得音频输出?)
- 三星galaxy xcover3配置怎么样
- 小米Note使用技巧汇总
- 一加系统和OPPO系统的优劣比较(一加系统与OPPO系统的性能、功能及用户体验对比)
- 改变logo,创造独特品牌形象的教程(简单易学的Logo设计教程,助你打造独特品牌)
- 一体化电脑设置教程(简单操作,快速上手,助你充分利用一体化电脑的功能)
- 蒙多打野效率如何?(分析蒙多打野的强势表现及优势)
- 相机CF卡芯片损坏解决方法(教你应对相机CF卡芯片损坏的情况,避免数据丢失)
- vivo y29定时开关机设置方法
- 探索苹果7P10.33系统的卓越性能与特点(一探苹果7P10.33系统的强大功能和用户体验) 企业服务器亿华云源码库云服务器香港物理机b2b信息平台网站建设