VMware released the <a href="http://communities.vmware.com/docs/DOC-19605">vSphere 5.0 Hardening Guide</a> this month and I wanted to take the opportunity to blog my way through it in order to increase my familiarity, heighten its visibility, and provide a forum for discussion of the recommendations and methods to implement an assessment in your own environment.

Since the hypervisor is the heart of your datacenter, let's start with the ESXi guidelines:
<ul>
	<li>Guideline Title: Use Active Directory for local user authentication
<ul>
	<li>Title: enable-ad-auth</li>
	<li>Discussion: The credentials to your ESXi hosts are among the most sensitive in your entire datacenter. The root password should only be given to personnel that have an explicit need for it. Other users that need to login to hosts outside of vCenter can have permissions granted to their Active Directory account. David Davis has a <a href="http://blogs.vmware.com/esxi/2011/01/esxi-41-active-directory-integration.html">great video</a> demonstrating the process. By default, an AD group names "ESX Admins" is checked for and all members will have full rights to all hosts.</li>
	<li><a href="http://pubs.vmware.com/vsphere-50/index.jsp?topic=%2Fcom.vmware.vsphere.security.doc_50%2FGUID-25A5EB3B-7BB1-4B0B-9323-926AE6F0667F.html">Official VMware documentation</a></li>
</ul>
</li>
	<li>Guideline Title: Establish a password policy for password complexity
<ul>
	<li>Title: set-password-complexity</li>
	<li>Discussion: This setting is used to enforce strong passwords for local accounts. You know, the local accounts you're not using since all your hosts are joined to AD, right? But seriously, this is a great setting to use to force users to pick strong passwords, even if your hosts have no local users. Configuration drift happens, so let's plan ahead and make sure these users will have strong passwords. Using vi, you'll edit the file /etc/pam.d/passwd and modify the third line. The default value is "password requisite /lib/security/$ISA/pam_passwdqc.so retry=3 min=8,8,8,7,6". The retry value controls how many attempts users get to pick a strong password. The last 5 numbers control your desired complexity settings, in the following order and referencing four character classes (uppercase letters, lowercase letters, numbers, and symbols/special characters):
<ul>
	<li>The first digit is the minimum length for passwords containing characters from 1 of the classes (least complex, e.g. using "password" as your password). You'll want this to be a very large number.</li>
	<li>The second digit is the minimum length for password containing characters from 2 of the classes. You'll also want this to be a very large number.</li>
	<li>The third digit is the minimum length of SSL certificate passphrases</li>
	<li>The fourth digit is the minimum length for password containing characters from 3 of the classes. Now were getting into reasonable passwords, so allow whatever reasonable length your organization permits.</li>
	<li>The fifth digit is the minimum length for password containing characters from 4 of the classes (most complex, e.g. using "p4$wOrd" as your password"). Same as the previous line.</li>
</ul>
</li>
	<li><a href="http://pubs.vmware.com/vsphere-50/index.jsp?topic=%2Fcom.vmware.vsphere.security.doc_50%2FGUID-942E8E23-D2CE-49B0-8B39-F31EF6D0519B.html">Official VMware documentation</a></li>
</ul>
</li>
	<li>Guideline Title: Verify Active Directory "ESX Admin" group membership.
<ul>
	<li>Title: verify-admin-group</li>
	<li>Discussion: now that our hosts are joined to AD (first bullet point above), we want to audit the membership of "ESX Admins" since those users will automatically have root-level permissions to our hosts. This is a manual check, but you'll also want to automate it so that it can run regularly. You can write a scheduled Powershell script to read the group membership and email you the contents on a schedule, or products like ADAudit Plus from ManageEngine are perfect for this task and can email you only when group membership changes.</li>
	<li><a href="http://kb.vmware.com/kb/1025569">Official VMware documentation</a></li>
</ul>
</li>
	<li>Guideline Title: Ensure that vpxuser auto-password change meets policy.
<ul>
	<li>Title: vpxuser-password-age</li>
	<li>Discussion: ESXi contains a built-in user account called vpxuser. This account has Administrator-level permissions to the local host and is used by vCenter to execute tasks. vCenter sets this password and changes it automatically every 30 days. If your organization requires more frequent password changes, you can change this from the vSphere client by selecting "Administration -&gt; vCenter Server Settings -&gt; Advanced Settings" and changing VirtualCenter.VimPasswordExpirationInDays to your desired interval.</li>
	<li><a href="http://pubs.vmware.com/vsphere-50/index.jsp?topic=%2Fcom.vmware.vsphere.security.doc_50%2FGUID-20FA4157-F371-4922-92E8-63822FA808FA.html">Official VMware documentation</a></li>
</ul>
</li>
	<li> Guideline Title: Ensure that vpxuser password meets length policy.
<ul>
	<li>Title:vpxuser-password-length</li>
	<li>Discussion: Similar to the guideline above, this check confirms that the password length for the vpxuser password is long enough to comply with your organization's security policy. By default it is set to 32 characters. To increase this password length, modify the "vpxd.hostPasswordLength" value in the vpxd.cfg file. On Windows this file is located at C:\Documents and Settings\All Users\Application Data\VMware\VMware VirtualCenter\vpxd.cfg  or on the vCenter Server Appliance you'll find it at /etc/vmware-vpx/vpxd.cfg.</li>
	<li><a href="http://pubs.vmware.com/vsphere-50/index.jsp?topic=%2Fcom.vmware.vsphere.security.doc_50%2FGUID-20FA4157-F371-4922-92E8-63822FA808FA.html">Official VMware documentation</a></li>
</ul>
</li>
</ul>
That's it for today! I'll see you all back here tomorrow to continue our discussion on the vSphere 5.0 Hardening Guide.