AUSEARCH(8) ابزارهای مدیریت سیستم (System Administration Utilities) AUSEARCH(8)

ausearch - ابزاری جهت جستجو و پرس‌وجو در لاگ‌های دیمن ممیزی سیستم

ausearch [options]

دستور ausearch ابزاری است که می‌تواند لاگ‌های دیمن ممیزی (audit daemon) را برای رویدادها بر اساس معیارهای مختلف جستجو پرس‌وجو کند. ابزار ausearch همچنین می‌تواند تا زمانی که ورودی داده‌های خام لاگ باشد، اطلاعات را از ورودی استاندارد (stdin) دریافت کند. هر گزینه خط فرمان داده‌شده یک گزاره شرطی «و» (AND) تشکیل می‌دهد. برای نمونه، جستجو با -m و -ui به این معناست که رویدادهایی بازگردانده شوند که هم دارای نوع درخواست‌شده بوده و هم با شناسه کاربر (user id) داده‌شده مطابقت داشته باشند. یک استثنا گزینه‌های -m و -n هستند؛ مشخص کردن چندین نوع رکورد و گره (node) در یک جستجو مجاز است که در این صورت هر گره و رکورد منطبق بازگردانده خواهد شد.

همچنین باید توجه داشت که هر گردش فراخوانی سیستمی (syscall) از فضای کاربری به هسته (کرنل) و بازگشت آن به فضای کاربری، دارای یک شناسه رویداد (event ID) یکتا است. هر رویداد قابل ممیزی که در طول این مسیر رخ دهد در این شناسه مشترک خواهد بود تا بتوان آن‌ها را به یکدیگر همبسته و مرتبط ساخت.

بخش‌های گوناگون هسته ممکن است رکوردهای مکمل اضافه کنند. برای نمونه، یک رویداد ممیزی روی فراخوانی سیستمی «open» همچنین باعث می‌شود که هسته یک رکورد PATH حاوی نام فایل منتشر کند. ابزار ausearch تمامی رکوردهایی را که یک رویداد را تشکیل می‌دهند در کنار یکدیگر ارائه می‌دهد. این بدان معناست که حتی اگر شما به دنبال نوع خاصی از رکورد جستجو کنید، رویدادهای حاصل ممکن است شامل رکوردهای SYSCALL نیز باشند.

همچنین در نظر داشته باشید که تمامی انواع رکوردها حاوی اطلاعات درخواست‌شده نیستند. برای نمونه، یک رکورد PATH فاقد نام میزبان (hostname) یا شناسه کاربر ورود (loginuid) است.

جستجو برای یک رویداد بر اساس شناسه رویداد (event ID) داده‌شده. پیام‌ها همواره با عبارتی مانند msg=audit(1116360555.329:2401771) آغاز می‌شوند. شناسه رویداد، عدد پس از «:» است. تمام رویدادهای ممیزی که از یک فراخوانی سیستمی برنامه ثبت می‌شوند، دارای شناسه رویداد ممیزی یکسانی هستند. فراخوانی سیستمی بعدی که توسط همان برنامه انجام گیرد، شناسه رویداد متفاوتی خواهد داشت. بدین ترتیب آن‌ها یکتا می‌باشند.
جستجو برای رویدادها بر اساس یک معماری پردازنده (CPU) مشخص. اگر از معماری دستگاه خود اطلاع ندارید اما می‌خواهید از جدول فراخوانی‌های سیستمی ۳۲ بیتی استفاده کنید و دستگاه شما از ۳۲ بیت پشتیبانی می‌کند، می‌توانید از b32 برای معماری استفاده کنید. همین امر در مورد جدول فراخوانی‌های سیستمی ۶۴ بیتی نیز صدق می‌کند و می‌توانید از b64. استفاده نمایید. معماری دستگاه شما با اجرای دستور 'uname -m' قابل دریافت است.
جستجو برای یک رویداد بر اساس نام comm داده‌شده. نام comm همان نام فایل اجرایی برگرفته از ساختار وظیفه (task structure) است.
نوشتن رویدادهای ناقص و بدساخت (malformed) نادیده گرفته‌شده در خروجی خطای استاندارد (stderr).
ذخیره نقطه بررسی (checkpoint) خروجی بین اجراهای پیاپی ausearch، به گونه‌ای که در اجراهای بعدی تنها رویدادهایی که پیش‌تر خروجی داده نشده‌اند چاپ شوند.

