امن‌سازی Oracle Linux 9 (مقاله یازدهم): حذف کلاینت‌های غیرضروری سرویس‌ها (CIS 2.2 )

در قسمت قبل

غیرفعال‌سازی و حذف سرویس‌های غیرضروری

انجام شد.

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

این بخش از استاندارد بر پیکربندی و حذف نرم‌افزارهای کلاینت (Client Services) تمرکز دارد:

2.2.1 Ensure ftp client is not installed (Automated)

2.2.2 Ensure ldap client is not installed (Automated)

2.2.3 Ensure nis client is not installed (Automated)

2.2.4 Ensure telnet client is not installed (Automated)

2.2.5 Ensure tftp client is not installed (Automated)

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

  • مفهوم: وجود ابزارهای کلاینت برای سرویس‌های شبکه‌ای روی سرور، حتی اگر سرویس‌دهنده (Server) آن‌ها فعال نباشد، یک ریسک امنیتی است. در صورت نفوذ به سرور، مهاجم می‌تواند از این ابزارها برای حرکت جانبی در شبکه (Lateral Movement) یا استخراج داده‌ها (Data Exfiltration) استفاده کند.
  • دلیل امنیتی: پروتکل‌هایی مانند FTP، Telnet و TFTP اطلاعات (شامل نام کاربری و رمز عبور) را به صورت متن ساده (Clear-text) و بدون رمزنگاری منتقل می‌کنند که در برابر حملات شنود بسیار آسیب‌پذیرند. NIS نیز یک پروتکل منسوخ و ناامن است.

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

  • وضعیت کلی (بدون تداخل): هیچ تداخلی وجود ندارد. دیتابیس اوراکل و Grid Infrastructure برای انتقال فایل، نصب یا مدیریت، از پروتکل‌های امن مانند SSH ،SCP و SFTP استفاده می‌کنند. کلاینت‌های FTP ،Telnet ،TFTP و NIS به هیچ‌وجه برای عملکرد اوراکل مورد نیاز نیستند و حذف آن‌ها کاملاً ایمن است.
  • نکته درباره LDAP (بسته openldap-clients): تنها در صورتی که زیرساخت سازمان شما برای احراز هویت متمرکز کاربران سیستم‌عامل از سرور LDAP استفاده می‌کند، از حذف این بسته خودداری کنید. در غیر این صورت (که در اکثر دیتابیس‌های ایزوله چنین است)، حذف آن کاملاً بی‌خطر و توصیه‌شده است.

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

برای بررسی وجود این کلاینت‌ها روی سرور، از اسکریپت زیر استفاده کنید:

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

modules/audit_11_Remove_Unused_Clients.sh

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

Bash for Oracle DBAs

#!/bin/bash
# Script: audit11.sh
# Purpose: Audit for Service Clients (CIS 2.2)

echo "=========================================================================="
echo " CIS Requirement: 2.2 Service Clients"
echo " - Ensure unnecessary client packages are not installed."
echo " Oracle Context:"
echo " - Oracle DB/Grid uses SQL*Net and built-in LDAP resolution libraries."
echo " - OS-level clients like ftp, telnet, and openldap-clients are NOT needed."
echo "=========================================================================="

FAIL_COUNT=0
CLIENT_PACKAGES=(ftp openldap-clients ypbind telnet tftp)

echo -e "\n[*] Auditing Service Clients..."
for pkg in "${CLIENT_PACKAGES[@]}"; do
    if rpm -q "$pkg" &>/dev/null; then
        echo -e "  \e[31m[FAIL]\e[0m Package '$pkg' is INSTALLED."
        FAIL_COUNT=$((FAIL_COUNT + 1))
    else
        echo -e "  \e[32m[PASS]\e[0m Package '$pkg' is NOT installed."
    fi
done

if [ "$FAIL_COUNT" -eq 0 ]; then
    echo -e "\n\e[32m[+] AUDIT RESULT: PASS\e[0m"
else
    echo -e "\n\e[31m[-] AUDIT RESULT: FAIL ($FAIL_COUNT issues found)\e[0m"
fi

5. نحوه اعمال با Bash (Remediation Script)

اسکریپت زیر به صورت خودکار تمام بسته‌های کلاینت ناامن و غیرضروری را از سیستم‌عامل حذف (Remove) می‌کند:

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

modules/remediate_11_Remove_Unused_Clients.sh

#!/bin/bash
# Script: remediation11.sh
# Purpose: Remove unnecessary service clients (CIS 2.2)

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

echo "=========================================================================="
echo " Applying Remediation for CIS 2.2 (Service Clients)"
echo " Oracle Context: Safe for DB/RAC. No dependencies on these legacy clients."
echo "=========================================================================="

CLIENT_PACKAGES=(ftp openldap-clients ypbind telnet tftp)

echo -e "\n[*] Removing unnecessary service clients..."
for pkg in "${CLIENT_PACKAGES[@]}"; do
    if rpm -q "$pkg" &>/dev/null; then
        dnf remove -y "$pkg" > /dev/null 2>&1
        echo -e "  \e[32m[OK]\e[0m Removed '$pkg'"
    else
        echo -e "  \e[32m[OK]\e[0m Package '$pkg' is already removed or not installed."
    fi
done

echo -e "\n\e[32m[+] REMEDIATION APPLIED SUCCESSFULLY\e[0m"

توجه: در صورت استفاده از LDAP سازمانی، بسته openldap-clients را از لیست بالا خارج کنید.

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

پیکربندی همگام‌سازی زمان

می رویم.