>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
Go

如何安全管控生产环境直接访问权限

向工程师分发SSH密钥往往会导致混乱。有人离职了,但他们的公钥还留在数十台生产服务器上。有人不小心在错误的终端执行了危险命令,然后你得花半天时间在系统日志里查找这是谁的会话。

随着服务器数量增长和团队扩大,直接连接机器变得越来越麻烦。通常在这个时候,公司会考虑4A概念:认证(Authentication)、授权(Authorization)、账号(Accounting)和审计(Auditing)。然而,部署Teleport或CyberArk这类重量级方案需要耗费大量时间和资源。

我在GitHub上偶然发现了一个名为OneTerm的项目。这是一个由Go和Vue.js编写的轻量级开源访问网关,无需复杂配置即可解决服务器的集中访问管控问题。

OneTerm的内部架构

原理很简单:OneTerm在员工和生产基础设施之间建立了一层隔离。开发者不再通过SSH或RDP直接连接主机,而是登录OneTerm的Web控制台,从那里启动所需的会话。

该项目满足基本的安全需求:

  • 支持双因素认证的统一入口。
  • 针对特定服务器和用户组分配权限。
  • 每个会话都会记录视频和文本日志。如果服务器出现问题,可以在内置播放器中回放操作过程以检查细节。
  • 会话隔离防止用户之间相互干扰,以及在网关上提权。
  • 保护内部主机免受外部网络的直接访问。

除了标准SSH,OneTerm还支持RDP和VNC协议。这对于基础设施中运行Windows服务器或带图形界面的虚拟机的用户很有帮助。

技术栈和集成

项目技术栈相当常见。后端采用Go编写,前端界面基于Vue.js和Ant Design Vue库构建。Go的构建方式确保了低内存占用和快速的Web终端性能。

开发者添加了与Veops CMDB的原生集成,这是他们的另一个开源项目。如果在CMDB中维护设备台账,服务器可以一键导入堡垒机,无需手动输入IP地址、端口和凭证。

让我们看看系统界面。

终端直接在浏览器窗口中运行。工程师无需配置本地客户端、设置隧道或在笔记本上存储密钥。

访问权限按时间和角色进行细分。你可以仅在值班期间或技术维护期间授予服务器访问权限。

如何部署和测试

对于本地体验,作者准备了Docker Compose配置,启动只需几分钟:

git clone https://github.com/veops/oneterm.git
cd oneterm/deploy
docker compose up -d

容器启动后,Web界面在 http://127.0.0.1:8666 打开。默认登录名为 admin ,密码为 123456

对于生产环境,这个选项不适用。为此,开发者编写了交互式安装脚本 ./setup.sh 。它会为数据库和内部服务生成随机密码,自动更新配置文件,并保存备份。

git clone https://github.com/veops/oneterm.git
cd oneterm/deploy
./setup.sh
docker compose up -d

如果你想添加自定义功能,项目为前端和后端都提供了热重载脚本: ./dev-start.sh frontend./dev-start.sh backend 。构建需要Node.js 14.17.6+和Go 1.21.3+。

细节和限制

在将工具引入生产环境之前,你应该考虑一些细节:

  • 代码采用AGPL-3.0许可证分发。如果你决定将其改造成闭源商业SaaS解决方案,你需要开源你的修改。
  • 仓库中的 main 分支持续更新,可能不稳定。对于服务器使用,只应使用Releases页面上的构建版本。
  • 文档仍然相当简略。开发者会在GitHub Issues中回复,但某些细节需要直接从源代码中理解。

总结

OneTerm适合希望快速组织访问管理的小型运维团队和系统管理员。如果你需要一个具有会话录制、访问细分以及SSH和RDP支持的简单堡垒机,该项目可以在没有不必要复杂性的情况下满足基本需求。

你可以在官方演示 oneterm.v1ops.com 上无需安装即可体验界面,登录名为 demo ,密码为 123456

相关项目