ریست پسورد root در ESXi

فراموشی کلمه عبور چیزیست که متأسفانه برای همه اتفاق می‌افتد و اصلاً به همین دلیل است که نرم افزارهای مدیریت پسورد وجود دارند و حتماً می‌دانید ذخیره پسوردها در Yellow Sticky Notes کار اصلاً جالبی نیست، مگر اینکه کلاً بحث امنیت برای شما اهمیتی نداشته باشد.

فرض کنید ساعت ۱۱ شب تماسی مبنی بر وجود مشکل در یکی از هاست‌های دیتاسنتر، دریافت می‌کنید و پس از بررسی متوجه می‌شوید که مشکل با ریستارت 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 شده پسورد حذف می‌شود، اصولاً نباید مشکل یا خطری در استفاده از این روش وجود داشته باشد و تا بحال هیچ مشکلی مشاهده نشده است.