سلام. چند وقت پیش به ذهنم اومد که این لینوکس چجوری و کجا پسورد کاربر هایی مثل خودمون و root رو نگه می داره که دوباره می تونیم لاگین کنیم. اگه شما هم درباره این موضوع تعجب کردید، ادامه این مطلب رو بخونید.
خب تمام این دیتا های پسورد و یوزرنیم ها توی etc/shadow هستش. البته به صورت hash شده. hashing در واقع یه جور رمزنگاری هستش که شما نمی تونید رشته رمزنگاری شده، رشته اصلی رو در بیارید.
خب اول با دسترسی root میایم فایل etc/shadow رو نگاه می کنیم:
خب یه همچین چیزی میده که کلی یوزر هستش. پس بگذارید به جای دستی پیدا کردن یوزر خودمون بیایم با grep پسورد هش شده خودمون رو بگیریم:
خب حالا پسورد خودم رو که با اکانت mehan هستم گرفتیم. یه ذره توضیح بدم:
این پسورد از ۴ تا قسمت تشکیل شده:
قسمت اول که اینجا 6$ هستش. این میگه سبک رمز نگاری چیه. در کل اینا می تونن برای قسمت اول باشن:
که معمولا اکثر لینوکس ها مثل مال من از sha-512 استفاده می کنن.
قسمت دوم که اینجا $PUlUgF9iZoN/QA4. هستش. این یه چیز به نام salt هستش که کاری نداریم چیه ولی باعث میشه رمزنگاری قوی تر شه.
قسمت سوم که اصلشه بعد اینه. اگه دقت کنید همه این قسمت ها با $ شروع می شن. خب قسمت سوم، هش شده salt به علاوه خود اصل پسورد تون هستش. الگوریتمش هم همون قسمت اولیه هستش.
قسمت چهارم هم که چند تا دونقطه داره، تاریخ تغییر پسورد به سبک یونیکس تایم هستش.
خب حالا ما تو لینوکس دقیقا چجوری لاگین می کنیم وقتی نمیشه رمز رو decrypt کرد؟ خیلی ساده. لینوکس برای ما میاد و پسورد ورودی رو encrypt می کنه و با اون چیزی که تو فایل هستش مقایسه می کنه. اگه اوکی بود که هیچی وگرنه نمی ذاره لاگین کنیم.
حالا چجوری رمز ورودی رو encrypt می کنه؟
می تونیم از دستور زیر استفاده کنیم:
میایم میگیم از ۶ که درواقع الگوریتم رمزنگاری هستش استفاده کن، salt مون رو می دیم، بعد اصل پسورد رو می دیم و اگه دقت کنید دقیقا همون هش قبلی رو میده.
خیلی ممنون که وقت گذاشتید و خواندید. لطفا لایک کنید و اگه سوالی دارید کامنت کنید.
نوشته های قبلی:
منبع: