امن‌سازی Oracle Linux 9 (مقاله بیست و چهارم): مدیریت دسترسی فایل‌های لاگ (Logfiles Configuration)

در قسمت قبل

پیکربندی لاگ‌برداری

انجام شد.

۱. الزامات CIS Benchmark (بخش 6.2.4)

(شماره‌گذاری‌های تکراری اصلاح و مطابق استاندارد تنظیم شدند):

  • 6.2.4 Configure Logfiles
    • 6.2.4.1 Ensure access to all logfiles has been configured (Automated)

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

فایل‌های لاگ موجود در مسیر /var/log/ حاوی اطلاعات بسیار حساسی از جمله خطاهای سیستمی، رویدادهای امنیتی، اطلاعات احراز هویت و گاهی داده‌های اپلیکیشن‌ها هستند. اگر مجوزهای دسترسی (Permissions) این فایل‌ها به درستی تنظیم نشود، مهاجمین یا کاربران غیرمجاز (Local Users) می‌توانند با خواندن آن‌ها اطلاعات مفیدی برای نفوذ به دست آورند (Information Disclosure) یا لاگ‌ها را تغییر دهند.

استاندارد CIS الزام می‌کند که فایل‌های لاگ نباید توسط کاربران عادی قابل خواندن یا نوشتن باشند. به طور کلی، دسترسی فایل‌های لاگ باید حداکثر 0640 (گروه و دیگران فاقد دسترسی نوشتن/اجرا و دیگران فاقد دسترسی خواندن) باشد.

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

  • وضعیت تداخل: بدون تداخل (در صورت رعایت تفکیک مسیرها)
  • توضیحات و الزامات اوراکل:
    • تفکیک مسیرها: اسکریپت‌ها و دستورات این بخش منحصراً مسیر /var/log/ را هدف قرار می‌دهند. لاگ‌های اوراکل (ADR) در مسیرهایی مانند $ORACLE_BASE/diag/ قرار دارند و توسط ابزارهای اختصاصی خود مدیریت می‌شوند.
    • عدم تداخل: اعمال این سطح دسترسی روی /var/log/ هیچ‌گونه اختلالی در عملکرد دیتابیس اوراکل یا Grid Infrastructure ایجاد نمی‌کند، زیرا اوراکل با کاربرها و گروه‌های اختصاصی خود (oracle, grid, oinstall, dba) لاگ‌های پایگاه داده را مدیریت می‌کند.
    • ابزارهای جانبی: اگر سرویس‌های جانبی و مانیتورینگ اوراکل (مانند TFA یا OSWatcher) لاگ‌هایی را در /var/log/ می‌نویسند یا نیاز به خواندن آن‌ها دارند، باید اطمینان حاصل شود که ابزارهای جمع‌آوری لاگ با کاربر root اجرا می‌شوند تا دچار مشکل سطح دسترسی (Permission Denied) نگردند.

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

این اسکریپت مسیر /var/log را برای یافتن فایل‌ها یا دایرکتوری‌هایی با دسترسی بیش از حد باز (Group write/execute یا Other read/write/execute) بررسی می‌کند:

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

modules/audit_24_Logfiles_Configuration.sh

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

Bash for Oracle DBAs

#!/bin/bash
# Script: audit24.sh
# Purpose: Audit CIS 6.2.4 Logfiles Access Configuration

echo "=========================================================================="
echo " CIS Requirement: Logfiles Access Configuration (CIS 6.2.4)"
echo " - Ensure all general logfiles have permissions of 0640 or more restrictive."
echo " - Ensure /var/log/btmp permissions are 0600 or more restrictive."
echo " - Ensure /var/log/wtmp and lastlog permissions are 0664 or more restrictive."
echo " - Ensure log directories have permissions of 0750 or more restrictive."
echo "--------------------------------------------------------------------------"
echo " Oracle Context & Exceptions:"
echo " - INTERFERENCE: None (Path Isolation)."
echo " - EXPLANATION: Actions target /var/log/. Oracle logs (ADR) reside in"
echo "   \$ORACLE_BASE/diag/ and are managed by Oracle's specific users/groups."
echo " - NOTE: If Oracle auxiliary tools (like TFA or OSWatcher) read /var/log/,"
echo "   they must run as root to avoid 'Permission Denied' errors."
echo "=========================================================================="

