استفاده از دستور last در لینوکس – راهنمای کاربردی


چه کسی، چه زمان و از کجا؟ رویههای امنیتی مناسب از ما می خواهند که بدانیم چه کسی به رایانه لینوکسی من دسترسی یافته است. در این نوشته با روش استفاده از دستور last به عنوان راهحلی برای این مسئله آشنا خواهیم شد.
فایل wtmp
لینوکس و دیگر سیستمهای عامل شِبه یونیکس مانند macOS در زمینه گزارشگیری (logging) عملکرد مناسبی دارند. بدین ترتیب جایی در اعماق سیستم، مکانی وجود دارد که در آن همه چیزهایی که میتوانید تصور کنید ثبت میشوند. فایل log که ما به آن علاقهمند هستیم wtmp نام دارد. حرف w اختصاری برای «چه زمان» (When) یا «چه کسی» (Who) است. هیچ کس در مورد آن مطمئن نیست. حروف tmp نیز اختصاری برای عبارت «temporary» (موقت) است ، اما میتواند اختصاری برای timestamp نیز باشد.
آن چه میدانیم این است که wtmp یک فایل لاگ است که همه رویدادهای لاگین و لاگآوت را ثبت و ضبط میکند. مرور دادههای موجود در لاگ wtmp یک گام ابتدایی برای اجرای رویکرد امنیتی در خصوص وظایف مدیر سیستم محسوب میشود. در مورد یک رایانه معمول خانوادگی شاید این موضوع چندان ضرورت امنیتی حادی محسوب نشود، اما این که میتوانید استفاده ترکیبی افراد مختلف از رایانه را مورد بررسی قرار دهید جالب خواهد بود.
برخلاف بسیاری از فایلهای لاگ مبتنی بر متن، wtmp یک فایل باینری است. برای دسترسی به دادههای داخل آن باید از یک ابزار که به این منظور طراحی شده استفاده کنید. این دستور last نام دارد.
دستور last
دستور last دادهها را از لاگ wtmp میخواند و آنها را در پنجره ترمینال نمایش میدهد. اگر عبارت last را وارد کرده و اینتر را بزنید همه رکوردهای فایل لاگ نمایش پیدا میکنند:
Last
هر رکورد در فایل wtmp در پنجره ترمینال نمایش پیدا میکند.
از چپ به راست، هر خط شامل موارد زیر است:
- نام کاربری فردی که لاگین کرده است.
- ترمینالی که کاربر برای لاگین کردن استفاده کرده است. مدخل ترمینال با مقدار:0 به معنی این است که کاربر روی خود رایانه لینوکس لاگین کرده است.
- آدرس IP دستگاهی که کاربر از آن لاگین کرده است.
- زمان لاگین و تاریخ آن.
- مدت نشست لاگین کاربر.
خط آخر، تاریخ و زمان ابتداییترین نشست ثبتشده در فایل لاگ را نمایش میدهد.
یک مدخل طولانی برای کاربر خیالی reboot در لاگ وارد شده است که هر بار رایانه روشن میشود وارد عمل میشود. فیلد ترمینال با نسخه کرنل جایگزین شده است. مدت لاگین در نشست برای این مدخلها نشاندهنده زمان روشن بودن رایانه است.
نمایش تعداد خاصی از خطوط
استفاده از دستور last به نوبه خود یک dump از کل لاگ را نشان میدهد که بخش غالب آن به سرعت در پنجره ترمینال اسکرول شده و میگذرد. بخشی که در محدوده دید میماند، قدیمیترین دادههای موجود در لاگ است. این بخش احتمالاً آن چیزی نیست که علاقهمند دیدن آن هستید.
میتوان به last اعلام کرد که تعداد خاصی از خطوط را در خروجی نمایش دهد. این کار با تعیین کردن تعداد خطوطی که میخواهید در خط فرمان ببینید انجام مییابد. به خط تیره توجه کنید. برای دیدن پنج خط باید از عبارت 5- و نه 5 استفاده کنید.
last -5
بدین ترتیب پنج خط نخست از لاگ خوانده میشود که تازهترین مدخلها است.
نمایش نامهای شبکه برای کاربران ریموت
گزینه d- که اختصاری برای عبارت «سیستم نام دامنه» (Domain Name System) است به دستور last اعلام میکند که تلاش کند آدرسهای IP کاربران ریموت را به یک نام دستگاه یا شبکه resolve کند.
last –d
امکان تبدیل آدرس IP به نام شبکه برای دستور last همواره امکانپذیر نیست، اما دستور last زمانی که بتواند این کار را انجام دهد آن را اجرا خواهد کرد.
پنهانسازی آدرسهای IP و نامهای شبکه
اگر به آدرس IP یا نام شبکه علاقهمند نیستید، از گزینه R- (بدون hostname) برای خاموش کردن این فیلد استفاده کنید.
از آنجا که این وضعیت یک خروجی تمیزتر بدون شکستگیهای زشت به دست میدهد، این گزینه در همه مثالهای ادامه مورد استفاده قرار گرفته است. اگر میخواهید از last برای شناسایی فعالیتهای نامعمول یا مشکوک استفاده کنید، نباید این فیلد را خاموش کنید.
انتخاب رکوردها با تاریخ
شما میتوانید از گزینه s- به معنی Since برای محدودسازی خروجی برای نمایش صرفاً رویدادهای لاگین که از یک تاریخ خاص به بعد اجرا میشوند استفاده کنید.
اگر فقط میخواهید رویدادهای لاگین را که از بیست و ششم می 2019 به بعد اتفاق افتادهاند ببینید، از دستور زیر استفاده کنید:
last -R -s 2019-05-26
خروجی رکوردهایی را نمایش میدهد که رویدادهای لاگین از زمان 00:00 در تاریخ مذکور تا جدیدترین رکوردها در فایل لاگ را نشان میدهند:
جستجو تا تاریخ انتهایی
با استفاده از گزینه t– به معنی until میتوانید تاریخ انتهایی جستجوی خود را تعیین کنید. این گزینه امکان انتخاب مجموعهای از رکوردهای لاگین را میدهد که بین دو تاریخ مورد نظر قرار دارند:
این دستور از last میخواهد که رکوردهای لاگین را از زمان 00:00 در تاریخ بیست و ششم تا 00:00 در تاریخ بیست و هفتم بازیابی کرده و نمایش دهد. بدین ترتیب لیست بندی به نشستهای لاگینی محدود میشود که صرفاً در بیست و ششم اتفاق افتادهاند.
قالبهای تاریخ و زمان
شما میتوانید از این زمانها نیز به همراه تاریخها با گزینههای s- و t- استفاده کنید.
میتوان از قالبهای زمانی مختلف با گزینه last استفاده کرد که برای تاریخها و زمانهای مختلف مناسب هستند:
- YYYYMMDDhhmmss
- YYYY-MM-DD hh:mm:ss
- YYYY-MM-DD hh:mm – ثانیهها روی 00 تنظیم شده است.
- YYYY-MM-DD – زمان روی 00:00:00 تنظیم شده است.
- hh:mm:ss – تاریخ روی امروز تنظیم شده است.
- hh:mm – تاریخ روی امروز و زمان روی 00 تنظیم شده است.
- now
- yesterday – زمان روی 00:00:00 تنظیم شده است.
- today – زمان روی 00:00:00 تنظیم شده است.
- tomorrow – زمان روی 00:00:00 تنظیم شده است.
- 5min+
- 5days-
توجه داشته باشید که قالبهای دوم و سوم در فهرست فوق در طی بررسیهای ما عمل نکردند. این دستورها روی توزیعهای اوبونتو، فدورا، و منجارو تست شدهاند. این توزیعها به ترتیب نسخههایی از توزیعهای دبیان، ردهت و Arch هستند. این توزیعها همه اعضای اصلی خانواده توزیعهای لینوکس را پوشش میدهند.
last -R -s 2019-05-26 11:00 -t 2019-05-27 13:00
چنان که میبینید این دستور کلاً هیچ رکوردی بازگشت نمیدهد. با استفاده از قالب تاریخ و زمان اول لیست با همان تاریخ و زمانهای دستور قبلی، رکوردهایی بازگشت مییابند:
last -R -s 20190526110000 -t 20190527130000
جستجو بر اساس واحدهای نسبی
امکان تعیین واحدهای زمانی برحسب دقیقه، یا روز در نسبت با تاریخ و زمان جاری نیز وجود دارد. در ادامه رکوردهایی از دو روز قبل تا یک روز قبل از روز جاری بازگشت مییابند:
last -R -s -2days -t -1days
دیروز، امروز و حال
میتوان از کلیدواژههای yesterday و tomorrow به ترتیب برای تاریخهای دیروز و امروز استفاده کرد.
last -R -s yesterday -t today
توجه کنید که این لیست شامل رکوردهای امروز نیست. این همان رفتاری است که مورد انتظار ما است. این دستور رکوردهایی را با آغاز از تاریخ ابتدایی تا تاریخ انتهایی دریافت میکند. بدین ترتیب شامل رکوردهایی از تاریخ انتها به بعد نخواهد بود.
گزینه now اختصاری برای «امروز و زمان حاضر» است. برای دیدن رویدادهای لاگین که از ساعت 00:00 تا زمانی که دستور را صادر میکنید اتفاق افتادهاند میتوانید از دستور زیر استفاده کنید:
last -R -s today -t now
دستور فوق رویدادهای لاگین را تا دقیقاً زمان جاری نمایش میدهد که شامل آن نشستی که هم اینک در آن لاگین کردهاید نیز میشود.
گزینه present
گزینه present با حرف p- امکان یافتن این که چه کسی در یک زمان خاص لاگین کرده است را میدهد. مهم نیست که فرد چه زمانی لاگین یا لاگآوت کرده است، اما اگر در زمانی که تعیین کردهاید در رایانه لاگین کرده باشد، در لیست خروجی ظاهر خواهد شد. اگر زمانی را بدون یک تاریخ last تعیین کنید، به صورت پیشفرض today تصور میشود:
last -R -p 09:30
بدیهی است افرادی که همچنان در سیستم لاگین کردهاند، زمان لاگآوت ندارند و به صورت still logged in نمایش پیدا میکنند. اگر رایانه از زمان تعیین شده راهاندازی مجدد نشده باشد، به صورت still running در خروجی ظاهر میشود.
اگر از کلیدواژه اختصاری now با گزینه present استفاده کنید، میتوانید ببیند که در زمان صدور دستور چه کسی در سیستم لاگین کرده است:
last -R -p now
البته این روش برای رسیدن به نتیجه مطلوب کمی طولانی است و روش آسانتر استفاده از دستور who است.
دستور lastb
در این جا باید به دستور lastb نیز اشاره کنیم، این فرمان دادهها را از یک لاگ به نام btmp میخواند. در مورد نام این لاگ اجماع اندکی وجود دارد. b اختصاری برای bad است، اما بخش tmp همچنان محل نزاع است.
Lastb تلاشهای لاگین بد (ناموفق) را لیست میکند. این فرمان همان گزینههای مربوط به دستور last را میپذیرد. از آنجا که این لاگ شامل تلاشهای ناموفق لاگین است، مداخل آنها همگی مدت 00:00 دارند. شما در زمان استفاده از دستور lastb باید از sudo استفاده کنید:
sudo lastb –R
سخن پایانی
دانستن این که چه کسی در یک رایانه لینوکسی لاگین کرده و این کار چه زمانی و از کجا صورت گرفته اطلاعات مفیدی محسوب میشود. ترکیب کردن این اطلاعات با جزییات تلاشهای لاگین ناموفق شما را قادر میسازد که نخستین گامهای خود را در بررسی رفتارهای مشکوک روی سیستم بردارید.
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای لینوکس (Linux)
- گنجینه آموزش های لینوکس (Linux)
- مجموعه آموزشهای مهارتهای کاربردی کامپیوتر (ICDL)
- بهترین توزیعهای لینوکس در سال 2۰1۸
- آموزش لینوکس مقدماتی – ساختار داخلی و ترمینال لینوکس
==