ESXi 7.0 U2 ve sonraki sürümler için root şifresi nasıl sıfırlanır?

7.0 sürümünden itibaren, U2 güncellemesiyle birlikte bazı ESXi yapılandırma dosyalarının kaydedilme şekli değişti. Bu dosyalardan biri de ESXi kullanıcı parolasıydı.

VMware (ve daha yakın zamanda Broadcom) ESXi yazılım parolasını sıfırlamanın mümkün olmadığını ve yönetici parolayı unutursa yeniden yüklemesi gerektiğini (ESXi’nizi bir vCenter’a bağlamadıysanız ve bir ana bilgisayar profili kullanamıyorsanız) resmi olarak belirtir.

Bugün sizlere yeni versiyonlar için olan yöntemi (test ortamımızda 9. versiyona kadar test edilmiş olan) sunuyoruz.

1- Sunucunuzu ISO sürümü 7.0U2 veya üzeri ile başlatın. (Tercihen sunucunuzda yüklü olan sürümü kullanın)

2- ESXi kurulum diskinize önyükleme yaptıktan ve Yükleyici görüntülendikten sonra, Alt+F1 tuşlarına basarak DCUI’ye girin ve oradan root kullanıcı adı ve şifre olmadan shell’e giriş yapın.

3- DCUI üzerinden çalışmakta rahat değilseniz (örneğin kopyala/yapıştır yapamıyorsanız), SSH servisini başlatıp DCUI üzerinden bağlanabilirsiniz.

Öncelikle, ESXi’nizde IP Adresinin bir şekilde ayarlandığından emin olun. Varsayılan olarak, DHCPv4 kullanıyorsanız, ESXi’niz IPv4 üzerinden bir IP adresi alacaktır. IPv6’da ise, SLAAC ve EUI64 yöntemini kullanarak size bir adres atayacaktır; bunu şu şekilde görebilirsiniz:

localcli network ip interface ipv4 address list
localcli network ip interface ipv6 address list

 

 ederseniz, bunu şu şekilde yapabilirsiniz:

localcli network ip interface ipv4 set --interface-name vmk0 --ipv4 YOUR_IPv4_Address --netmask YOUR_NETMASK --type static
localcli network ip interface ipv6 address add --interface-name vmk0 --ipv6 YOUR_IPv6_ADDRESS/PREFIX

 

Gördüğünüz gibi vmk0 arayüzüne bir IP adresi atıyorum.

SSH’yi etkinleştirmeden önce, kök kullanıcı için geçerli bir parola belirlediğinizden emin olun. Bunu yapmak için şu komutu kullanın:

passwd root

Eğer şifre belirlemeden SSH servisini aktif ederseniz, şifresiz root kullanıcısı ile ESXi’ye giriş yapabilirsiniz ki bu özellikle public IP adresi kullanıyorsanız güvenlik açısından oldukça tehlikelidir.

Son olarak SSH’yi etkinleştirmek için aşağıdaki komutu kullanın:

/etc/init.d/SSH start

SSH Server’ı sizin adınıza 22/tcp portunda çalıştıracaktır.

4- Kurulum diski varsayılan olarak sizin için bölümleri kendisi bağlar, bunu şu yolda görebilirsiniz:

/vmfs/volumes/

5- İlgilendiğimiz bölümler BOOTBANK1 ve BOOTBANK2 olarak etiketlenmiş ve FAT türündedir. ESXi’nizi hiç güncellemediyseniz, BOOTBANK2 boş olacaktır; ancak güncelleme yaptıysanız, ESXi her başarılı güncellemede önyükleme bölümünü değiştirecektir. Önyükleme bankalarının ayrıntılarına daha fazla girmeyeceğim ve bundan sonra ESXi’nizin BOOTBANK1’den önyükleme yaptığını varsayacağım.


%100 emin istiyorsanız; orijinal ESXi’nizi bolmakaşlatın ve önyükleyici 5 saniye beklerken Shift+O tuşlarına basın ve önyükleyici komut satırında ekranın alt kısmındaki bootUUID değerini not edin ve son olarak ISO ile sunucuyu başlattıktan sonra bu komutu kullanın

localcli storage filesystem list

6- Kullanıcı parolaları da dahil olmak üzere ESXi ayarları state.tgz dosyasında saklanır. ESXi’nin daha yeni sürümlerinde, bu dosyayı açarsanız, içinde iki dosya bulunur: biri encryption.info, diğeri local.tgz.ve.

Ben bu komutları kullanıyorum.

mkdir /tmp/humatech
cd /tmp/humatech
cp /vmfs/volumes/BOOTBANK1/state.tgz .
tar x -z -f state.tgz

ESXi’nin eski sürümlerinde bu dosya local.tgz içeriyordu.

Not: Bootbank dosya sistemi FAT olduğundan, oraya çıkarırsanız dosya izinlerini kaybedersiniz. Ben izinleri kaybetmemek için bunu tmp’de yaptım.

local.tgz.ve dosyası, VMware’in zarf dosyası olarak adlandırdığı ve şifreleme uygulanan bir dosya türüdür. Bu nedenle, artık dosyayı çıkarıp içeriğini eskisi gibi görüntüleyemez veya değiştiremezsiniz.

encryption.info dosyası, içeriği şifreleme modunuza bağlı olan düz metin dosyasıdır. (Şu anda NONE veya TPM olabilir)

Donanımınız destekliyorsa ve NONE modundan daha güvenli TPM moduna geçmek istiyorsanız, parolanızı sıfırladıktan ve ESXi’nize giriş yaptıktan sonra şu komutlardan birini kullanabilirsiniz:

localcli system settings encryption set --mode TPM
esxcli system settings encryption set --mode TPM

Sizlerle paylaştığımız yöntem, hem NONE hem de TPM modlarında şifrenizi sıfırlamanıza olanak tanır.

local.tgz.ve dosyasının şifrelenmesi hakkında bilgi almak istiyorsak şu komutla bunu yapabiliriz:

crypto-util envelope describe local.tgz.ve

Bizim için en önemlisi bu dosyayı şifrelemek için kullanılan KeyID’dir.

Bu anahtar şu anda anahtar önbelleğinizde bulunmuyor ve ESXi’ye yapılandırmasını şifrelemek için hangi anahtarı kullandığını sorarsanız, ISO önyükleme işlemi sırasında oluşturulan rastgele bir anahtar verecektir:

crypto-util keys getkidbyname ConfigEncryptionKey

Bu genellikle local.tgz.ve dosyasını şifresini çözmek için ihtiyaç duyduğumuz keyID ile aynı değildir.

ISO’dan başlatılan ESXi’ye encryption.info dosyasındaki bilgileri kullanarak istediğimiz anahtarı Anahtar Önbelleğine eklemesini söyleyelim.

localcli --plugin-dir=/usr/lib/vmware/esxcli/int system settings encryption stop
localcli --plugin-dir=/usr/lib/vmware/esxcli/int system settings encryption setup -c encryption.info
localcli --plugin-dir=/usr/lib/vmware/esxcli/int system settings encryption start

Bundan sonra ESXi’ye yapılandırmasını şifrelemek için hangi anahtarı kullandığını ikinci kez sorarsanız, ihtiyacımız olan aynı keyID’yi döndürecektir.

7- Bir sonraki adımda local.tgz.ve dosyasının şifresini çözeceğiz.

crypto-util envelope extract --aad ESXConfiguration local.tgz.ve local.tgz

8- local.tgz dosyasını çıkartın.

mkdir local
tar x -z -f local.tgz -C local
cd local

9- Dikkatli baktığınızda bu arşivde artık aşağıdaki dosyaların bulunmadığını göreceksiniz.

etc/passwd

etc/shadow

Bunun nedeni, VMware’in artık şifreyi bu dosyada saklamaması ve bunu adresi şu olan bir sqlite veritabanına taşımasıdır:

var/lib/vmware/configstore/backup/current-store-1

Ve bu komutla kullanıcılara ait saklanan şifre karmalarını görebilirsiniz.

/usr/lib/vmware/sqlite/bin/sqlite3 var/lib/vmware/configstore/backup/current-store-1 \
"SELECT * FROM Config WHERE Component='esx' AND ConfigGroup='authentication' \
AND Name='user_accounts' AND Identifier='root'"

10- Aşağıdaki içerikleri içeren bir dosya oluşturun.

UPDATE Config SET UserValue='{"name":"root","password_hash":"$6$OuBJHTuaUlOIkE/k$p2fCVL5q5kniGsWYo1xU4Tzct0ZJ7hFQeJH2z9c5F/srN2hQkBKf/lTepTZHwJqRim48vNJ9Meky3E5S0amnL0","description":"Administrator"}' WHERE Component='esx' AND ConfigGroup='authentication' AND Name='user_accounts' AND Identifier='root'

Bunu oluşturmak için vi kullanıyorum ve şu adrese kaydediyorum:

vi /tmp/humatech/reset-password.sql

Eğer vi’yi nasıl kullanacağınızı bilmiyorsanız, dosyayı işletim sisteminizdeki favori metin düzenleyicinizde oluşturabilir ve SFTP kullanarak ESXi’nize aktarabilirsiniz. (Örneğin, FileZilla veya WinSCP kullanabilirsiniz)

11- SQLite’a sorgumuzu çalıştırmasını söylüyoruz:

/usr/lib/vmware/sqlite/bin/sqlite3 var/lib/vmware/configstore/backup/current-store-1</tmp/humatech/reset-password.sql

Bu, veritabanındaki karmayı güncelleyecektir ve 9. adımdaki komutla değişikliği doğrulayabilirsiniz.

Size verdiğim bu hash password kelimesi içindir .

12- Dosyaları tekrar arşivleyip yeni bir local.tgz dosyası elde ediyoruz:

tar c -z -f /tmp/humatech/local-new.tgz `tar t -z -f /tmp/humatech/local.tgz`

13- Şimdi yeni dosyamızı tekrar anahtarımızla şifreliyoruz.

cd /tmp/humatech/
key_id=`crypto-util keys getkidbyname ConfigEncryptionKey`
mv local.tgz.ve local-old.tgz.ve
crypto-util envelope insert --aad ESXConfiguration --id ${key_id} local-new.tgz local.tgz.ve

14- Yeni bir state.tgz dosyası oluşturuyoruz.

mv state.tgz state-old.tgz
tar c -z -f state.tgz local.tgz.ve encryption.info

15- Dosyayı bootbank’a aktarıp var olan dosya ile değiştiriyoruz.

cd /vmfs/volumes/BOOTBANK1
mv state.tgz state.tgz.bak
mv /tmp/humatech/state.tgz .

Ayrıca emin olmak için orijinal state.tgz dosyasının yedeğini de aldım.

Artık sunucunuzu yeniden başlatabilir ve root kullanıcısı ve password şifresiyle oturum açabilirsiniz.

Umarım herkes için faydalı olur.