یک رویداد auditd از یک یا چند رکورد تشکیل شده است. هنگام پردازش رویدادها، ausearch رویدادها را به صورت کامل (complete) یا ناقص (in-complete) دسته‌بندی می‌کند. یک رویداد کامل یا یک رویداد تک‌رکوردی است یا رویدادی است که زمان وقوع آن نسبت به رویدادی که در حال حاضر پردازش می‌شود، ۲ ثانیه در گذشته رخ داده است.

یک نقطه بررسی با ذخیره آخرین رویداد کاملِ چاپ‌شده به همراه شماره دستگاه و شماره inode فایلی که آخرین رویداد کامل در آن ظاهر شده است، در checkpoint-file حاصل می‌شود. در اجرای بعدی، ausearch این داده‌های نقطه بررسی را بارگذاری کرده و همگام با پردازش فایل‌های لاگ، تمام رویدادهای کامل را تا زمانی که با رویداد ثبت‌شده در نقطه بررسی مطابقت پیدا کند نادیده می‌گیرد. در این مرحله، شروع به خروجی دادن رویدادهای کامل خواهد کرد.

چنانچه فایل یا آخرین رویداد ذخیره‌شده در نقطه بررسی یافت نشود، یکی از خطاهای موجود رخ خواهد داد و ausearch پایان می‌یابد. برای جزئیات به وضعیت خروج (EXIT STATUS) مراجعه کنید.

