Linux云主机初始登录密码修改方案




原文地址:http://aspirer2004.blog.163.com/blog/static/1067647201452624733337/

目前我们的虚拟机创建后的密码是在制作镜像时指定的,所以存在一个安全风险,一旦一台云主机的密码被破解,所有云主机都面临安全风险,不过由于我们已经禁用了ssh方式密码登录,大部分虚拟机都位于内网,这种风险目前看来比较小,但为了更加安全,以及满足公有云用户潜在的需求,所以后续可能需要支持用户自定义登录密码,或者修改初始密码为随机值,为此我这两天分析了一下相关实现方案,下面是一些总结。
类似风险还有VNC登录没有加密,用户只要获取经过认证的VNC窗口链接,即可使用用户名密码登录虚拟机,较好的方案是对VNC本身加密,首先要通过VNC的认证之后,才能接触到虚拟机console,这个问题已经有初步方案,还没安排实现。
Windows虚拟机的初始密码修改暂时没有分析,不过应该有如下几种:
1)cloudbase-init支持,类似下面的cloudinit方案 (推荐方案)
2)镜像制作的时候指定下次登录时密码过期,强制用户修改
3)使用agent修改
下面的方案在debian7上验证通过,并且仅可以在虚拟机创建前修改,创建后无法修改。
方案1:
使用类似文件注入的adminPass注入,不需要在虚拟机里面安装agent或cloudinit,
需要注意的事项:
1)cloudinit配置文件不能lock_passwd,也即配置为false,disable_root:false,或者不安装cloudinit
2)修改nova.conf,libvirt_inject_password = True
使用方法:创建虚拟机时在api传入adminPass参数,如不传则随机生成,并在响应结果中返回,但不会保存在nova数据库,用户必须牢记。
 
方案2:
创建虚拟机的api中传入user-data参数,配合cloudinit修改虚拟机密码:
虚拟机里面cloudinit的/etc/cloud/cloud.cfg配置文件中要有如下内容:
cloud_config_modules:
– set-passwords
可以修改默认用户,根据/etc/cloud/cloud.cfg配置文件中的
users:
– default
default_user:
name:root
来确定默认用户是那个。
user-data内容:
注意#cloud-config是内容格式的标识,不是注释,不能删除
#cloud-config
password: mysecret
chpasswd: { expire: False }
ssh_pwauth: True
最后一行可删除,禁用ssh密码登陆。
或者批量修改用户密码:
#cloud-config
chpasswd:
list: |
root:xxxx
debian:yyyy
expire: False
前提是要修改用户必须存在。
#cloud-config
chpasswd:
list: |
user1:password1
user2:RANDOM
expire: True
ssh_pwauth: [ True, False, “” or “unchanged” ]
其中RANDOM表示随机生成密码,expire表示是否在首次登陆的时候过期,如果为True,则用户首次登陆的时候必须修改密码。
ssh_pwauth默认值是不修改ssh密码认证方式,也即保持镜像制作时的配置。
如果ssh_pwauth设置为False,则密码认证方式只能通过VNC登录,不能ssh。

使用方法:nova boot 加上–user-data userdata.yaml参数,userdata.yaml内容见上面的#cloud-config