VMware ESXi主机在VMware vSphere虚拟基础架构的管理中起到至为关键的作用,为VMware vSphere主机上的用户设置密码复杂性也是最为基础的安全策略之一。
本文的目的是展示如何在VMware ESXi主机上自动化设置安全策略。这将减少保护软件定义的数据中心的总体操作费用。
密码复杂性策略配置过程
我们将使用PowerCLI在运维机器上运行一个脚本(passwd.ps1)来设置集群中所有主机的密码策略。使用PowerCLI进行批量修改主机密码策略是一种更快、更简单、要求更低的方法。因此,对于拥有大量主机的环境(本篇示例为两台主机),在主机上进行批量更改比在每个主机上的web client上进行更改更为高效。
1、环境准备,通过离线的方式安装。也可通过PowerShell在线安装Powercli(速度比较慢)不再过多赘述,可自行网上查找安装方法。
- 下载PowerCLI离线zip包,解压到C:\Windows\System32\WindowsPowerShell\v1.0\Modules目录下,导入VMware.PowerCLI模块。
2、报错“在此系统上禁止运行脚本...”。执行如下查看“执行策略”命令,如下图,可看到没有权限执行(不允许执行任何脚本)。
打开执行脚本权限:可看到系统会提示“安全风险之类的提示”,输入“Y”执行策略。
3、打开PowerShell(实验环境为Win10操作系统)
4、找到passwd.ps1脚本(本文后面会详细讲解脚本命令,很简单几行)
5、编辑脚本,需要主要的地方无非就这四点(暂时不管脚本什么意思,配置好用户名密码)
6、执行脚本,发现再次出现错误o(╥﹏╥)o
查看错误信息,发现是安全证书验证问题,只需要设置“验证证书”为Ignore(忽略)即可。
7、执行成功,可以看到输出了vCenter及ESXi主机Name
8、登录ESXi主机验证密码策略是否修改成功?
[root@localhost:~] cat /etc/pam.d/passwd
脚本解析
#Set password policy
Connect-VIServer -server <vCenter地址或域名> -user administrator@vsphere.local -password <密码>
#获取连接到的ESXi主机
$VMHosts = Get-VMHost | Where {$_.ConnectionState -eq "Connected"}
#设置密码策略
$passwordpolicy = "retry=3 min=disabled,disabled,disabled,7,7"
#循环ESXi主机,并配置密码策略
foreach ($VMHost in $VMHosts) {Get-AdvancedSetting -Entity $VMHost -Name Security.PasswordQualityControl |Set-AdvancedSetting -Value $passwordpolicy -Confirm:$false}
ESXi中pam_passwdqc密码质量控制模块
在Linux中进行身份或是状态的验证程序是由PAM来进行的,PAM(Pluggable Authentication Modules)可动态加载验证模块,因为可以按需要动态的对验证的内容进行变更,所以可以大大提高验证的灵活性。
pam_passwdqc模块是PAM的一个简单的密码强度检查模块。除了检查常规密码外,它还支持口令,并可以提供随机生成的口令。
在上面脚本代码中,我们配置了$passwordpolicy = "retry=3 min=disabled,disabled,disabled,7,7"。
简单介绍传递给模块的参数:
min=N0,N1,N2,N3,N4
N0, 只包含由一个字符类中的字符组成的密码。字符类包括:数字、小写字母、大写字母和其他字符。
N1, 只包含由两个字符类的字符组成的密码。
N2, 密码中识别出了常用单词,这里就可以设置最小长度为多少位。
N3和N4分别用于包含三个字符类和四个字符类组成的密码。
...
在本次实验中,min=disabled,disabled,disabled,7,7表示什么意思呢?
拒绝一个字符类、两个字符类组成的密码
拒绝含有常用单词的密码
包含三类字符以上并且长度不少于7位。