تنظیم مهلت زمانی پایان رویداد (end of event). برای جزئیات به end_of_event_timeout در auditd.conf(5) مراجعه کنید. توجه داشته باشید که تنظیم این مقدار، هرگونه مقدار پیکربندی‌شده در /etc/auditd/auditd.conf را بازنویسی و جایگزین می‌کند.
جستجو برای یک رویداد بر اساس کد خروج یا errno فراخوانی سیستمی داده‌شده.
این گزینه مشخص می‌کند که آیا خروجی اسکیپ (escape) شود تا محتوا برای کاربردهای خاص ایمن‌تر گردد یا خیر. گزینه‌ها عبارتند از: raw ، tty ، shell و shell_quote. هر حالت شامل کاراکترهای حالت پیشین بوده و کاراکترهای بیشتری را اسکیپ می‌کند؛ به این معنا که shell تمام کاراکترهای اسکیپ‌شده توسط tty را در بر گرفته و کاراکترهای دیگری را نیز اضافه می‌کند. مقدار پیش‌فرض tty است.
هنگامی که حالت format برابر با csv باشد، این گزینه در صورت وجود اطلاعات کلید (key) برای رویداد، یک ستون نهایی با اطلاعات کلید اضافه می‌کند. این حالت تنها در رکوردهای SYSCALL رخ می‌دهد که حاصل فعال‌شدن یک قاعده ممیزی با کلید تعریف‌شده باشند.
هنگامی که حالت format برابر با csv باشد، این گزینه در صورت وجود برچسب‌های فاعل (subject) و مفعول (object)، ستون‌هایی از اطلاعات آن‌ها را اضافه می‌کند.
هنگامی که حالت format برابر با csv باشد، این گزینه در صورت وجود مفعول یا شیء دوم، ستون‌هایی از اطلاعات آن را اضافه می‌کند. به ندرت پیش می‌آید که شیء دوم بخشی از یک رکورد باشد. چند نمونه آن هنگامی است که فایلی از یک نام به نام دیگر تغییر می‌یابد یا هنگامی که دستگاهی روی یک مسیر سوار (mount) می‌شود.
هنگامی که حالت format برابر با csv باشد، این گزینه ستون‌هایی از اطلاعات زمان تفکیک‌شده را اضافه می‌کند تا ساخت زیرمجموعه‌ها ساده‌تر شود.
جستجو برای یک رویداد بر اساس نام فایل داده‌شده. این آرگومان با فایل‌های معمولی و همچنین سوکت‌های af_unix مطابقت داده خواهد شد.
رویدادهایی که با معیارهای جستجو مطابقت دارند با استفاده از این گزینه قالب‌بندی می‌شوند. قالب‌های پشتیبانی‌شده عبارتند از: raw، default، interpret، csv و text. گزینه raw ذیل گزینه خط فرمان --raw شرح داده شده است. گزینه default قالبی است که در صورت تعیین نشدن هیچ گزینه قالب‌بندی دریافت می‌کنید؛ این حالت شامل یک خط به عنوان جداکننده دیداری است که برچسب زمانی را نشان می‌دهد و سپس رکوردهای رویداد به دنبال آن می‌آیند. گزینه interpret ذیل گزینه خط فرمان -i توضیح داده شده است. گزینه csv نتایج جستجو را به عنوان یک رویداد نرمال‌شده در قالب مقادیر جداشده با کاما (CSV) خروجی می‌دهد که برای وارد کردن به برنامه‌های تحلیلی مناسب است. گزینه text رویداد را به یک جمله انگلیسی تبدیل می‌کند که نسبت به گزینه‌های دیگر آسان‌تر قابل فهم است، اما به قیمت از دست رفتن برخی جزئیات تمام می‌شود. در بیشتر موارد این امر کاملاً مناسب است چرا که رویداد اصلی همچنان تمام اطلاعات اولیه را حفظ می‌کند.
جستجو برای رویدادی که شناسه گروه مؤثر یا شناسه گروه آن با شناسه گروه داده‌شده مطابقت داشته باشد.
جستجو برای یک رویداد با شناسه گروه مؤثر یا نام گروه داده‌شده.
جستجو برای یک رویداد با شناسه گروه یا نام گروه داده‌شده.
نمایش راهنما.
جستجو برای یک رویداد با نام میزبان داده‌شده. نام میزبان می‌تواند یک نام میزبان، نام دامنه کاملاً مشخص (FQDN) یا یک نشانی شبکه عددی باشد. هیچ تلاشی برای تبدیل نشانی‌های عددی به نام‌های دامنه یا نام‌های مستعار انجام نمی‌شود. این جستجو معمولاً با فیلد addr یا host در رویدادهای ممیزی مرتبط است. همچنین به گزینه --node که فیلد node را جستجو می‌کند مراجعه نمایید.
تفسیر موجودیت‌های عددی به متن. برای نمونه، uid به نام حساب کاربری تبدیل می‌شود. اگر لاگ‌های ممیزی غنی‌نشده (unenriched) باشند، تبدیل با استفاده از منابع فعلی دستگاهی که جستجو روی آن انجام می‌شود صورت می‌گیرد. اگر نام حساب‌ها را تغییر داده‌اید یا حساب‌های یکسانی روی دستگاه خود ندارید، ممکن است نتایج گمراه‌کننده‌ای دریافت کنید. اگر لاگ‌ها غنی‌شده (enriched) باشند، برای انجام تبدیل از داده‌های تکمیلی استفاده می‌کند. این ویژگی امکان گزارش‌گیری دقیق از لاگ‌ها را حتی در صورت اجرا بر روی دستگاهی متفاوت از دستگاه مبدأ لاگ‌ها فراهم می‌سازد.
استفاده از فایل یا دایرکتوری داده‌شده به جای لاگ‌ها. این گزینه برای کمک به تجزیه و تحلیل در شرایطی است که لاگ‌ها به دستگاه دیگری منتقل شده‌اند یا تنها بخشی از یک لاگ ذخیره شده است. طول مسیر به ۴۰۶۴ بایت محدود است.
استفاده از مکان فایل لاگ برگرفته از auditd.conf به عنوان ورودی برای جستجو. این گزینه زمانی نیاز است که از ausearch درون یک cron job استفاده می‌کنید.
توقف پس از خروجی دادن نخستین رویدادی که با معیارهای جستجو تطابق دارد.
جستجو برای یک رویداد بر اساس رشته کلید داده‌شده.
تخلیه فوری بافر خروجی در هر خط. بیشترین کاربرد آن زمانی است که خروجی استاندارد به یک لوله (pipe) متصل باشد و راهبرد پیش‌فرض بافر بلوکی نامطلوب باشد. ممکن است با افت کارایی همراه شود.
جستجو برای رویدادی مطابق با نوع پیام داده‌شده. (انواع پیام با نام انواع رکورد نیز شناخته می‌شوند.) همچنین می‌توانید یک فهرست جداشده با کاما از انواع پیام یا چندین نوع پیام جداگانه را که هر یک گزینه -m اختصاصی خود را دارند وارد کنید. یک نوع پیام با عنوان ALL وجود دارد که در لاگ‌های واقعی موجود نیست؛ این گزینه به شما امکان می‌دهد تمام پیام‌های موجود در سیستم را دریافت کنید. فهرست انواع پیام‌های معتبر طولانی است. هرگاه هیچ نوع پیامی همراه این پارامتر ارسال نشود، برنامه این فهرست را نمایش خواهد داد. نوع پیام می‌تواند متنی یا عددی باشد. اگر فهرستی وارد می‌کنید، بین موارد فقط باید کاما قرار گیرد و نباید فاصله‌ای (space) وجود داشته باشد.
جستجو برای رویدادهایی که از یک دستگاه مشخص منشأ گرفته‌اند. تعیین چندین گره مجاز است و در صورت تطابق با هر گره، رویداد منطبق در نظر گرفته می‌شود. این جستجو از فیلد node در رویدادهای ممیزی استفاده می‌کند. همچنین گزینه --host را ببینید که رویدادهای مربوط به اطلاعات میزبان را در ردپای ممیزی (audit trail) جستجو می‌کند.
جستجو برای رویدادی با tcontext (شیء/مفعول) منطبق بر رشته.
جستجو برای رویدادی منطبق با شناسه فرایند داده‌شده.
جستجو برای رویدادی منطبق با شناسه فرایند والد داده‌شده.
خروجی کاملاً بدون قالب‌بندی خواهد بود. این گزینه برای استخراج رکوردها به فایلی که همچنان توسط ابزارهای ممیزی قابل تفسیر باشد، یا هنگام ارسال با لوله به سایر ابزارهای ممیزی مفید است.
جستجو برای رویدادی منطبق با فراخوانی سیستمی (syscall) داده‌شده. می‌توانید مقدار عددی یا نام syscall را وارد نمایید. اگر نام syscall را وارد کنید، از جدول فراخوانی‌های سیستمی سیستم مورد استفاده شما بهره گرفته می‌شود.
جستجو برای رویدادهایی که در آن‌ها scontext/فاعل یا tcontext/مفعول با رشته داده‌شده مطابقت داشته باشد.
جستجو برای رویدادهای منطبق با شناسه نشست ورود داده‌شده. این مشخصه فرایند در زمان ورود کاربر تنظیم می‌شود و می‌تواند هر فرایندی را به یک ورود کاربر خاص پیوند دهد.
جستجو برای رویدادی با scontext (فاعل) منطبق بر رشته.
جستجو برای رویدادی منطبق با مقدار موفقیت داده‌شده. مقادیر مجاز عبارتند از yes و no.
جستجو برای رویدادهایی با برچسب زمانی مساوی یا پیش از زمان پایان داده‌شده. قالب زمان پایان به محلی‌سازی (locale) شما بستگی دارد. می‌توانید قالب محلی‌سازی خود را با اجرای date '+%x' بررسی کنید. اگر تاریخ حذف شود، today فرض می‌شود. اگر زمان حذف شود، now در نظر گرفته می‌شود. به جای AM یا PM از ساعت ۲۴ ساعته برای مشخص کردن زمان استفاده کنید. نمونه‌ای از تاریخ در لوکال en_US.utf8 به صورت 09/03/2009 است. نمونه‌ای از زمان 18:00:00 است. قالب تاریخ پذیرفته‌شده تحت تأثیر متغیر محیطی LC_TIME قرار دارد.

