امن‌سازی Oracle Linux 9 (مقاله بیست و پنجم): سرویس Auditd و نگهداری لاگ‌ها

در قسمت قبل

مدیریت دسترسی فایل‌های لاگ

انجام شد.

۱. الزامات CIS Benchmark (بخش6.3.1 و 6.3.2)

این مقاله به بررسی نصب، فعال‌سازی و تنظیمات نگهداری داده‌های سرویس auditd اختصاص دارد

  • 6.3.1 Configure auditd Service
  • 6.3.1.1 Ensure auditd packages are installed
  • 6.3.1.2 Ensure auditing for processes that start prior to auditd is enabled (audit=1)
  • 6.3.1.3 Ensure audit_backlog_limit is sufficient
  • 6.3.1.4 Ensure auditd service is enabled and active
  • 6.3.2 Configure Data Retention
  • 6.3.2.1 Ensure audit log storage size is configured (max_log_file)
  • 6.3.2.2 Ensure audit logs are not automatically deleted (max_log_file_action)
  • 6.3.2.3 Ensure system is disabled when audit logs are full (space_left_action, admin_space_left_action)
  • 6.3.2.4 Ensure system warns when audit logs are low on space (space_left)

۲. مفهوم و دلیل امنیتی (Concept & Rationale)

سرویس auditd ابزار اصلی حسابرسی (Auditing) در لینوکس است که رخدادهای امنیتی را ثبت می‌کند. برای اینکه فرآیندهای قبل از اجرای سرویس auditd نیز ثبت شوند، باید پارامترهای audit=1 و audit_backlog_limit=8192 در GRUB تنظیم گردند. همچنین برای جلوگیری از بین رفتن لاگ‌ها، باید سایز فایل لاگ مشخص شده و از حذف خودکار آن‌ها جلوگیری شود. از نظر امنیتی، استاندارد پیشنهاد می‌کند در صورت پر شدن دیسک لاگ، سیستم هشدار دهد یا متوقف شود تا مهاجم نتواند بدون ثبت شدن فعالیت‌هایش در سیستم اقدامی انجام دهد.

۳. بررسی سازگاری با پایگاه داده Oracle (RAC & Grid)

  • تداخل بحرانی (Availability Risk): بند 6.3.2.3 الزام می‌کند که در صورت پر شدن لاگ (admin_space_left_action = halt یا single)، سیستم متوقف شود. توقف سیستم‌عامل در سرورهای Production پایگاه داده اوراکل (به‌ویژه در محیط‌های RAC) باعث Downtime شدید و خطر Evict شدن نودها از کلاستر می‌شود.
  • راه‌حل و الزامات اجرایی:
  • برای سرورهای اوراکل، پارامترهای space_left_action و admin_space_left_action در فایل /etc/audit/auditd.conf باید روی SYSLOG ، EMAIL یا EXEC (برای اجرای اسکریپت پاکسازی موقت) تنظیم شوند تا به جای خاموش شدن سرور، صرفاً هشدار ارسال گردد و پایداری سرویس دیتابیس حفظ شود.
  • تخصیص پارتیشن مجزا و اختصاصی با ظرفیت مناسب برای /var/log/audit/ جهت جلوگیری از پر شدن سریع فضای دیسک ریشه (Root Partition) کاملاً الزامی است.

 

۴. نحوه بررسی وضعیت فعلی (Audit Script)

لینک این اسکریپت در github:

modules/audit_25_Auditd_Service_Log_Retention.sh

در صورتی که با bash script  آشنا نیستید، می توانید به آموزشی که برای دیتابیس ادمین ها در سایت گذاشته ام مراجعه کنید.

Bash for Oracle DBAs

#!/bin/bash
# Script: audit25.sh
# Purpose: Audit CIS 6.3.1 & 6.3.2 (Auditd Configuration & Retention)

echo "=========================================================================="
echo " CIS Requirement: Configure auditd Service and Data Retention"
echo "--------------------------------------------------------------------------"
echo " Oracle Context & Exceptions:"
echo " - CRITICAL INTERFERENCE: CIS recommends HALT/SINGLE for space_left_action."
echo " - EXPLANATION: In Oracle DB/RAC environments, halting the OS due to full"
echo "   audit logs causes node eviction and database downtime."
echo " - SOLUTION: Set space_left_action and admin_space_left_action to SYSLOG."
echo "=========================================================================="

