انتقل إلى المحتوى الرئيسي

الفصل 9.1 - تأمين الأذونات

أهداف التعلم​

في نهاية هذا الفصل، ستكون قادرًا على:

  • تطبيق مبدأ أقل امتياز
  • تأمين أذونات الملفات
  • فهم مخاطر الأذونات الواسعة
  • تدقيق أذونات النظام
  • تصحيح الأذونات الخاطئة

مبدأ أقل امتياز​

المفهوم​

إعطاء الأذونات الضرورية فقط، لا أكثر.

الفوائد:

  • تقليل سطح الهجوم
  • الحد من الأضرار
  • الامتثال للأمان

الأذونات الآمنة​

الملفات العادية​

# ملفات التكوين
chmod 644 fichier.conf # rw-r--r--
chmod 600 fichier.conf # rw------- (خاص)

# السكربتات القابلة للتنفيذ
chmod 755 script.sh # rwxr-xr-x
chmod 700 script.sh # rwx------ (خاص)

# الملفات الحساسة
chmod 600 .ssh/id_rsa # مفتاح خاص
chmod 644 .ssh/id_rsa.pub # مفتاح عام
chmod 700 .ssh/ # دليل SSH

الأدلة​

# الأدلة العادية
chmod 755 repertoire/ # rwxr-xr-x

# الأدلة الخاصة
chmod 700 repertoire/ # rwx------

# الأدلة المشتركة
chmod 775 shared/ # rwxrwxr-x
chmod 1777 /tmp # بت لاصق

الأذونات الخطيرة​

يجب تجنبها​

# 777 - جميع الحقوق (خطر!)
chmod 777 fichier # تجنب!

# SUID/SGID غير الضرورية
chmod u+s script.sh # تحقق من الضرورة

# الأدلة القابلة للكتابة من قبل الجميع
chmod 777 repertoire/ # تجنب!

الكشف​

# الملفات ذات الأذونات الواسعة
find /home -type f -perm -o+w
find / -type f -perm 777 2>/dev/null

# الأدلة القابلة للكتابة من قبل الجميع
find / -type d -perm -o+w ! -path "/proc/*" 2>/dev/null

# ملفات SUID/SGID
find / -type f -perm /4000 2>/dev/null # SUID
find / -type f -perm /2000 2>/dev/null # SGID

تأمين SSH​

الأذونات الصحيحة​

# دليل .ssh
chmod 700 ~/.ssh

# المفاتيح الخاصة
chmod 600 ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_ed25519

# المفاتيح العامة
chmod 644 ~/.ssh/id_rsa.pub
chmod 644 ~/.ssh/authorized_keys

# التكوين
chmod 600 ~/.ssh/config

التحقق​

# سكربت التحقق
#!/bin/bash
SSH_DIR="$HOME/.ssh"

if [ -d "$SSH_DIR" ]; then
# تحقق من أذونات الدليل
PERMS=$(stat -c "%a" "$SSH_DIR")
if [ "$PERMS" != "700" ]; then
echo "تحذير: .ssh يجب أن يكون 700، حاليًا $PERMS"
fi

# تحقق من المفاتيح الخاصة
for key in "$SSH_DIR"/id_*; do
if [ -f "$key" ] && [[ "$key" != *.pub ]]; then
PERMS=$(stat -c "%a" "$key")
if [ "$PERMS" != "600" ]; then
echo "تحذير: $key يجب أن يكون 600، حاليًا $PERMS"
fi
fi
done
fi

تأمين Cron​

أذونات Crontab​

# Crontab المستخدم
chmod 600 ~/.crontab # إذا كان ملف خارجي

# تحقق من crontab النظام
ls -l /etc/crontab
ls -l /etc/cron.d/*

بيئة Cron​

# Crontab آمن
PATH=/usr/bin:/bin
SHELL=/bin/bash
MAILTO=admin@example.com

# استخدام المسارات المطلقة
0 2 * * * /usr/local/bin/backup.sh

# إعادة توجيه المخرجات
0 2 * * * /usr/local/bin/script.sh > /var/log/script.log 2>&1

# عدم استخدام المتغيرات غير المعرفة

سكربتات Cron آمنة​

#!/bin/bash
# سكربت cron آمن

# خيارات الأمان
set -euo pipefail

# المسارات المطلقة
SCRIPT_DIR="/usr/local/bin"
LOG_FILE="/var/log/mon-script.log"

# وظيفة تسجيل
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" >> "$LOG_FILE"
}

# التحقق
if [ ! -f "$SCRIPT_DIR/config" ]; then
log "خطأ: ملف التكوين مفقود"
exit 1
fi

# المعالجة...
log "بداية المعالجة"
# ...
log "نهاية المعالجة"

تدقيق الأذونات​

سكربت التدقيق​

#!/bin/bash
# تدقيق الأذونات

echo "=== ملفات قابلة للكتابة من قبل الجميع ==="
find /home -type f -perm -o+w 2>/dev/null

echo "=== أدلة قابلة للكتابة من قبل الجميع ==="
find /home -type d -perm -o+w 2>/dev/null

echo "=== ملفات SUID ==="
find /home -type f -perm /4000 2>/dev/null

echo "=== ملفات SGID ==="
find /home -type f -perm /2000 2>/dev/null

echo "=== أذونات SSH ==="
if [ -d ~/.ssh ]; then
ls -la ~/.ssh
fi

التصحيح التلقائي​

#!/bin/bash
# تصحيح أذونات SSH

SSH_DIR="$HOME/.ssh"

if [ -d "$SSH_DIR" ]; then
chmod 700 "$SSH_DIR"

# المفاتيح الخاصة
find "$SSH_DIR" -name "id_*" ! -name "*.pub" -exec chmod 600 {} \;

# المفاتيح العامة
find "$SSH_DIR" -name "*.pub" -exec chmod 644 {} \;

# authorized_keys
[ -f "$SSH_DIR/authorized_keys" ] && chmod 600 "$SSH_DIR/authorized_keys"

# config
[ -f "$SSH_DIR/config" ] && chmod 600 "$SSH_DIR/config"

echo "تم تصحيح أذونات SSH"
fi

أفضل الممارسات​

الملفات​

  • 644 للملفات العادية
  • 600 للملفات الحساسة
  • 755 للسكربتات القابلة للتنفيذ
  • 700 للسكربتات الخاصة

الأدلة​

  • 755 للأدلة العادية
  • 700 للأدلة الخاصة
  • 775 للأدلة المشتركة (مع المجموعة)
  • 1777 لـ /tmp (بت لاصق)

التحقق​

  • التدقيق بانتظام
  • الأتمتة باستخدام السكربتات
  • توثيق الاستثناءات
  • المراجعة بعد التغييرات

ملخص​

في هذا الفصل، تعلمت:

أقل امتياز: الأذونات الدنيا الضرورية
التأمين: الأذونات المناسبة حسب النوع
الكشف: العثور على الأذونات الخطيرة
SSH: الأذونات الصحيحة للمفاتيح والتكوين
Cron: تأمين السكربتات والبيئة
التدقيق: سكربتات للتحقق والتصحيح


الخطوات التالية​

الفصل 9.2: تكوين sudo
الفصل 9.3: الجدار الناري


تم إنشاء الفصل في: ديسمبر 2024