همچنین می‌توانید از این کلمات استفاده کنید: now، recent، this-hour، boot، today، yesterday، this-week، week-ago، this-month یا this-year. کلمه Now به معنای شروع از اکنون است. Recent به معنای ۱۰ دقیقه قبل است. Boot یعنی زمان روز تا ثانیه هنگام آخرین راه‌اندازی سیستم. Today به معنای اکنون است. Yesterday یعنی ۱ ثانیه پس از نیمه‌شب روز گذشته. This-week به معنای شروع از ۱ ثانیه پس از نیمه‌شب در روز صفر هفته طبق لوکال شما است (به localtime مراجعه کنید). Week-ago یعنی ۱ ثانیه پس از نیمه‌شب دقیقاً ۷ روز پیش. This-month یعنی ۱ ثانیه پس از نیمه‌شب در روز نخست ماه. This-year یعنی ۱ ثانیه پس از نیمه‌شب در نخستین روز از اولین ماه سال.

جستجو برای رویدادهایی با برچسب زمانی مساوی یا پس از زمان شروع داده‌شده. قالب زمان شروع به محلی‌سازی (locale) شما بستگی دارد. می‌توانید قالب محلی‌سازی خود را با اجرای date '+%x' بررسی کنید. اگر تاریخ حذف شود، today فرض می‌شود. اگر زمان حذف شود، midnight در نظر گرفته می‌شود. به جای AM یا PM از ساعت ۲۴ ساعته برای مشخص کردن زمان استفاده کنید. نمونه‌ای از تاریخ در لوکال en_US.utf8 به صورت 09/03/2009 است. نمونه‌ای از زمان 18:00:00 است. قالب تاریخ پذیرفته‌شده تحت تأثیر متغیر محیطی LC_TIME قرار دارد.

