در قسمت قبل
مدیریت دسترسی فایلهای سیستم
انجام شد.
۱. الزامات CIS Benchmark (بخش 7.2)
این مقاله به بررسی یکپارچگی فایلهای هویتی، جلوگیری از تداخل شناسهها (UID/GID) و ایمنسازی دایرکتوریهای خانگی کاربران (Home Directories) میپردازد:
- 7.2.1 Ensure accounts in /etc/passwd use shadowed passwords (Automated)
- 7.2.2 Ensure /etc/shadow password fields are not empty (Automated)
- 7.2.3 Ensure all groups in /etc/passwd exist in /etc/group (Automated)
- 7.2.4 Ensure no duplicate UIDs exist (Automated)
- 7.2.5 Ensure no duplicate GIDs exist (Automated)
- 7.2.6 Ensure no duplicate user names exist (Automated)
- 7.2.7 Ensure no duplicate group names exist (Automated)
- 7.2.8 Ensure local interactive user home directories are configured (Automated)
- 7.2.9 Ensure local interactive user dot files access is configured (Automated)
۲. مفهوم و دلیل (Concept & Rationale)
یکپارچگی فایلهای هویتی (passwd و group) برای امنیت سیستم حیاتی است. استفاده از رمزهای عبور Shadowed تضمین میکند که هش رمزها در فایل /etc/passwd قرار نگیرد. وجود UID یا GID تکراری میتواند منجر به تداخل دسترسیها شود. همچنین، پیکربندی صحیح دایرکتوریهای خانگی و فایلهای پنهان (Dot Files) از دستکاری محیط کاربری جلوگیری میکند.
۳. بررسی سازگاری با پایگاه داده Oracle (RAC & Grid)
الزامات این بخش صرفاً بررسیهای یکپارچگی (Sanity Checks) سیستمعامل هستند و هیچ تداخلی با کاربران و گروههای اوراکل ندارند. در محیطهای کلاستر (RAC)، یکپارچگی دقیق UID/GIDها (بندهای 7.2.4 تا 7.2.7) بین تمام نودها یکی از پیشنیازهای اصلی نصب اوراکل است؛ بنابراین رعایت این بندها نه تنها امنیت، بلکه پایداری زیرساخت دیتابیس را نیز تضمین میکند.
۴. نحوه بررسی وضعیت فعلی (Audit Script)
اسکریپت زیر یکپارچگی فایلهای هویتی، وجود رمزعبور خالی و وضعیت دایرکتوریهای خانگی را بررسی میکند:
لینک این اسکریپت در github:
modules/audit_29_Local_User_Group_Settings.sh
در صورتی که با bash script آشنا نیستید، می توانید به آموزشی که برای دیتابیس ادمین ها در سایت گذاشته ام مراجعه کنید.
Bash for Oracle DBAs
#!/bin/bash
# -------------------------------------------------------------------------
# Script: audit29.sh
# Purpose: Audit Local User and Group Settings (CIS 7.2)
# -------------------------------------------------------------------------
echo "=========================================================================="
echo " CIS Requirement: 7.2 - Local User and Group Settings"
echo " - 7.2.1: Ensure accounts in /etc/passwd use shadowed passwords."
echo " - 7.2.2: Ensure /etc/shadow does not contain empty password fields."
echo " - 7.2.4: Ensure no duplicate UIDs exist."
echo " - 7.2.5: Ensure no duplicate GIDs exist."
echo " - 7.2.6: Ensure no duplicate user names exist."
echo " - 7.2.7: Ensure no duplicate group names exist."
echo " - 7.2.8/9: Ensure home directory and dot-file permissions are secure."
echo ""
echo " Oracle Context & Exceptions:"
echo " - Fully Compatible. UID/GID consistency is a PRE-REQUISITE for Oracle"
echo " RAC / Grid Infrastructure installations."
echo ""
echo " Action Taken:"
echo " - This script audits all the CIS requirements listed above."
echo "=========================================================================="
echo ""
FAILED=0
# --- Audit Checks ---
echo "[*] Auditing: Non-shadowed passwords (CIS 7.2.1)..."
NON_SHADOWED=$(awk -F: '($2 != "x" ) { print $1 }' /etc/passwd)
if [ -n "$NON_SHADOWED" ]; then
echo "[-] FAIL: Accounts found without shadowed passwords: $NON_SHADOWED"
FAILED=1
else
echo "[+] PASS: All accounts use shadowed passwords."
fi
echo -e "\n[*] Auditing: Empty password fields (CIS 7.2.2)..."
EMPTY_PASS=$(awk -F: '($2 == "" ) { print $1 }' /etc/shadow)
if [ -n "$EMPTY_PASS" ]; then
echo "[-] FAIL: Accounts with empty passwords found: $EMPTY_PASS"
FAILED=1
else
echo "[+] PASS: No empty password fields found."
fi
echo -e "\n[*] Auditing: Duplicate UIDs (CIS 7.2.4)..."
DUP_UIDS=$(cut -f3 -d":" /etc/passwd | sort -n | uniq -c | awk '$1 > 1 {print $2}')
if [ -n "$DUP_UIDS" ]; then
echo "[-] FAIL: Duplicate UIDs found:"
for uid in $DUP_UIDS; do
users=$(awk -F: '($3 == n) { print $1 }' n=$uid /etc/passwd | xargs)
echo " -> UID $uid is shared by: $users"
done
FAILED=1
else
echo "[+] PASS: No duplicate UIDs found."
fi
echo -e "\n[*] Auditing: Duplicate GIDs (CIS 7.2.5)..."
DUP_GIDS=$(cut -f3 -d":" /etc/group | sort -n | uniq -c | awk '$1 > 1 {print $2}')
if [ -n "$DUP_GIDS" ]; then
echo "[-] FAIL: Duplicate GIDs found:"
for gid in $DUP_GIDS; do
groups=$(awk -F: '($3 == n) { print $1 }' n=$gid /etc/group | xargs)
echo " -> GID $gid is shared by: $groups"
done
FAILED=1
else
echo "[+] PASS: No duplicate GIDs found."
fi
echo -e "\n[*] Auditing: Duplicate user names (CIS 7.2.6)..."
DUP_USERS=$(cut -d: -f1 /etc/passwd | sort | uniq -c | awk '$1 > 1 {print $2}')
if [ -n "$DUP_USERS" ]; then
echo "[-] FAIL: Duplicate Usernames found: $DUP_USERS"
FAILED=1
else
echo "[+] PASS: No duplicate user names found."
fi
echo -e "\n[*] Auditing: Duplicate group names (CIS 7.2.7)..."
DUP_GROUPS=$(cut -d: -f1 /etc/group | sort | uniq -c | awk '$1 > 1 {print $2}')
if [ -n "$DUP_GROUPS" ]; then
echo "[-] FAIL: Duplicate Group Names found: $DUP_GROUPS"
FAILED=1
else
echo "[+] PASS: No duplicate group names found."
fi
echo -e "\n[*] Auditing: Home directory permissions (CIS 7.2.8 & 7.2.9)..."
HOME_ISSUES=0
awk -F: '($3 >= 1000 && $1 != "nfsnobody") { print $1 " " $6 }' /etc/passwd | while read -r user dir; do
if [ -d "$dir" ]; then
dirperm=$(stat -L -c "%a" "$dir")
# Using 8# to explicitly tell bash these are octal numbers
if [ $(( 8#$dirperm & 8#022 )) -ne 0 ]; then
echo "[-] FAIL: Home directory ($dir) for user ($user) is group or world-writable ($dirperm)."
HOME_ISSUES=1
fi
fi
done
if [ "$HOME_ISSUES" -eq 0 ]; then
echo "[+] PASS: Interactive user home directory permissions are secure."
else
FAILED=1
fi
# --- Final Result ---
echo "=========================================================================="
if [ "$FAILED" -eq 1 ]; then
echo "[!] FINAL AUDIT RESULT: FAILED. Remediation required."
else
echo "[+] FINAL AUDIT RESULT: PASSED."
fi
echo "=========================================================================="
۵. نحوه اعمال تنظیمات (Remediation Bash Script)
رفع تداخلهای UID/GID نیازمند بررسی دستی توسط مدیر سیستم است، اما مواردی مانند فعالسازی Shadowing و قفل کردن حسابهای بدون رمز به صورت خودکار قابل انجام است:
لینک این اسکریپت در github:
modules/remediate_29_Local_User_Group_Settings.sh
#!/bin/bash
# Script: remediate_cis_7_2.sh
# Purpose: Remediate obvious issues in Local User Settings
if [ "$EUID" -ne 0 ]; then echo "Please run as root"; exit 1; fi
echo -e "\n[+] Remediating CIS 7.2..."
echo "[*] Ensuring shadowed passwords (pwconv)..."
pwconv
echo "[*] Locking accounts with empty passwords..."
for user in $(awk -F: '($2 == "" ) { print $1 }' /etc/shadow); do
echo "Locking account $user due to empty password."
passwd -l "$user"
done
echo "[*] Fixing permissions on interactive user home directories..."
awk -F: '($3 >= 1000 && $1 != "nfsnobody") { print $1 " " $6 }' /etc/passwd | while read -r user dir; do
if [ -d "$dir" ]; then
chmod g-w,o-rwx "$dir"
# Securing dot files
find "$dir" -type f -name ".*" -exec chmod go-w {} \; 2>/dev/null
fi
done
echo "[+] Automated remediation applied."
echo "[!] Action Required: Duplicate UIDs, GIDs, and Usernames must be resolved manually."
کار ما در اینجا به اتمام می رسد.
خواهشمند است در صورتی که هر گونه نظری در مورد اسکریپتها دارید بفرمائید تا تصحیحات لازم اعمال شود.