AUDIT_STATUS="PASS"

# 1. Check general log files (Expected: max 0640 -> Forbidden bits: 0137)
BAD_FILES=$(find /var/log -type f \( ! -name "wtmp" -a ! -name "lastlog" -a ! -name "btmp" \) -perm /0137 2>/dev/null)
if [ -n "$BAD_FILES" ]; then
    echo "[ FAIL ] General log files with unauthorized permissions (looser than 0640):"
    find /var/log -type f \( ! -name "wtmp" -a ! -name "lastlog" -a ! -name "btmp" \) -perm /0137 -ls 2>/dev/null
    AUDIT_STATUS="FAIL"
else
    echo "[ OK ] General log files permissions are secure."
fi

# 2. Check btmp file (Expected: max 0600 -> Forbidden bits: 0177)
if [ -f /var/log/btmp ]; then
    BAD_BTMP=$(find /var/log/btmp -type f -perm /0177 2>/dev/null)
    if [ -n "$BAD_BTMP" ]; then
        echo "[ FAIL ] /var/log/btmp has unauthorized permissions (looser than 0600):"
        ls -l /var/log/btmp
        AUDIT_STATUS="FAIL"
    else
        echo "[ OK ] /var/log/btmp permission is secure."
    fi
fi

# 3. Check wtmp and lastlog (Expected: max 0664 -> Forbidden bits: 0113)
BAD_WTMP=$(find /var/log -type f \( -name "wtmp" -o -name "lastlog" \) -perm /0113 2>/dev/null)
if [ -n "$BAD_WTMP" ]; then
    echo "[ FAIL ] wtmp/lastlog have unauthorized permissions (looser than 0664):"
    find /var/log -type f \( -name "wtmp" -o -name "lastlog" \) -perm /0113 -ls 2>/dev/null
    AUDIT_STATUS="FAIL"
else
    echo "[ OK ] wtmp/lastlog permissions are secure."
fi

# 4. Check log directories (Expected: max 0750 -> Forbidden bits: 0027)
BAD_DIRS=$(find /var/log -type d -perm /0027 2>/dev/null)
if [ -n "$BAD_DIRS" ]; then
    echo "[ FAIL ] Log directories with unauthorized permissions (looser than 0750):"
    find /var/log -type d -perm /0027 -ls 2>/dev/null
    AUDIT_STATUS="FAIL"
else
    echo "[ OK ] Log directories permissions are secure."
fi

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

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

این اسکریپت به صورت خودکار مجوز تمامی فایل‌ها و دایرکتوری‌های زیرمجموعه /var/log را اصلاح کرده و دسترسی‌های اضافی را سلب می‌کند.

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

modules/remediate_24_Logfiles_Configuration.sh

#!/bin/bash
# Script: remediation24.sh
# Purpose: Restrict permissions on logfiles (CIS 6.2.4) with Oracle Exceptions

if [ "$EUID" -ne 0 ]; then echo "Please run as root"; exit 1; fi

echo "=========================================================================="
echo " [ Remediation ] Section 24: Logfiles Access Permissions"
echo " Applying CIS Requirements while maintaining Oracle/System exceptions:"
echo " - Setting general logs to max 0640."
echo " - Setting directories to max 0750."
echo " - Setting btmp to 0600 (root:utmp)."
echo " - Setting wtmp & lastlog to 0664 (root:utmp)."
echo "=========================================================================="

# 1. Restrict general files (excluding exceptions)
find /var/log -type f \( ! -name "wtmp" -a ! -name "lastlog" -a ! -name "btmp" \) -exec chmod g-wx,o-rwx "{}" +

# 2. Restrict directories
find /var/log -type d -exec chmod g-w,o-rwx "{}" +

# 3. Apply exceptions for btmp
if [ -f /var/log/btmp ]; then
    chmod 0600 /var/log/btmp
    chown root:utmp /var/log/btmp
fi

# 4. Apply exceptions for wtmp and lastlog
for file in /var/log/wtmp /var/log/lastlog; do
    if [ -f "$file" ]; then
        chmod 0664 "$file"
        chown root:utmp "$file"
    fi
done

echo "[+] Logfiles permissions successfully restricted and exceptions applied."

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

سرویس Auditd و نگهداری لاگ‌ها

می رویم