همچنین می‌توانید از این کلمات استفاده کنید: now، recent، this-hour، boot، today، yesterday، this-week، week-ago، this-month، this-year یا checkpoint. کلمه Boot یعنی زمان روز تا ثانیه هنگام آخرین راه‌اندازی سیستم. Today به معنای شروع از ۱ ثانیه پس از نیمه‌شب است. Recent یعنی ۱۰ دقیقه پیش. Yesterday یعنی ۱ ثانیه پس از نیمه‌شب روز گذشته. This-week به معنای شروع از ۱ ثانیه پس از نیمه‌شب در روز صفر هفته طبق لوکال شما است (به localtime مراجعه کنید). Week-ago یعنی شروع از ۱ ثانیه پس از نیمه‌شب دقیقاً ۷ روز پیش. This-month یعنی ۱ ثانیه پس از نیمه‌شب در روز نخست ماه. This-year یعنی ۱ ثانیه پس از نیمه‌شب در نخستین روز از اولین ماه سال.

checkpoint به این معناست که ausearch از برچسب زمانی موجود در یک فایل نقطه بررسی معتبر استفاده کرده و شماره inode، دستگاه، سریال، گره و نوع رویداد ثبت‌شده در فایل نقطه بررسی را نادیده خواهد گرفت. اساساً این یک عملیات بازیابی است در صورتی که فراخوانی ausearch با گزینه checkpoint با وضعیت خروج ۱۰، ۱۱ یا ۱۲ شکست بخورد. می‌توان از آن در یک اسکریپت شل به شکل زیر استفاده کرد:


