در قسمت قبل
پیکربندی همگامسازی زمان
انجام شد.
۱. الزامات CIS Benchmark (بخش 2.4)
این بخش به امنسازی و محدودسازی دسترسی به سرویسهای زمانبندی وظایف (cron و at) میپردازد. شمارهگذاریهای فایل شما اصلاح شد:
- 2.4.1 Configure cron
- 2.4.1.1 Ensure cron daemon is enabled and active (Automated)
- 2.4.1.2 Ensure permissions on /etc/crontab are configured (Automated)
- 2.4.1.3 Ensure permissions on /etc/cron.hourly are configured (Automated)
- 2.4.1.4 Ensure permissions on /etc/cron.daily are configured (Automated)
- 2.4.1.5 Ensure permissions on /etc/cron.weekly are configured (Automated)
- 2.4.1.6 Ensure permissions on /etc/cron.monthly are configured (Automated)
- 2.4.1.7 Ensure permissions on /etc/cron.d are configured (Automated)
- 2.4.1.8 Ensure crontab is restricted to authorized users (Automated)
- 2.4.2 Configure at
- 2.4.2.1 Ensure at is restricted to authorized users (Automated)
۲. مفهوم و دلیل (Concept & Rationale)
- مفهوم: سرویسهای cron و at برای اجرای زمانبندیشدهی اسکریپتها و دستورات استفاده میشوند. از آنجا که بسیاری از این وظایف در سطح سیستم با دسترسی root اجرا میگردند، هدف از این الزامات جلوگیری از دسترسی غیرمجاز به فایلهای پیکربندی آنهاست.
- دلیل امنیتی: اگر سطح دسترسی پوشهها و فایلهای پیکربندی باز باشد، کاربران غیرمجاز میتوانند با تزریق کدهای مخرب در اسکریپتهای زمانبندیشده، دسترسی خود را ارتقا دهند (Privilege Escalation). محدود کردن دسترسی فقط به کاربران تایید شده و تنظیم مجوزهای 0600 برای فایلها و 0700 برای پوشهها، سطح حمله را به شدت کاهش میدهد.
۳. بررسی سازگاری با پایگاه داده Oracle (RAC, ASM, Grid)
- تداخل بسیار بالا در صورت عدم دقت: مدیران پایگاه داده (DBA) به شدت به cron وابسته هستند (برای اجرای اسکریپتهای بکاپگیری RMAN، پاکسازی لاگها، جمعآوری لاگهای سیستم و مانیتورینگ). محدود کردن بیدقت این سرویس باعث از کار افتادن تمام این فرآیندها میشود.
- راهحل و رفع تداخل: در اجرای بند 2.4.1.8 (ایجاد فایل /etc/cron.allow و حذف /etc/cron.deny)، باید حتماً کاربران oracle و grid فوراً به فایل /etc/cron.allow اضافه شوند. در غیر این صورت، وظایف زمانبندیشده اوراکل مختل خواهد شد.
- عدم تداخل در مجوزها: اعمال محدودیت روی پوشههای /etc/cron.* تداخلی ایجاد نمیکند، زیرا کاربران اوراکل معمولاً از دستور crontab -e استفاده میکنند و وظایف آنها مستقیماً در مسیر /var/spool/cron ذخیره میشود.
۳. نحوه بررسی (Audit Script)
اسکریپت زیر وضعیت سرویس و سطح دسترسی فایلها/پوشههای حیاتی cron و at را بررسی میکند:
لینک این اسکریپت در github:
modules/audit_13_Job_Schedulers_Cron_At.sh
در صورتی که با bash script آشنا نیستید، می توانید به آموزشی که برای دیتابیس ادمین ها در سایت گذاشته ام مراجعه کنید.
Bash for Oracle DBAs
#!/bin/bash
# Script: audit13.sh
# Purpose: Audit Script for Job Schedulers - Cron & At (CIS 2.4)
echo "=========================================================================="
echo " CIS Requirement: 2.4 Job Schedulers"
echo " - Ensure cron daemon is active and permissions are tightly configured."
echo " Oracle Context:"
echo " - CRITICAL: 'oracle' and 'grid' users MUST be allowed to use cron."
echo " - Database backups (RMAN) and maintenance jobs rely heavily on crontab."
echo "=========================================================================="
FAIL_COUNT=0
echo -e "\n[*] Auditing Cron & At Configurations..."
# 1. Check crond service
if systemctl is-enabled crond &>/dev/null && systemctl is-active crond &>/dev/null; then
echo -e " \e[32m[PASS]\e[0m crond service is enabled and active."
else
echo -e " \e[31m[FAIL]\e[0m crond service is NOT enabled/active."
FAIL_COUNT=$((FAIL_COUNT + 1))
fi
# 2. Check /etc/crontab permissions
if [ "$(stat -c "%a %U %G" /etc/crontab 2>/dev/null)" = "600 root root" ]; then
echo -e " \e[32m[PASS]\e[0m /etc/crontab permissions are correct (0600 root:root)."
else
echo -e " \e[31m[FAIL]\e[0m /etc/crontab permissions are incorrect."
FAIL_COUNT=$((FAIL_COUNT + 1))
fi
# 3. Check cron directories permissions
for dir in /etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly /etc/cron.d; do
if [ -d "$dir" ]; then
if [ "$(stat -c "%a %U %G" "$dir" 2>/dev/null)" = "700 root root" ]; then
echo -e " \e[32m[PASS]\e[0m $dir permissions are correct."
else
echo -e " \e[31m[FAIL]\e[0m $dir permissions are incorrect."
FAIL_COUNT=$((FAIL_COUNT + 1))
fi
fi
done
# 4. Check cron access control
if [ ! -f /etc/cron.deny ] && [ -f /etc/cron.allow ] && [ "$(stat -c "%a %U %G" /etc/cron.allow 2>/dev/null)" = "600 root root" ]; then
echo -e " \e[32m[PASS]\e[0m cron.allow exists (0600 root:root) and cron.deny is absent."
else
echo -e " \e[31m[FAIL]\e[0m cron access control is not properly configured."
FAIL_COUNT=$((FAIL_COUNT + 1))
fi
# 5. Check at access control
if [ ! -f /etc/at.deny ] && [ -f /etc/at.allow ] && [ "$(stat -c "%a %U %G" /etc/at.allow 2>/dev/null)" = "600 root root" ]; then
echo -e " \e[32m[PASS]\e[0m at.allow exists (0600 root:root) and at.deny is absent."
else
echo -e " \e[31m[FAIL]\e[0m at access control is not properly configured."
FAIL_COUNT=$((FAIL_COUNT + 1))
fi
# 6. Oracle Context: Check if oracle/grid are whitelisted in cron.allow
if grep -q "^oracle$" /etc/cron.allow 2>/dev/null || grep -q "^grid$" /etc/cron.allow 2>/dev/null; then
echo -e " \e[32m[PASS]\e[0m Oracle/Grid users are correctly whitelisted in /etc/cron.allow."
else
echo -e " \e[31m[FAIL]\e[0m Oracle/Grid users are MISSING from /etc/cron.allow!"
FAIL_COUNT=$((FAIL_COUNT + 1))
fi
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
۴. نحوه اعمال با Bash (Remediation Script)
این اسکریپت دسترسیها را اصلاح کرده و کاربران اوراکل را برای جلوگیری از قطعی بکاپها مجاز میکند:
لینک این اسکریپت در github:
modules/remediate_13_Job_Schedulers_Cron_At.sh
#!/bin/bash
# Script: remediation13.sh
# Purpose: Configure Job Schedulers (Cron & At) (CIS 2.4)
if [ "$EUID" -ne 0 ]; then
echo "Please run as root"
exit 1
fi
echo "=========================================================================="
echo " Applying Remediation for CIS 2.4 (Job Schedulers)"
echo " Oracle Context: Ensuring 'oracle' and 'grid' can execute scheduled jobs."
echo "=========================================================================="
echo -e "\n[*] Configuring Cron and At..."
# 1. Enable and start crond
systemctl enable --now crond > /dev/null 2>&1
echo -e " \e[32m[OK]\e[0m Enabled and started crond service."
# 2. Set permissions for /etc/crontab
chown root:root /etc/crontab
chmod 0600 /etc/crontab
echo -e " \e[32m[OK]\e[0m Set permissions on /etc/crontab."
# 3. Set permissions for cron directories
for dir in /etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly /etc/cron.d; do
if [ -d "$dir" ]; then
chown root:root "$dir"
chmod 0700 "$dir"
fi
done
echo -e " \e[32m[OK]\e[0m Set permissions on /etc/cron.* directories."
# 4. Restrict crontab access
rm -f /etc/cron.deny
touch /etc/cron.allow
chown root:root /etc/cron.allow
chmod 0600 /etc/cron.allow
# 5. Restrict at access
rm -f /etc/at.deny
touch /etc/at.allow
chown root:root /etc/at.allow
chmod 0600 /etc/at.allow
echo -e " \e[32m[OK]\e[0m Configured cron.allow and at.allow (denied others)."
# 6. Oracle DBA Exception: Allow oracle and grid users
grep -q "^oracle$" /etc/cron.allow || echo "oracle" >> /etc/cron.allow
grep -q "^grid$" /etc/cron.allow || echo "grid" >> /etc/cron.allow
# Optional: also allow root explicitly
grep -q "^root$" /etc/cron.allow || echo "root" >> /etc/cron.allow
echo -e " \e[32m[OK]\e[0m Whitelisted 'root', 'oracle', and 'grid' users in /etc/cron.allow."
echo -e "\n\e[32m[+] REMEDIATION APPLIED SUCCESSFULLY\e[0m"
در قسمت بعد به سراغ:
امنسازی پیکربندی شبکه و پارامترهای کرنل
می رویم.