如何修复openstack环境的vnc弱密码漏洞
问题:openstack云环境经常被扫出来5900-5999端口范围内的弱密码/空密码,怎么解决呢?!
问题分析:
openstack环境的物理机VNC端口能够自由访问,使用noVNC后没有退出终端的习惯,往往都是用完了就直接关闭窗口,如果内网里面有一些script kiddie随时都能将我们线上的虚拟机vnc端口扫出来干些坏事,存在安全风险,因此我们需要针对添加密码访问vnc。
如何添加vnc密码:
1、针对新建虚机vnc弱密码/空密码问题
1)找到/usr/lib/python2.7/dist-packages/nova/virt/libvirt/config.py文件,直接在返回的dev列表里面添加个passwd的value,而value就是VNC的访问密码
def format_dom(self):
dev = super(LibvirtConfigGuestGraphics, self).format_dom()
dev.set("type", self.type)
if self.autoport:
dev.set("autoport", "yes")
else:
dev.set("autoport", "no")
if self.keymap:
dev.set("keymap", self.keymap)
if self.listen:
dev.set("listen", self.listen)
dev.set("passwd", "Zenap_123")
return dev
2)修改过后重启nova-compute服务,即在下次创建虚拟机的时候生效,其结果如下:
![](https://img.haomeiwen.com/i6993402/4dc4340ecc61cead.png)
2、针对历史存在虚机弱密码/空密码问题
上述方法只能解决当前openstack环境新建虚机弱密码/空密码的问题,针对已有虚机,上述方法无法修复。
对于历史存在的虚机,如何解决vnc弱密码/空密码漏洞的问题呢?!
1)查看虚机的virsh id,通过nova show [虚机uuid]|grep instance命令查到,例如:
root@controller:/home# nova show ac91a9cb-789f-4f13-ba1b-b2499895ab21|grep instance
| OS-EXT-SRV-ATTR:instance_name | instance-00000075 |
2)进入/etc/libvirt/qemu目录,找到虚机对应的instance-xxxx.xml文件(例如instance-00000075.xml),在文件中listen这一行添加passwd即可
<graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0' keymap='en-us' passwd='Zenap_123'>
该方法可以临时解决历史虚机弱密码/空密码漏洞问题,一旦虚机重启,那么libvirt.xml文件中的密码则依然会被置为空。那么如何解决呢?!
建议可以编写一个脚本:搜索libvirt.xml文件,无passwd字段的文件添加passwd。将该脚本运行添加到定时任务中。