teleport/server/idea.md

4.5 KiB
Raw Blame History

一些想法

服务解耦

将core服务和web服务解耦合让core服务不直接访问数据库。

优点:

  • 简化core服务代码不用直接访问数据库C++访问数据库比python访问数据库代码复杂度更高。
  • 通过web提供的rpc接口来访问数据库限定数据库访问点仅通过web进行容易做多类型的数据库的支持比如从sqlite迁移到mysql。

缺点:

  • 需要web提供特别的rpc接口web服务和core服务的交互增加了。

目前的core服务中直接访问数据库涉及到

  • 生成会话ID需要根据认证ID获取认证信息
  • 更新当前连接状态(连接、结束,出错等);

可改为web查询数据库然后将数据传递给core服务。_但是这里有一个潜在的安全漏洞认证信息中包含的私密信息会在网络上传播了。_解决的办法是如果core和web在同一台主机上没有漏洞如果不在同一台主机上core需要配置一个密钥放在配置文件中web配置时需要输入此密钥才能与指定的core连接且传输隐秘数据时使用此密钥进行加密。

会话ID

关于会话ID的有效期现有版本是设置一个引用计数对于rdp可以使用两次而ssh只能使用一次原因是rdp连接时通常第一次连接用于协商子协议然后会断开并立即重连并使用确定好的子协议进行后续操作。

改进的方法是为一个会话ID设置一个标志及一个最后活动时间会话ID刚生成时标志为false调用take_session()时设置为true当连接断开时或者未能连接成功时重置为false并更新最后活动时间为当前时间。标志为true时不允许重复take_session()每次调用take_session()时检查标志为false的回话ID的最后活动时间如果超过5秒未活动则删除此会话ID。

这样做可以适配各种连接方式。

用户体验

纯净安装基本上就是复制文件没有别的操作了。安装完成后提示teleport的运维管理WEB服务的URL让用户进行访问。

纯净安装

尽可能使用WEB-UI进行配置

完全新安装的服务端仅启动了web服务但是web服务的监听IP和端口如何设定监听IP可以设置为在0.0.0.0上监听但是端口如何设定。因此端口必须用配置文件的方式进行设定。其次对于log级别、log输出路径等设定涉及到系统的调试可能web服务根本就启动不了所以无法通过web界面进行设置因此也需要通过配置文件的方式设定。

core与web之间通过JSON-RPC方式进行通讯core并不直接操作数据库而是转由web提供RPC接口进行操作。web服务并不直接读取core的配置而是通过core提供的RPC接口获取或修改其配置。

core服务提供RPC接口能够获取其内部状态例如当前连接数、网络IO负载等等。

可以通过RPC接口停止或重启core和web服务。

web服务启动后访问登录页面但是如果缺少配置数据表就跳转到配置页面。

  • 设定所用数据库可选本地sqlite或者MySQL如果是MySQL需要给出root权限或者指定有权限访问的数据库和用户名及密码以及teleport相关表的前缀默认为“tp_”注意这些信息必须存放在配置文件中因此配置文件需要支持写入操作
  • 创建配置数据库(包括用户表、配置表等);
  • 设定管理员密码管理员用户名固定为admin
  • 设置core服务的地址和端口默认是本机127.0.0.1端口包括RPC端口、SSH/RDP/Telnet端口等
  • 设定core服务存放日志回放记录文件的目录地址
  • core和web的配置信息均存放在.ini配置文件中方便特定情况下用户手工编辑

安装时需要用户选择安装core还是web还是二者皆安装。

安装完成后core服务和web服务均会启动在第一次启动时需要创建config数据库里面是一堆空表只有用户表里面有一个管理员账号admin安装部署人员可以使用此账号登陆系统。

需要增强服务的自检功能例如端口已经被占用等需要在日志中给出明确的错误信息。另外考虑到将来core服务可能部署到多个主机上以提升承载能力所以web需要访问core的数据时包括取日志回放文件数据等均使用RPC接口进行。

第一次登陆系统,会自动跳转到配置向导界面,让用户一步一步进行服务器配置。