الفصل 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