AUDIT_STATUS="PASS"

# 1. Packages & Service
if rpm -q audit audit-libs >/dev/null 2>&1; then
    echo "[ PASS ] Packages 'audit' and 'audit-libs' are installed."
else
    echo "[ FAIL ] Packages 'audit' and 'audit-libs' are not installed."
    AUDIT_STATUS="FAIL"
fi

if systemctl is-active auditd >/dev/null 2>&1; then
    echo "[ PASS ] auditd service is active."
else
    echo "[ FAIL ] auditd service is not active."
    AUDIT_STATUS="FAIL"
fi

if systemctl is-enabled auditd >/dev/null 2>&1; then
    echo "[ PASS ] auditd service is enabled."
else
    echo "[ FAIL ] auditd service is not enabled."
    AUDIT_STATUS="FAIL"
fi

# 2. GRUB Configuration
if grubby --info=ALL | grep -q "audit=1"; then
    echo "[ PASS ] GRUB parameter 'audit=1' is present."
else
    echo "[ FAIL ] GRUB parameter 'audit=1' is missing."
    AUDIT_STATUS="FAIL"
fi

if grubby --info=ALL | grep -q "audit_backlog_limit="; then
    echo "[ PASS ] GRUB parameter 'audit_backlog_limit' is present."
else
    echo "[ FAIL ] GRUB parameter 'audit_backlog_limit=' is missing."
    AUDIT_STATUS="FAIL"
fi

# 3. Data Retention Configuration
check_audit_conf() {
    local key=$1
    local expected=$2
    local current=$(grep -E "^${key}\s*=" /etc/audit/auditd.conf | awk -F= '{print $2}' | tr -d ' ')
    if [ "$current" != "$expected" ]; then
         echo "[ FAIL ] auditd.conf: $key is '$current' (Expected: $expected)"
         AUDIT_STATUS="FAIL"
    else
         echo "[ PASS ] auditd.conf: $key is correctly set to '$current'"
    fi
}

check_audit_conf "max_log_file" "24"
check_audit_conf "max_log_file_action" "keep_logs"
check_audit_conf "space_left_action" "SYSLOG"
check_audit_conf "admin_space_left_action" "SYSLOG"

echo "----------------------------------------------------------"
if [ "$AUDIT_STATUS" == "PASS" ]; then
    echo -e "\e[32m[ PASS ] Final Status: Section 25 Auditing Passed Successfully.\e[0m"
else
    echo -e "\e[31m[ FAIL ] Final Status: Section 25 Auditing Failed. Run remediation script.\e[0m"
fi
echo "=========================================================="

۵. نحوه اعمال تنظیمات (Remediation Bash Script)

لینک این اسکریپت در github:

modules/remediate_25_Auditd_Service_Log_Retention.sh

#!/bin/bash
if [ "$EUID" -ne 0 ]; then echo "Please run as root"; exit 1; fi

# 6.3.1.1
dnf install -y audit audit-libs

# 6.3.1.4
systemctl enable --now auditd

# 6.3.1.2 & 6.3.1.3 (GRUB)
grubby --update-kernel=ALL --args="audit=1 audit_backlog_limit=8192"

# 6.3.2 Data Retention (/etc/audit/auditd.conf)
sed -i 's/^max_log_file .*/max_log_file = 24/' /etc/audit/auditd.conf
sed -i 's/^max_log_file_action .*/max_log_file_action = keep_logs/' /etc/audit/auditd.conf
sed -i 's/^space_left .*/space_left = 25%/' /etc/audit/auditd.conf
# Note for Oracle: using SYSLOG instead of halt to prevent DB downtime
sed -i 's/^space_left_action .*/space_left_action = SYSLOG/' /etc/audit/auditd.conf
sed -i 's/^admin_space_left_action .*/admin_space_left_action = SYSLOG/' /etc/audit/auditd.conf

# Restart service
service auditd restart

در قسمت بعد به سراغ:

پیکربندی قوانین حسابرسی

می رویم.