فراموشی کلمه عبور چیزیه که متأسفانه برای همه اتفاق می‌افته و اصلاً به همین دلیل هست که نرم افزارهای مدیریت پسورد وجود دارن و حتماً می‌دونید ذخیره پسوردها در Yellow Sticky Notes یا فایل Text اصلاً کار جالبی نیست، مگر اینکه کلاً بحث امنیت برای شما اهمیتی نداشته باشه.
فرض کنید ساعت ۱۱ شب تماسی مبنی بر وجود مشکل در یکی از هاست‌های دیتاسنتر دریافت می‌کنید و پس از بررسی متوجه می‌فهمید که مشکل با ریستارت Management Services برطرف میشه. پسورد رو وارد می‌کنید و خطای کذایی نادرست بودن پسورد برای شما نمایش داده می‌شه. شاید اشتباه تایپی بوده! پس چندین بار پسورد رو اشتباه وارد می‌کنید تا در نهایت اکانت شما Lockout می‌شه. خب، در بهترین حالت احتمالاً شما یا هم تیمی شما پسورد رو تغییر داده‌ اما توی Password Manager آپدیت نکرده‌. طبق گفته VMware تنها راه حل پیشنهادی، نصب مجدد ESXi هست، مگر اینکه هنوز روی سرور خودتون از ESX استفاده می‌کنید که چنین چیزی خیلی بعیده.

در دوران قبل از معرفی ESXi، هایپروایزر ESX یک سرویس کنسول داشت که امکان بوت در حالت Single-User را برای شما فراهم می‌کرد و می‌تونستید از طریق Bash پسورد رو تغییر بدید. اتفاقاً این این روش همچنان برای تغییر پسورد VCSA قابل استفاده است ولی امکان استفاده از اون برای هاست‌های ESXi وجود نداره.

توی این پست، به شما توضیح میدم که چطور با استفاده از یک Live Linux CD پسورد root رو در هاست‌های ESXi خودتون تغییر بدید. VMware به دلیل پیچیدگی این روش رو پیشنهاد و پشتیبانی نمی‌کنه ولی در حقیقت هیچ چیز پیچیده‌ای در مورد اون وجود نداره.

چون ESXi تا حد زیادی شبیه به Linux هست، پسورد root به صورت رمزنگاری شده در etc/shadow/ ذخیره می‌شه. اگر با SSH به هاست خودتون متصل بشید و نگاهی به etc/shadow/ بندازید، چیزی مثل تصویر زیر مشاهده خواهید کرد.

اگر عبارتی که در باکس قرمز رنگ داخل عکس مشخص شده را حذف کنیم، پسورد به null تغییر داده می‌شود. البته واضحه که اگر پسورد رو فراموش کرده باشید امکان SSH به هاست را ندارید، برای همین باید از یک لایو سی‌دی لینوکس استفاده کنید. بوت کردن لایو سی‌دی لینوکس به ما امکان دسترسی و تغییر فایل موردنظر رو میده.

همانطور که می‌دانید، ESXi از چندین پارتیشن استفاده می‌کند. یکی از این پارتیشن‌ها Bootbank نام دارد که فایل‌های اصلی هایپروایزر و تنظیمات هاست در آن قرار گرفته است و زمان بوت در رم لود می‌شود. به صورت پیشفرض می‌توان این پارتیشن را با نام dev/sda5/ پیدا کرد. در واقع فایل etc/shadow/ که به دنبال آن هستیم در فایلی با نام state.tgz به صورت فشرده شده قرار گرفته است که می‌توان آن را در پارتیشن /dev/sda5 پیدا کرد.

برای تغییر پسورد root باید مراحل زیر را طی کرد:

  1. یک Live CD لینوکس دانلود کنید. من از Gparted Live CD استفاده می‌کنم.
  2. فایل دانلود شده را روی CD، DVD یا USB به صورت Bootable قرار بدید و روی سرور بوت کنید.
  3. dev/sda5/ را Mount کنید و فایل tgz را به یک فولدر دیگر انتقال بدید.
  4. فایل tgz را از حالت فشرده خارج کرده و فایل shadow را ویرایش کنید.
  5. مجدداً فایل shadow را فشرده کنید و فایل tgz جدید را جایگزین فایل اصلی کنید.
  6. سرور رو ریبوت کنید.

در ادامه هر مرحله را به صورت جزئی‌تر توضیح میدم.

تنظیم مجدد پسورد root

مراحلی که در ادامه توضیح داده می‌شه، برای ریست پسورد هاست ESXi 6.5 آزمایش شده. البته این روش احتمالاً برای نسخه‌های قبلی هم قابل استفاده بوده و اینکه هاست شما فیزیکی است یا به صورت Nested تفاوتی ندارد.

برای این پست، من از یک هاست ESXi به صورت Nested Virtulized استفاده کردم. در ضمن در نظر داشته باشید همونطوری که قبلاً اشاره کردم، بعد از تکمیل مراحل هاست ESXi باید ریبوت بشه، بنابراین اگر در محیط عملیاتی قصد انجام این کارو دارید ناچاراً VMهایی که روی این هاست هستند خاموش می‌شن.(مگر اینکه هاست‌های شما HA باشن.)

مرحله اول

سی‌دی یا فلش مموری Bootable شده را به هاست خودتون وصل و بوت کنید. اگر از Gparted Live استفاده می‌کنید Default Settings را انتخاب کنید.

مرحله دوم

Gparted را باز کنید. دو پارتیشن با حجم ۲۵۰ مگابایت می‌بینید. اگر ESXi رو روی اولین دیسک موجود نصب کرده باشید، پارتیشن موردنظر dev/sda5/ هست. توجه داشته باشید اگر ESXi روی یک USB نصب شده است، ممکنه نام پارتیشن تفاوت داشته باشه.

مرحله سوم

Terminal را باز کنید و دستورهای زیر رو به ترتیب وارد کنید.

sudo su
mkdir /boot /temp
mount /dev/sda5 /boot
cd /boot
cp state.tgz /temp
cd /temp
tar -xf state.tgz
tar -xf local.tgz
rm *.tgz
cd etc

برای ویرایش فایل shadow از vi استفاده می‌کنیم. خطی که با عبارت root شروع شده را پیدا کنید و عبارت Hash شده بین دو کولون رو حذف کنید و بعد برای ذخیره و خروج از vi عبارت wq: را تایپ کرده و Enter کنید.

حالا باید فایل جدیدی که ایجاد کردیم با فایل اصلی جایگزین شود. برای این کار دستورات زیر را در ادامه وارد کنید.

cd ..
tar -cf local.tgz etc/
tar -cf state.tgz local.tgz
mv state.tgz /boot
umount /boot
reboot

مرحله چهارم

بعد از اینکه هاست ESXi شما بالا آمد، با دسترسی root و بدون پسورد از طریق DCUI یا SSH لاگین کنید. یادتون باشه بعد از ورود، حتماً برای root پسورد جدیدی تنظیم کنید و یک جای مطمئن ذخیره کنید.

حرف آخر

چیز دیگه‌ای برای گفتن نیست، جز اینکه شما رو به ذخیره پسوردهاتون با استفاده از یک Password Manager قابل اطمینان، ترغیب کنم. روشی که توی این پست ارائه شد با اینکه توسط VMware پشتیبانی نمی‌شه، تا به حال برای من کاربردی و مفید بوده و با توجه به اینکه تنها مقدار Hash شده پسورد حذف می‌شه، اصولاً نباید مشکل یا خطری در استفاده از این روش وجود داشته باشد و تا به حال هیچ مشکلی از این بابت مشاهده نشده.