منبع اصلی نوشتار زیر در این لینک قرار دارد

آگاهی و اخطار تغییرات روی دایرکتوری ها و انجام عمل مناسب

در این مطلب با ابزار audit برای پیگیری تغییرات بر روی فایل ها گفته شد. audit به گونه ای تنظیم می ود که هرگاه فایلی خوانده/نوشته یا خصوصیاتش تغییر کند یک رکورد شامل اطلاعاتی مانند کاربر و دستوری که از فایل استفاده کرده اند، ثبت خواهد شد. در این مطلب با استفاده از ابزار incron که تغییرات را بر اساس inode پیگیری می کند، معرفی می شود. با نصب این بسته و ویرایش فایل incron.conf به ازای هر دایرکتوری می توان قانونی نوشت که به محض تغییری در دایرکتوری یک دستور یا action اجرا می شود. با استفاده از دستور های زیر آنرا در توزیع مورد نظر نصب کنید

apt-get install incron #Install on Ubuntu/Debian

yum install incron #Install on RHLE/CentOS/Fedora

برنامه شامل سه فایل و یک دایرکتوری است

  • فایل etc/incron.conf/ که شامل پارامتر های پیکربندی برنامه و قاون های مورد نظر است.
  • قایل etc/incron.allow/ که هر خط آن کاربر مجاز به استفاده از incron را نشان می دهد.
  • فایل etc/incron.deny/ که هر خط آن کاربر غیر مجاز به استفاده از incron را نشان می دهد.
  • دایرکتوری etc/incron.d/ که در آن به ازای هر دایرکتوری یک فایل پیکربندی قرار می گیرد.

فایل etc/incron.conf/ اصلی ترین فایل است. شامل پارامتر هایی مانند

  • allowed_users که مسیر فایلی که شامل کاربران مجاز است را مشخص می کند و بطور پیشفرض etc/incron.allow/ است.
  • denied_users  که مسیر فایلی که شامل کاربران غیر مجاز است را مشخص می کند و بطور پیشفرض etc/incron.deny/ است.

directory file_change_mask command_or_action  options

به چندین مثال زیر توجه کنید :

var/www/html IN_CREATE/root/scripts/backup.sh/

و به معنی اینکه اگر یک دایرکتوری/فایل زیر دایرکتوری var/www/html/ ایجاد شود (IN_CREATE)، یک اسکریپت به اسم backup.sh اجرا خواهد شد.

sales IN_DELETE/root/scripts/sync.sh/

وبه معنی اینکه اگر یک دایرکتوری/فایل زیر داریکتوری sales/ پاک شود (IN_DELETE) یک اسکریپت به اسم sync.sh اجرا خواهد شد.

file change mask : نوع عملی است (رخدادی مانند ایجاد/جذف/تغییر) که باعث اجرای یک دستور یا action خواهد شد.

  • IN_ACCESS : در صورت دسترسی به یک فایل.
  • IN_ATTRIB : در صورتی که خصوصیات فایلی تغییر کند (مانند permission, timestamp و غیره).
  • IN_CLOSE_WRITE : در صورتی که فایلی که برای خوانده شدن باز شده بود بسته شود.
  • IN_CLOSE_NOWRITE : فایلی که باز شده بود اما نه برای خواندن، بسته شود.
  • IN_CREATE : در صورتی که فایل/دایرکتوری تازه ای زیر دایرکتوری مربوطه ایجاد شود.
  • IN_DELETE : در صورتی که فایل/دایرکتوری از زیر دایرکتوری مربوطه پاک شود.
  • IN_DELETE_SELF : خود دایرکتوری مربوطه پاک شود.
  • IN_MODIFY : در صورتی که فایلی از زیر دایرکتوری مربوطه تغییر کند.
  • IN_MOVE_SELF : در صورتی که خود دایرکتوری مربوطه تغییر مکان یاید (دستور های cp/mv یا Copy/Cut محیط گرافیکی)
  • IN_MOVED_TO : در صورتی که فایل یا دایرکتوری از جای دیگری زیر دایرکتوری مربوطه کپی شود.
  • IN_MOVED_FROM : در صورتی که فایل/دایرکتوری از زیر دایرکتوری مربوطه به مسیر دیگری منتقل شود.
  • IN_OPEN : در صورتی که فایلی از زیر دیارکتوری مربوطه باز شود.
  • IN_ALL_EVENTS : تمامی موارد بالا را شامل می شود.

command or action : دستور یا عملی است که اجرا خواهد شد، مانند آنچه که در بالا گفته شد. چند Wildards زیر می توانند استفاده شوند.

  • $$ : علامت $
  • @$ : مسیر دایرکتوری.
  • #$ : فایلی که رخداد روی آن صورت گرفته شات.
  • %$ : نشانه حروفی رخداد.
  • &$ : نشانه عددی رخداد.

دستور incrontab جدولی است که قوانین در آن نوشته می شوند و سپس توسط سرویس incrond خوانده و اعمال می شوند. این جدول به ازای هر کاربر مجاز که نامش در فایل incron.allow امده باشد وجود دارد. شکل کلی آن :

 incrontab -u USERNAME -e

incrontab -u USERNAME -l

incrontab -u USERNAME -r

در تمامی دستور های بالا اگر نام کاربری توسط سوئیچ u تعیین شنود، کاربر کنونی (کسی که به سیستم Login کرده) را در نظر می گیرد. سوئیچ e باعث ویرایش و سوئیچ l باعث نمایش محتوای حدول کاربر USERNAME و سوئیچ r باعث حذف محتوا می شود. پس برای ویرایش و وارد کردن قانونی دستور زیر را بزنید (با فرض اجرای دستور توسط کاربر کنونی و دارای مجوز از فایل incron.allow – مانند root)

incrontab -e

مثال  1:

etc/apache2/apache2.conf IN_MODIFY /etc/init.d/apache2 restart/

etc/apache2/vhosts/ IN_MODIFY /etc/init.d/apache2 restart/

 مثال 2:

“tmp IN_ALL_EVENTS logger “/tmp action for $# file/

در مثال دوم که در جدول (فایل) incrontab وارد کرده ایم، دایرکتوری tmp/ کنترل می شود و به محض هر گونه اتفاق مانند ایجاد فایل/تغییر فایل/ تغییر خصوصیات فایل/ یا پاک شدن خود دایرکتوری یا هر گونه تغییر دیگر (به خاطر IN_ALL_EVENTS) عملی که انجام می شود این است که دستور logger اجرا می شود و سپس متنی را با عنوان tmp action for $# file/ در فایل var/log/message/ ثبت خواهد شد که #$ نشان دهنده نام فایلی که رخداد روی آن اتفاق افتاده است :

“Jul 17 18:39:25 vivek-desktop logger: “/tmp action for foo file

مثال 3:

ناحیه قرمز رنگ $ چاپ می کند.

علامت @$ مسیر دایرکتوری را چاپ می کند.

علامت #$ نام فایل مورد رخداد را نشان می دهد.

علامت های %$ و &$ به ترتیب رخداد را بصورت متنی و عددی نشان می دهند. خروجی زیر نمونه خروجی دستور بالا از فایل var/log/message/ خواهد بود.

“(Aug 21 17:26:50 server1 incrond[7111]: (root) CMD (echo “$ /tmp huhu IN_CREATE 256



برچسب ها : , , , , , ,