ausearch --checkpoint /etc/audit/auditd_checkpoint.txt -i
_au_status=$?
if test ${_au_status} -eq 10 -o ${_au_status} -eq 11 	-o ${_au_status} -eq 12
then
  ausearch --checkpoint /etc/audit/auditd_checkpoint.txt --start checkpoint -i
fi
جستجو برای رویدادی منطبق با مقدار ترمینال داده‌شده. برخی دیمن‌ها نظیر cron و atd از نام دیمن برای ترمینال استفاده می‌کنند.
جستجو برای رویدادی که شناسه کاربر، شناسه کاربر مؤثر یا شناسه کاربر ورود (auid) آن با شناسه کاربر داده‌شده مطابقت داشته باشد.
جستجو برای رویدادی با شناسه کاربر مؤثر داده‌شده.
جستجو برای رویدادی با شناسه کاربر داده‌شده.
جستجو برای رویدادی با شناسه کاربر ورود داده‌شده. تمامی برنامه‌های مبدأ ورود که از PAM استفاده می‌کنند (PAMified) باید طوری پیکربندی شوند که pam_loginuid برای نشست الزامی (required) باشد تا جستجو بر اساس loginuid (auid) دقیق باشد.
جستجو برای رویدادی با شناسه یکتای عمومی مهمان (guest UUID) داده‌شده.
چاپ نگارش برنامه و خروج.
جستجو برای رویدادی با نام مهمان (guest name) داده‌شده.
تطابق‌های مبتنی بر رشته باید کل کلمه را مطابقت دهند. این دسته از تطابق‌ها شامل موارد زیر است: filename، hostname، terminal، keys و بافتار SELinux.
جستجو برای رویدادی منطبق با نام فایل اجرایی داده‌شده.

0
در صورت موفقیت (OK).
1
اگر چیزی یافت نشد، یا خطای آرگومان یا خطاهای جزئی دسترسی/خواندن فایل رخ داد.
10
داده‌های نامعتبر نقطه بررسی در فایل checkpoint یافت شد.
11
خطای پردازش نقطه بررسی (checkpoint).
12
رویداد نقطه بررسی در فایل لاگ منطبق یافت نشد.

گزینه زمان راه‌اندازی (boot time) یک تابع رفاهی است و دارای محدودیت‌هایی می‌باشد. زمانی که محاسبه می‌کند بر اساس زمان فعلی منهای /proc/uptime است. اگر پس از بوت، ساعت سیستم (مثلاً با ntp) تغییر داده شده باشد، ممکن است محاسبه اشتباه از آب درآید. در این صورت باید زمان را به صورت کامل مشخص کنید. می‌توانید زمانی را که استفاده خواهد کرد با اجرای دستور زیر مشاهده نمایید:

date -d "`cut -f1 -d. /proc/uptime` seconds ago"

جستجو برای یک کاربر مشخص:
# ausearch --start today --loginuid john -i
بررسی لاگ SELinux برای هرگونه عدم دسترسی (denial) در امروز:
# ausearch --start today -m avc -i
نمایش لاگ‌های اخیر SELinux:
# ausearch -m avc,user_avc,selinux_err,user_selinux_err -i -ts recent
نمایش لاگ‌ها در قالب متنی:
# ausearch --start today --format text
نمایش رویدادهای TTY به صورت تفسیرشده و اسکیپ‌شده برای شل:
# ausearch --start today -m TTY -i --escape shell_quote

auditd(8), auditd.conf(5), aureport(8), pam_loginuid(8).

مارس ۲۰۲۶ Red Hat