| AUDITCTL(8) | ابزارهای مدیریت سیستم | AUDITCTL(8) |
نام (NAME)
auditctl - ابزاری کمکی برای کنترل سیستم حسابرسی هسته
خلاصه دستور (SYNOPSIS)
auditctl [گزینهها]
توضیحات (DESCRIPTION)
برنامه auditctl برای پیکربندی گزینههای هسته مرتبط با حسابرسی، مشاهده وضعیت پیکربندی، و بارگذاری قوانین اختیاری حسابرسی به کار میرود.
گزینههای پیکربندی (CONFIGURATION OPTIONS)
- -b backlog
- تنظیم حداکثر تعداد (حد مجاز) بافرهای معوقه حسابرسی مجاز (پیشفرض هسته=64). اگر تمام بافرها پر باشند، هسته برای اقدام به پرچم شکست (failure flag) مراجعه میکند.
- --backlog_wait_time wait_time
- تنظیم مدت زمان انتظار هسته (پیشفرض هسته: 60*HZ) در زمان رسیدن به حد بافر معوقه، پیش از صفبندی رویدادهای حسابرسی بیشتر برای انتقال به auditd. این عدد باید بزرگتر یا مساوی صفر و کمتر از ۱۰ برابر مقدار پیشفرض باشد.
- --reset_backlog_wait_time_actual
- بازنشانی شمارنده زمان واقعی انتظار بافر معوقه که توسط دستور وضعیت نمایش داده میشود.
- -c
- ادامه بارگذاری قوانین با وجود بروز خطا. این گزینه نتایج بارگذاری قوانین را خلاصه میکند. اگر بارگذاری هر قانونی با شکست مواجه شود، کد خروج موفقیتآمیز نخواهد بود.
- -D
- حذف تمام قوانین و نظارتها (watches). این گزینه میتواند گزینه کلید (-k) را نیز بپذیرد.
- -e [0..2]
- تنظیم پرچم فعالسازی. ارسال مقدار 0 میتواند برای غیرفعال کردن موقت حسابرسی استفاده شود. اگر 1 به عنوان آرگومان ارسال شود، حسابرسی را فعال میکند. برای قفل کردن پیکربندی حسابرسی به گونهای که نتوان آن را تغییر داد، مقدار 2 را به عنوان آرگومان ارسال کنید. قفل کردن پیکربندی معمولاً به عنوان آخرین دستور در audit.rules برای کسانی که خواهان فعال بودن این ویژگی هستند در نظر گرفته شده است. هر تلاشی برای تغییر پیکربندی در این حالت ثبت حسابرسی شده و رد خواهد شد. پیکربندی تنها با راهاندازی مجدد ماشین قابل تغییر است.
- -f [0..2]
- تنظیم حالت
شکست (failure mode):
0=silent 1=printk 2=panic. این گزینه به شما اجازه میدهد تعیین کنید که چگونه میخواهید هسته خطاهای بحرانی را مدیریت کند. نمونه شرایطی که این حالت ممکن است در آنها تأثیرگذار باشد عبارتند از: خطاهای انتقال به دیمن حسابرسی فضای کاربر، فراتر رفتن از حد بافر معوقه، اتمام حافظه هسته، و فراتر رفتن از حد نرخ ارسال. مقدار پیشفرض 1 است. محیطهای امن احتمالاً مایل خواهند بود این مقدار را روی 2 تنظیم کنند. - -h, --help
- راهنما
- -i
- هنگامی که به تنهایی استفاده شود، خطاها را هنگام خواندن قوانین از یک فایل نادیده میگیرد. این امر باعث میشود auditctl همیشه کد خروج موفقیتآمیز بازگرداند. اگر به عنوان یک آرگومان برای -s ارسال شود، در صورت امکان اعداد را به کلمات قابل خواندن برای انسان تفسیر میکند.
- --loginuid-immutable
- این گزینه به هسته اعلام میکند که loginuids را پس از تنظیم غیرقابل تغییر کند. تغییر دادن loginuids نیازمند مجوز CAP_AUDIT_CONTROL است، بنابراین توسط کاربران بدون امتیاز قابل انجام نیست. تنظیم این گزینه loginuid را در برابر دستکاری ایمن میکند، اما میتواند در انواع خاصی از کانتینرها مشکلاتی به وجود آورد.
- -q mount-point,subtree
- اگر یک نظارت دایرکتوری از قبل موجود دارید و زیردرخت دیگری را با bind یا move روی زیردرخت تحت نظارت متصل (mount) کنید، باید به هسته بگویید زیردرختی را که متصل میشود معادل دایرکتوری تحت نظارت قرار دهد. اگر زیردرخت در زمان اعمال نظارت دایرکتوری از قبل متصل شده باشد، زیردرخت به صورت خودکار برای نظارت نشانهگذاری میشود. لطفاً به کامایی که دو مقدار را از هم جدا میکند توجه داشته باشید؛ حذف آن باعث ایجاد خطا میشود.
- -r rate
- تنظیم محدودیت بر حسب پیام در ثانیه (0=none). اگر این rate غیر صفر باشد و از آن فراتر رود، هسته برای اقدام به پرچم شکست مراجعه میکند. مقدار پیشفرض 0 است.
- --reset-lost
- بازنشانی شمارنده رکوردهای از دست رفته که توسط دستور وضعیت نشان داده میشود.
- -R file
- خواندن و اجرای دستورات auditctl از یک file. دستورات به صورت خط به خط و به همان ترتیبی که در فایل ظاهر میشوند اجرا میشوند. مالک فایل باید root باشد و نباید توسط کاربران دیگر قابل خواندن باشد، در غیر این صورت رد خواهد شد. خطوط خالی نادیده گرفته میشوند. خطوطی که با کاراکتر '#' آغاز میشوند به عنوان خطوط توضیح در نظر گرفته میشوند. هر خط به گونهای اجرا میشود که گویی به عنوان آرگومانهای خط فرمان به auditctl داده شده است. از آنجا که auditctl فایل را میخواند و نه پوستهای مانند bash، کاراکترهای ویژه پوسته را اسکیپ نکنید. برای دیدن یک مثال به بخش «مثالها» مراجعه کنید.
- --signal signal
- ارسال یک سیگنال به دیمن حسابرسی. برای انجام این کار باید دارای مجوز باشید. سیگنالهای پشتیبانیشده عبارتند از: TERM, HUP, USR1, USR2, CONT و نگارشهای کاربرپسندتر: stop, reload, rotate, resume, state.
- -t
- کوتاه کردن (trim) زیردرختها پس از یک دستور mount.
گزینههای وضعیت (STATUS OPTIONS)
- -l
- فهرست کردن تمام قوانین به صورت ۱ قانون در هر خط. دو گزینه دیگر میتوان به این دستور داد: میتوانید گزینه کلید (-k) را برای فهرست کردن قوانینی که با یک کلید مطابقت دارند، یا گزینه (-i) را برای تفسیر آرگومانهای a0 تا a3 به منظور کمک به بررسی درستی مقادیر آرگومانهای فراخوانی سیستم مشخص کنید.
- -m text
- ارسال یک پیام فضای کاربر به درون سیستم حسابرسی. این کار تنها در صورتی امکانپذیر است که قابلیت CAP_AUDIT_WRITE را داشته باشید (معمولاً کاربر root این قابلیت را دارد). رویداد حاصل از نوع USER خواهد بود.
- -s
- گزارش وضعیت زیرسیستم حسابرسی هسته. این گزینه مقادیر درون هسته را که میتوان توسط گزینههای -e، -f، -r و -b تنظیم کرد گزارش میدهد. مقدار pid شناسه فرآیند دیمن حسابرسی است. توجه داشته باشید که pid برابر با 0 نشاندهنده در حال اجرا نبودن دیمن حسابرسی است. مدخل lost نشان میدهد چه تعداد رکورد رویداد به دلیل سرریز شدن صف حسابرسی هسته دور ریخته شده است. فیلد backlog مشخص میکند چه تعداد رکورد رویداد در حال حاضر در صف منتظر خوانده شدن توسط auditd هستند. این گزینه میتواند با -i همراه شود تا چند فیلد تفسیر شوند.
- -v
- چاپ نسخه auditctl.
گزینههای قوانین (RULE OPTIONS)
- -a [list,action|action,list]
- الحاق قانون به انتهای list با اقدام action. لطفاً به کامایی که دو مقدار را از هم جدا میکند توجه داشته باشید؛ حذف آن باعث ایجاد خطا خواهد شد. ترتیب فیلدها اهمیتی ندارد؛ میتواند list,action یا action,list باشد. در ادامه نامهای معتبر list شرح داده شده است:
- task
- افزودن قانون به فهرست به ازای هر تسک (per task list). این فهرست قوانین تنها در زمان ایجاد تسک استفاده میشود -- زمانی که fork() یا clone() توسط تسک والد فراخوانی میشوند. هنگام استفاده از این فهرست، تنها باید از فیلدهایی استفاده کنید که در زمان ایجاد تسک مشخص هستند، مانند uid، gid و غیره.
- exit
- افزودن قانون به فهرست خروج از فراخوانی سیستم (syscall exit list). این فهرست پس از خروج از یک فراخوانی سیستم برای تعیین اینکه آیا باید یک رویداد حسابرسی ایجاد شود یا خیر استفاده میشود.
- user
- افزودن قانون به فهرست فیلتر پیام کاربر. این فهرست توسط هسته برای فیلتر کردن رویدادهای سرچشمهگرفته از فضای کاربر پیش از ارسال آنها به دیمن حسابرسی به کار میرود. لازم به ذکر است که تنها فیلدهای معتبر عبارتند از: uid، auid، gid، pid، subj_user، subj_role، subj_type، subj_sen، subj_clr، msgtype و نام فایل اجرایی (executable name). با تمامی فیلدهای دیگر به عنوان عدم تطابق رفتار خواهد شد. باید توجه داشت که هر رویدادی که از فضای کاربر توسط فرآیندی با مجوز CAP_AUDIT_WRITE سرچشمه بگیرد در ردپای حسابرسی ثبت خواهد شد. این بدان معناست که محتملترین کاربرد برای این فیلتر، قوانینی با اقدام never است؛ زیرا برای مجاز بودن ثبت رویدادها نیازی به انجام کاری نیست.
- exclude
- افزودن قانون به فهرست فیلتر استثنای نوع رویداد. این فهرست برای فیلتر کردن رویدادهایی که مایل به دیدن آنها نیستید استفاده میشود. به عنوان مثال، اگر نمیخواهید هیچ پیام avc را مشاهده کنید، از این فهرست برای ثبت آن استفاده میکنید. رویدادها را میتوان بر اساس شناسه فرآیند (process ID)، شناسه کاربر (user ID)، شناسه گروه (group ID)، شناسه کاربر ورود (login user ID)، نوع پیام (message type)، بستر سوژه (subject context)، یا نام فایل اجرایی مستثنی کرد. اقدام (action) نادیده گرفته میشود و از مقدار پیشفرض خود یعنی "never" استفاده میکند.
- filesystem
- افزودن قانونی که بر روی کل یک سیستمفایل اعمال خواهد شد. سیستمفایل باید با فیلد fstype مشخص شود. به طور معمول این فیلتر برای مستثنی کردن تمامی رویدادها برای کل یک سیستمفایل مانند tracefs یا debugfs استفاده میشود.
- io_uring
- افزودن قانون به فیلتر فراخوانی سیستم io_uring. قوانین در این فیلتر عملیات فراخوانی سیستم را با استفاده از ساختار -S syscall که در زیر شرح داده شده مشخص میکنند. میتوانید یک فیلد key به قانون اضافه کنید تا بتوان آن را با سایر قوانین ناظر بر همان فراخوانی سیستم پایه گروهبندی کرد.
در ادامه اقدامات actions معتبر برای قانون شرح داده شده است:
- never
- هیچ رکورد حسابرسی تولید نخواهد شد. از این گزینه میتوان برای متوقف ساختن تولید رویداد استفاده کرد. به طور کلی، بهتر است موارد توقف را در ابتدای فهرست قرار دهید تا انتهای آن؛ چرا که رویداد با نخستین قانون منطبق فعال میشود.
- always
- تخصیص یک بافتار حسابرسی (audit context)، پر کردن همیشگی آن در زمان ورود به فراخوانی سیستم، و نوشتن همیشگی یک رکورد در زمان خروج از فراخوانی سیستم.
- -A list,action
- افزودن قانون به ابتدای list با اقدام action.
- -C [f=f | f!=f]
- ساخت یک قانون مقایسه بینفیلدی: فیلد، عملیات، فیلد. میتوانید چندین مقایسه را در یک خط فرمان ارسال کنید. هر یک از آنها باید با -C آغاز شود. هر معادله بینفیلدی با یکدیگر و همچنین با معادلات آغازشونده با -F با عملگر AND ترکیب میشود تا ثبت یک رکورد حسابرسی را فعال کند. ۲ عملگر پشتیبانی میشود: مساوی (=) و نامساوی (!=). فیلدهای معتبر عبارتند از:
- -d list,action
- حذف قانون از list با اقدام action. قانون تنها در صورتی حذف میشود که دقیقاً با نام (یا نامهای) فراخوانی سیستم و تکتک نامها و مقادیر فیلدها مطابقت داشته باشد.
- -F [n=v | n!=v | n<v | n>v | n<=v | n>=v | n&v | n&=v]
- ساخت یک فیلد قانون: نام، عملیات، مقدار. میتوانید تا ۶۴ فیلد را در یک خط فرمان ارسال کنید. هر یک باید با -F آغاز شود. هر معادله فیلد با یکدیگر (و همچنین با معادلات آغازشونده با -C) با عملگر AND ترکیب میشود تا ثبت یک رکورد حسابرسی را فعال کند. ۸ عملگر به ترتیب پشتیبانی میشوند: مساوی، نامساوی، کوچکتر، بزرگتر، کوچکتر یا مساوی، بزرگتر یا مساوی، ماسک بیتی، و تست بیتی. تست بیتی مقادیر را با AND ترکیب کرده و برابری آنها را بررسی میکند؛ ماسک بیتی صرفاً مقادیر را AND میکند. فیلدهایی که شناسه کاربر را میپذیرند میتوانند به جای آن نام کاربر را داشته باشند؛ برنامه نام را به شناسه کاربر تبدیل میکند. همین موضوع برای نام گروهها نیز صادق است. فیلدهای معتبر عبارتند از:
- a0, a1, a2, a3
- به ترتیب، ۴ آرگومان نخست برای یک فراخوانی سیستم. توجه داشته باشید که آرگومانهای رشتهای پشتیبانی نمیشوند؛ چرا که به هسته یک اشارهگر به رشته داده میشود و فعالسازی روی مقدار آدرس یک اشارهگر بعید است کارایی داشته باشد. بنابراین هنگام استفاده از این فیلدها، تنها باید از مقادیر عددی استفاده کنید. این فیلدها به احتمال زیاد در پلتفرمهایی که عملیات سوکت یا IPC را مالتیپلکس میکنند کاربرد دارند.
- arch
- معماری پردازنده (CPU) فراخوانی سیستم. معماری را میتوان با اجرای 'uname -m' به دست آورد. اگر معماری سیستم خود را نمیدانید اما میخواهید از جدول فراخوانی سیستم ۳۲ بیتی استفاده کنید و سیستم شما از ۳۲ بیت پشتیبانی میکند، میتوانید از b32 برای arch استفاده کنید. همین موضوع برای جدول فراخوانی سیستم ۶۴ بیتی نیز صدق میکند که میتوانید از b64 استفاده کنید. به این ترتیب میتوانید قوانینی بنویسید که تا حدودی مستقل از معماری باشند، زیرا نوع خانواده به صورت خودکار شناسایی میشود. با این حال، فراخوانیهای سیستم میتوانند وابسته به معماری باشند و آنچه در x86_64 در دسترس است ممکن است در ppc موجود نباشد. دستور arch باید پیش از گزینه -S قرار گیرد تا auditctl بداند از کدام جدول داخلی برای جستجوی شمارههای فراخوانی سیستم استفاده کند.
- auid
- شناسه اصلی کاربری که با آن وارد سیستم شده است (مخفف audit uid). گاهی به آن loginuid نیز گفته میشود. میتوان از متن حساب کاربری یا شماره آن استفاده کرد.
- devmajor
- شماره اصلی دستگاه (Device Major Number).
- devminor
- شماره فرعی دستگاه (Device Minor Number).
- dir
- مسیر کامل دایرکتوری برای نظارت. این کار یک نظارت بازگشتی بر روی دایرکتوری و کل زیردرخت آن قرار میدهد. این فیلد تنها در فهرست exit قابل استفاده است. گزینه -w را ببینید.
- egid
- شناسه گروه مؤثر (Effective Group ID). میتواند عددی یا نام گروه باشد.
- euid
- شناسه کاربر مؤثر (Effective User ID). میتواند عددی یا نام حساب کاربری باشد.
- exe
- مسیر مطلق به برنامهای که این قانون هنگام اجرای آن اعمال خواهد شد. از عملگرهای = و != پشتیبانی میکند. توجه داشته باشید که برای هر قانون تنها یک بار میتوانید از این گزینه استفاده کنید.
- exit
- مقدار خروجی از یک فراخوانی سیستم. اگر کد خروج یک errno باشد، میتوانید از نمایش متنی آن نیز استفاده کنید.
- fsgid
- شناسه گروه سیستمفایل (Filesystem Group ID). میتواند عددی یا نام گروه باشد.
- fstype
- نوع سیستمفایل. این فیلد با فهرست قوانین filesystem استفاده میشود. تنها مقادیر پشتیبانیشده عبارتند از: cgroup، cgroup2، debugfs و tracefs.
- fsuid
- شناسه کاربر سیستمفایل (Filesystem User ID). میتواند عددی یا نام حساب کاربری باشد.
- filetype
- نوع فایل هدف. میتواند file، dir، socket، link، character، block یا fifo باشد.
- gid
- شناسه گروه (Group ID). میتواند عددی یا نام گروه باشد.
- inode
- شماره Inode.
- key
- تنظیم یک کلید فیلتر بر روی یک قانون حسابرسی. کلید فیلتر یک رشته متنی دلخواه تا ۳۱ بایت است. این کلید میتواند رکوردهای حسابرسی تولیدشده توسط یک قانون را به طور یکتا مشخص کند. کاربرد معمول آن زمانی است که چندین قانون دارید که در کنار یکدیگر یک الزام امنیتی را برآورده میسازند. مقدار کلید را میتوان با ausearch جستجو کرد تا بدون توجه به اینکه کدام قانون رویداد را فعال کرده است، نتایج آن را بیابید. همچنین میتوان از کلید در حذف همه قوانین (-D) و فهرست کردن قوانین (-l) برای انتخاب قوانینی با یک کلید مشخص استفاده کرد. اگر میخواهید رویدادهای ثبتشده را به روشهای مختلف جستجو کنید یا پلاگینی برای auditd دارید که برای کمک به تحلیل خود از کلید استفاده میکند، میتوانید بیش از یک کلید در یک قانون داشته باشید.
- msgtype
- این فیلد برای مطابقت با نوع رکورد رویداد استفاده میشود و تنها باید در فهرستهای فیلتر exclude یا user به کار رود.
- obj_uid
- شناسه کاربر شیء (Object's UID).
- obj_gid
- شناسه گروه شیء (Object's GID).
- obj_user
- کاربر SELinux منبع (Resource's SE Linux User).
- obj_role
- نقش SELinux منبع (Resource's SE Linux Role).
- obj_type
- نوع SELinux منبع (Resource's SE Linux Type).
- obj_lev_low
- سطح پایین SELinux منبع (Resource's SE Linux Low Level).
- obj_lev_high
- سطح بالای SELinux منبع (Resource's SE Linux High Level).
- path
- درج یک نظارت برای شیء سیستمفایل در path. شما نمیتوانید نظارتی روی دایرکتوری سطح بالا (top level directory) درج کنید؛ این کار توسط هسته ممنوع شده است. کاراکترهای عمومی (Wildcards) نیز پشتیبانی نمیشوند و هشدار تولید خواهند کرد. شیوه عملکرد نظارتها از طریق ردیابی داخلی inode است. این فیلد تنها در فهرست exit قابل استفاده است.
- perm
- فیلتر مجوز برای عملیات فایل. نوع دسترسی را که نظارت بر سیستمفایل بر اساس آن فعال میشود مشخص کنید: r=read، w=write، x=execute، a=attribute change. این مجوزها، مجوزهای استاندارد فایل نیستند؛ بلکه نوع فراخوانی سیستمی هستند که چنین کاری را انجام میدهد. فراخوانیهای سیستم خواندن و نوشتن از این مجموعه حذف شدهاند چرا که لاگها را بیش از حد شلوغ میکردند؛ در عوض برای خواندن یا نوشتن، فلگهای open بررسی میشوند تا مشخص شود چه مجوزی درخواست شده است. فیلد perm تنها در فهرست exit قابل استفاده است. میتوانید بدون مشخص کردن فراخوانی سیستم از این گزینه استفاده کنید و هسته فراخوانیهای سیستمی را که مجوزهای درخواستی را برآورده میکنند انتخاب خواهد کرد. این کار همچنین نیازمند ارائه یک پارامتر arch پیش از فیلد perm است تا هسته بتواند فراخوانیهای سیستم مورد نیاز را بهتر تعیین کند. عدم ارائه arch باعث میشود تمامی فراخوانیهای سیستم مشمول حسابرسی شوند که این امر کارایی سیستم را کاهش میدهد.
- pers
- شماره ویژگی سیستمعامل (OS Personality Number).
- pid
- شناسه فرآیند (Process ID).
- ppid
- شناسه فرآیند والد (Parent's Process ID).
- saddr_fam
- شماره خانواده آدرس همانگونه که در مسیر /usr/include/bits/socket.h مشخص شده است. برای نمونه، IPv4 برابر ۲ و IPv6 برابر ۱۰ خواهد بود.
- sessionid
- شناسه نشست ورود کاربر (User's login session ID).
- subj_user
- کاربر SELinux برنامه (Program's SE Linux User).
- subj_role
- نقش SELinux برنامه (Program's SE Linux Role).
- subj_type
- نوع SELinux برنامه (Program's SE Linux Type).
- subj_sen
- حساسیت SELinux برنامه (Program's SE Linux Sensitivity).
- subj_clr
- سطح شفافیت SELinux برنامه (Program's SE Linux Clearance).
- sgid
- شناسه گروه ذخیرهشده (Saved Group ID). صفحه راهنمای getresgid(2) را ببینید.
- success
- اگر مقدار خروجی >= 0 باشد این مقدار true/yes است، در غیر این صورت false/no میباشد. هنگام نوشتن قانون، از 1 برای true/yes و از 0 برای false/no استفاده کنید.
- suid
- شناسه کاربر ذخیرهشده (Saved User ID). صفحه راهنمای getresuid(2) را ببینید.
- uid
- شناسه کاربر (User ID). میتواند عددی یا نام حساب کاربری باشد.
- -k key
- تنظیم یک کلید فیلتر روی یک قانون حسابرسی. این شیوه هنگام استفاده با نظارتها (watches) منسوخ شده است. نظارتها را به شکل قوانین فراخوانی سیستم تبدیل کنید. این گزینه همچنان برای استفاده با حذف یا فهرست کردن قوانین معتبر است.
- -p [r|w|x|a]
- توصیف نوع دسترسی مجوزی که نظارت سیستمفایل بر اساس آن فعال میشود. این گزینه منسوخ شده است؛ نظارتها را به شکل فراخوانی سیستم تبدیل کنید.
- -S [Syscall name or number|all]
- هر name یا number فراخوانی سیستم میتواند استفاده شود. کلمه all نیز میتواند استفاده شود. اگر فراخوانی سیستم مشخصشده توسط برنامهای انجام شود، یک رکورد حسابرسی آغاز خواهد شد. اگر یک قانون فیلد داده شود و هیچ فراخوانی سیستمی مشخص نشود، به صورت پیشفرض تمام فراخوانیهای سیستم را شامل خواهد شد. همچنین میتوانید با استفاده از چندین گزینه -S در یک قانون، چند فراخوانی سیستم را مشخص کنید. انجام این کار کارایی را افزایش میدهد زیرا قوانین کمتری نیاز به ارزیابی خواهند داشت. به عنوان روشی جایگزین، میتوانید فهرستی از نامهای فراخوانی سیستم جداشده با کاما را ارسال کنید. اگر بر روی یک سیستم دو معماری (مانند x86_64) هستید، باید آگاه باشید که auditctl صرفاً متن را میگیرد، آن را برای معماری بومی (در این مورد b64) جستجو میکند و آن قانون را به هسته میفرستد. اگر هیچ دستور arch دیگری وجود نداشته باشد، بر روی فراخوانیهای سیستم ۳۲ و ۶۴ بیتی اعمال خواهد شد. این مسئله میتواند اثرات نامطلوبی داشته باشد زیرا هیچ تضمینی وجود ندارد که یک فراخوانی سیستم در هر دو رابط ۳۲ و ۶۴ بیتی شماره یکسانی داشته باشد. احتمالاً مایل خواهید بود این مورد را کنترل کرده و ۲ قانون بنویسید: یکی با arch برابر با b32 و دیگری با b64 تا مطمئن شوید هسته رویدادهای مد نظر شما را مییابد. برای اطلاعات بیشتر به توضیحات فیلد arch مراجعه کنید.
- -w path
- قرار دادن یک نظارت بر روی path. اگر مسیر یک فایل باشد، تقریباً معادل استفاده از گزینه -F path در یک قانون فراخوانی سیستم است. اگر نظارت بر روی یک دایرکتوری باشد، تقریباً معادل استفاده از گزینه -F dir در یک قانون فراخوانی سیستم است. شیوه -w برای نوشتن نظارتها برای سازگاری با گذشته در نظر گرفته شده و به دلیل کارایی ضعیف سیستم منسوخ شده است. نظارتهای این چنینی را به شکل مبتنی بر فراخوانی سیستم تبدیل کنید. تنها گزینههای معتبر هنگام استفاده از یک نظارت، -p و -k هستند.
- -W path
- حذف یک نظارت برای شیء سیستمفایل در path. قانون باید دقیقاً مطابقت داشته باشد. برای اطلاعات بیشتر توضیحات -d را ببینید.
نکات کارایی (PERFORMANCE TIPS)
قوانین فراخوانی سیستم برای هر فراخوانی سیستم در هر برنامه ارزیابی میشوند. اگر ۱۰ قانون فراخوانی سیستم داشته باشید، هر برنامه بر روی سیستم شما در حین فراخوانی سیستم دچار تأخیر میشود در حالی که سیستم حسابرسی تکتک قوانین را ارزیابی میکند. تعداد بیش از حد قوانین فراخوانی سیستم به کارایی آسیب میزند. سعی کنید هر زمان که فیلتر، اقدام، کلید و فیلدها یکسان هستند، تا حد امکان آنها را ادغام کنید. برای نمونه:
auditctl -a always,exit -F arch=b64 -S openat -F success=0
auditctl -a always,exit -F arch=b64 -S truncate -F success=0
میتواند به صورت یک قانون بازنویسی شود:
auditctl -a always,exit -F arch=b64 -S openat -S truncate -F success=0
همچنین سعی کنید تا جای ممکن از حسابرسی سیستمفایل استفاده کنید. این کار کارایی را بهبود میبخشد. برای نمونه، اگر میخواهید مانند بالا تمام openها و truncateهای ناموفق را ضبط کنید، اما تنها به فایلهای موجود در /etc اهمیت میدهید و فایلهای /usr یا /sbin برایتان مهم نیستند، استفاده از این قانون ممکن است:
auditctl -a always,exit -F arch=b64 -S openat,truncate -F dir=/etc -F success=0
این کارایی بالاتری خواهد داشت زیرا هسته آن را در تکتک فراخوانیهای سیستم ارزیابی نخواهد کرد. این مورد توسط کد حسابرسی سیستمفایل مدیریت شده و تنها در فراخوانیهای سیستم مرتبط با سیستمفایل بررسی میشود.
مثالها (EXAMPLES)
برای مشاهده تمامی فراخوانیهای سیستم انجامشده توسط یک برنامه خاص:
# By pid: auditctl -a always,exit -S all -F pid=1005 # By executable path auditctl -a always,exit -S all -F exe=/usr/bin/ls
برای مشاهده فایلهای بازشده توسط یک کاربر خاص:
auditctl -a always,exit -S openat -F auid=510
برای مشاهده فراخوانیهای ناموفق openat:
auditctl -a always,exit -S openat -F success=0
برای نظارت بر تغییرات یک فایل (۲ روش برای بیان):
auditctl -w /etc/shadow -p wa # Note this slows the system auditctl -a always,exit -F arch=b64 -F path=/etc/shadow -F perm=wa
برای نظارت بازگشتی بر تغییرات یک دایرکتوری (۲ روش برای بیان):
auditctl -w /etc/ -p wa # Note this slows the system auditctl -a always,exit -F arch=b64 -F dir=/etc/ -F perm=wa
برای بررسی اینکه آیا یک مدیر به فایلهای کاربران دیگر دسترسی دارد یا خیر:
auditctl -a always,exit -F dir=/home/ -F uid=0 -C auid!=obj_uid
این یک نمونه از فایل قوانین است:
# Remove all existing rules -D # Never record sudo invocations -A exclude,always -F exe=/usr/bin/sudo
غیرفعال بهصورت پیشفرض (DISABLED BY DEFAULT)
در بسیاری از سیستمها auditd به گونهای پیکربندی شده است که یک قانون -a never,task را به صورت پیشفرض نصب کند. این قانون باعث میشود هر فرآیند جدید از تمام پردازشهای قوانین حسابرسی صرفنظر کند. این کار معمولاً برای جلوگیری از بار اضافی اندک ناشی از حسابرسی فراخوانیهای سیستم انجام میشود. اگر میخواهید از auditd استفاده کنید، باید با حذف 10-no-audit.rules و افزودن 10-base-config.rules به دایرکتوری قوانین حسابرسی، آن قانون را حذف کنید.
اگر قوانین حسابرسی تعریف کردهاید که در زمان مورد انتظار مطابقت نمییابند، دستور auditctl -l را بررسی کنید تا مطمئن شوید قانون never,task در آنجا وجود ندارد.
فایلها (FILES)
- /etc/audit/audit.rules /etc/audit/audit-stop.rules
همچنین ببینید (SEE ALSO)
نویسنده (AUTHOR)
Steve Grubb
| سپتامبر ۲۰۲۳ | Red Hat |