auditd به پرسش‌هایی پاسخ می‌دهد که پس از رخداد پدید می‌آیند: چه کسی این فایل را تغییر داد، این کاربر کی ساخته شد، این فرایند از کجا آغاز شد. و هیچ ابزار دیگری به آن‌ها پاسخ نمی‌دهد — گزارش‌های برنامه‌ها چنین اطلاعاتی ندارند، و تاریخچه پوسته را همان کسی ویرایش می‌کند که برجایش گذاشته است.

دشواری آن است که نصب بسته به‌خودی‌خود چیزی به شما نمی‌دهد. قاعده پیش‌فرض عملاً وجود ندارد، ژورنال نوشته می‌شود اما در ماهیت تهی است، و این در بدترین لحظه ممکن آشکار می‌شود — وقتی داده لازم است و نیست.

نصب

sudo apt install auditd audispd-plugins
sudo systemctl status auditd

یک ویژگی: در برخی نسخه‌ها auditd از راه systemctl restart بازراه‌اندازی نمی‌شود — سرویس با فرمان خودش گردانده می‌شود. قواعد چنین دوباره خوانده می‌شوند:

sudo augenrules --load
sudo auditctl -l

فرمان دوم نشان می‌دهد واقعاً چه چیزی بار شده است. به آن اعتماد کنید نه به محتوای فایل‌ها.

مجموعه قواعد

قواعد همچون فایلی جداگانه در /etc/audit/rules.d/ گذاشته می‌شوند. در ادامه کمینه‌ای می‌آید که خودش را جبران می‌کند: به بیشتر پرسش‌هایی که هنگام یک رخداد پیش می‌آیند پاسخ می‌دهد بی‌آنکه دیسک را دفن کند.

sudo tee /etc/audit/rules.d/50-baseline.rules <<'EOF'
## کاربران و اختیارها
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/sudoers -p wa -k privileges
-w /etc/sudoers.d/ -p wa -k privileges

## دسترسی SSH
-w /etc/ssh/sshd_config -p wa -k sshd_config
-w /root/.ssh/ -p wa -k ssh_keys

## وظیفه‌های زمان‌بندی‌شده
-w /etc/crontab -p wa -k cron
-w /etc/cron.d/ -p wa -k cron
-w /var/spool/cron/ -p wa -k cron

## پیمانه‌های هسته
-w /sbin/insmod -p x -k modules
-w /sbin/modprobe -p x -k modules
-a always,exit -F arch=b64 -S init_module -S delete_module -k modules

## کاربرد sudo و su
-w /usr/bin/sudo -p x -k privileged
-w /bin/su -p x -k privileged
EOF
sudo augenrules --load

نحو کوتاه است: -w مسیری برای پایش، -p wa یعنی واکنش به نوشتن و تغییر ویژگی‌ها، -p x به اجرا، و -k کلیدی برای جست‌وجوی بعدی. و همین کلیدها آسودگی اصلی‌اند: بدون آن‌ها جست‌وجو در ژورنال به الک‌کردن یک گیگابایت متن بدل می‌شود.

چه چیزی در آن فهرست نیست و چرا

راهنماها اغلب پیشنهاد می‌کنند هر فراخوان execve ثبت شود — یعنی هر اجرای هر برنامه‌ای. وسوسه‌اش فهمیدنی است: تصویری کامل از آنچه انجام شده. اما در عمل روی سروری که کار می‌کند این روزانه صدها مگابایت می‌سازد، بخش چشمگیری از پردازنده را می‌خورد، و سبب می‌شود ژورنال زودتر از آنکه لازم شود هرس گردد. اگر چنین سطحی از جزئیات لازم است، آن را تنگ فعال کنید — برای یک کاربر یا برای مدت یک بررسی.

همین درباره پایش پوشه سایت هم صادق است: نوشتن در آن پیوسته است، و آن قاعده ژورنال را به جریانی از رویدادهای بی‌معنا بدل می‌کند.

خواندن

با کلید جست‌وجو کنید، با ترجمه شناسه‌های عددی به نام‌ها:

sudo ausearch -k identity -i
sudo ausearch -k privileges -i -ts today

پرچم -i برای خوانایی ضروری است: بدون آن به‌جای نام کاربران و فراخوان‌های سامانه عدد می‌گیرید. و -ts بازه را محدود می‌کند (today، recent یا تاریخی مشخص).

خلاصه برای یک بازه:

sudo aureport --summary -i
sudo aureport --auth -i --failed

در ثبت یک رویداد سه میدان جالب‌اند: auid شناسه کاربری که نشست را آغاز کرده، uid هویتی که کنش زیر آن اجرا شده، و exe برنامه‌ای که آن را انجام داده. و تفاوت میان auid و uid پاسخ پرسش «دقیقاً چه کسی root شد» است: uid=0 با auid فردی مشخص، مقصر را بی‌ابهام نام می‌برد، هر چه درون نشست خود را نامیده باشد.

دیسک

تنظیمات اندازه در /etc/audit/auditd.conf زندگی می‌کنند:

max_log_file = 50
num_logs = 5
max_log_file_action = ROTATE
space_left = 500
space_left_action = SYSLOG

و جداگانه به disk_full_action نگاه کنید. برخی پیکربندی‌ها به‌صورت پیش‌فرض هنگام پرشدن دیسک سامانه را می‌ایستانند — رفتاری که روی ماشین‌هایی با الزام‌های ممیزی توجیه‌پذیر است و روی وب‌سرور یکسره نابجاست. این مقدار را پیش از تمام‌شدن دیسک بررسی کنید.

قواعد تغییرناپذیر

سطر -e 2 در پایان فایل قواعد، تغییر آن‌ها را تا بازراه‌اندازی ممنوع می‌کند — از جمله برای کسی که root گرفته است. و این ارزش ژورنال را آشکارا بالا می‌برد: مهاجم نمی‌تواند پایش را بدون بازراه‌اندازی ماشین خاموش کند، و بازراه‌اندازی خودش چشمگیر است.

روی دیگر سکه آشکار است: شما هم نمی‌توانید قواعد خودتان را بدون بازراه‌اندازی عوض کنید. این را پس از آنکه مجموعه قواعد جا افتاد و یک ماه با آن زیستید فعال کنید.

چرا این دردسر روی سروری معمولی

auditd از هیچ چیزی پیشگیری نمی‌کند. ارزشش دقیقاً یک‌بار آشکار می‌شود — وقتی باید ترتیب رویدادها بازسازی شود، و داده یا هست یا نیست. و به‌عقب نمی‌توان گردش آورد، به همین سبب مجموعه قواعد از پیش گذاشته می‌شود و سپس به حال خود رها می‌گردد.

نشانه‌ای عملی از درستی تنظیم: فهرست قواعد تهی نیست، ژورنال بی‌مهار رشد نمی‌کند، و رویدادهای با کلید identity و privileges کم پیش می‌آیند و هر یک توضیح‌پذیرند. شکل این در یک صفحه را نمایش پایین نشان می‌دهد.