OpenStack学习笔记之——浅谈Nova中的VNC

声明:

本博客欢迎转载,但请保留原作者信息!

作者:华为云计算工程师 林凯

团队:华为杭州研发中心OpenStack社区团队



VNC (Virtual Network Computer)是虚拟网络计算机的缩写。VNC 是一款优秀的远程控制工具软件,由著名的 AT&T 的欧洲研究实验室开发的。VNC 是在基于 UNIX 和 Linux 操作系统的免费的开源软件远程控制能力强大,高效实用,其性能可以和 Windows 和 MAC 中的任何远程控制软件媲美。

Openstack在Nova组件中集成了VNC功能,在运用VNC功能的过程中,逐渐产生了以下两点疑问:

(1)    VNC鉴权问题

(2)    VNC日志信息问题

 

1.VNC鉴权问题

用户在Openstack环境下通过nova get-vnc-console myTestVm novnc命令来获取URL信息。URL信息如下所示

+-------+-----------------------------------------------------------------------------------+

| Type | Url |

+-------+-----------------------------------------------------------------------------------+

| novnc |http://192.168.28.4:6080/vnc_auto.html?token=f5abd84d-708f-4486-af61-40c6e5a876c0|

+-------+-----------------------------------------------------------------------------------+

通过查看Nova源码,发现在这个过程中,Nova会将token信息存储入memcache的缓存中,且它是开放的,进入不需要任何鉴权,于是就可能引发这样一个问题:Openstack的运维人员或者其他人员均可以很容易地在memcache中,获取token信息,进而通过VNC功能对用户的虚拟机进行操作,这种情况明显是比较危险的。

2.VNC日志信息问题

在运用和调试Openstack的VNC功能的过程中,有时候需要查看VNC的日志信息,但是在日志目录下却找不到VNC的日志文件,那么VNC是不是就没有日志信息呢?

通过对Openstack的源码走读,发现在Openstack中,在运行获取VNC的URL命令之后,会在/var/log/nova/nova-consoleauth.log中存储一系列的相关信息,其中也包括token等信息,同样其中的token信息同样是以明码的形式写入到日志文件,这样同样会造成安全问题,但是这个比较好解决,之后对log中的token信息进行加密即可,因为log中的内容仅在调试等时候观察用,不需要做其他用途。

日志信息如下所示:

 

3.VNC鉴权问题解决方案

对于1中提到的memcache的鉴权问题,有几个改进的想法如下:

方案1:对memcache和log中的token信息进行加密

方案2:将VNC的token信息的使用次数限制为1次,即在用户使用过一次VNC的URL信息之后,直接将memcache中token信息删除,防止被其他人员利用;

   方案3:在VNC的token信息基础上加上其他认证信息,每次使用VNC都要验证这个信息,这个信息不存储在memcache中。

 

对比以上三种方案,发现方案1的方案为最优的选择

方案2的缺点:

如果其他人员比用户更快地获取到token信息,这种情况是有可能发生的,因为没有VNC信息的有效时间是10分钟,所以用户并不一定会很快去使用VNC信息(而且如果“其他人员”有心的话,肯定有办法比用户更快),这样就导致有个问题出现,VNC信息被“其他人员”给用了,用户反而不能使用这个VNC信息,只能重新申请。而且token次数被限制后,用户每次都要重新申请一次VNC信息。

方案3的缺点:

需要重新设定鉴权信息,相对于方案1来说,较为繁琐,对原有程序改动也较大。

方案1的优点:

只要将VNC的token信息加密存储到memcache中,然后在读取的时候,将加密的信息取出进行解密即可。

 

具体的实现方法如下:

1)     在authorize_console函数将token加密之后存储入memcache中

OpenStack学习笔记之——浅谈Nova中的VNC_第1张图片

2)     在check_token函数中首先将获取的token加密之后作为从memcache中取出token信息的key,然后去查找memcache中是否存在对应的token信息。

OpenStack学习笔记之——浅谈Nova中的VNC_第2张图片

3)将加密的token信息写入日志之后,将token信息解密后给相关的方法使用。

OpenStack学习笔记之——浅谈Nova中的VNC_第3张图片


以上是个人对Openstack中的VNC功能的一些拙见,其中必然有错误和不足之处,希望大家能够多多指出,谢谢。

你可能感兴趣的:(OpenStack学习笔记之——浅谈Nova中的VNC)