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

المختبر 3.2 - إدارة الأذونات

الأهداف​

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

  • فهم أذونات لينكس (rwx)
  • تعديل الأذونات باستخدام chmod
  • تغيير الملكية باستخدام chown
  • فهم الأذونات الخاصة (SUID، SGID، sticky bit)
  • استخدام قوائم التحكم في الوصول (ACLs)

المتطلبات الأساسية​

  • تثبيت أوبونتو 24.04
  • فتح الطرفية
  • وصول المستخدم مع sudo

التمرين 1: فهم الأذونات​

الخطوة 1: عرض الأذونات​

# إنشاء ملفات اختبار
mkdir ~/test-permissions
cd ~/test-permissions

touch fichier1.txt fichier2.txt fichier3.txt
mkdir dir1 dir2

# عرض الأذونات
ls -l

# الصيغة: -rw-r--r-- 1 user group 0 date fichier
# النوع | المالك | المجموعة | الآخرون

الخطوة 2: تفسير الأذونات​

# تحليل كل جزء
ls -l fichier1.txt

# مثال: -rw-r--r--
# - = ملف عادي (d = مجلد، l = رابط)
# rw- = المالك: قراءة، كتابة، لا تنفيذ
# r-- = المجموعة: قراءة فقط
# r-- = الآخرون: قراءة فقط

التمرين 2: تعديل الأذونات (chmod)​

الخطوة 1: الوضع الرمزي​

# إضافة تنفيذ للمالك
chmod u+x fichier1.txt

# إضافة قراءة للمجموعة
chmod g+r fichier2.txt

# إزالة الكتابة للآخرين
chmod o-w fichier3.txt

# التراكيب
chmod u+x,g+r,o-r fichier1.txt

# التحقق
ls -l

الخطوة 2: الوضع الثماني​

# 755 = rwxr-xr-x
chmod 755 fichier1.txt

# 644 = rw-r--r--
chmod 644 fichier2.txt

# 700 = rwx------
chmod 700 fichier3.txt

# 777 = rwxrwxrwx (خطر!)
chmod 777 fichier1.txt # يُفضل تجنبه في الإنتاج

الخطوة 3: أذونات المجلدات​

# مجلد قابل للتنفيذ = حق الدخول
chmod 755 dir1

# مجلد بدون تنفيذ = لا يمكن الدخول
chmod 644 dir1 # ❌ لن يعمل بشكل صحيح
ls -ld dir1

# التصحيح
chmod 755 dir1

التمرين 3: الملكية (chown)​

الخطوة 1: تغيير المالك​

# إنشاء ملف
sudo touch /tmp/fichier-root.txt
ls -l /tmp/fichier-root.txt

# تغيير المالك
sudo chown $USER /tmp/fichier-root.txt
ls -l /tmp/fichier-root.txt

# تغيير المالك والمجموعة
sudo chown $USER:$USER /tmp/fichier-root.txt

الخطوة 2: تغيير المجموعة (chgrp)​

# عرض المجموعات
groups

# تغيير المجموعة
sudo chgrp sudo fichier1.txt
ls -l fichier1.txt

# أو باستخدام chown
sudo chown :sudo fichier2.txt

التمرين 4: الأذونات الخاصة​

الخطوة 1: SUID (Set User ID)​

# إنشاء سكربت
cat > ~/test-suid.sh << 'EOF'
#!/bin/bash
whoami
id
EOF

chmod +x ~/test-suid.sh

# إضافة SUID
chmod u+s ~/test-suid.sh
ls -l ~/test-suid.sh # لاحظ 's' بدلاً من 'x'

# الاختبار
./test-suid.sh

الخطوة 2: SGID (Set Group ID)​

# إنشاء مجلد مشترك
mkdir ~/shared
chmod 2775 ~/shared # 2 = SGID
ls -ld ~/shared # لاحظ 's' في المجموعة

# الملفات الجديدة سترث المجموعة
touch ~/shared/fichier.txt
ls -l ~/shared/fichier.txt

الخطوة 3: Sticky Bit​

# /tmp يستخدم sticky bit
ls -ld /tmp

# إنشاء مجلد مع sticky bit
mkdir ~/sticky-dir
chmod 1777 ~/sticky-dir
ls -ld ~/sticky-dir # لاحظ 't'

# فقط المالك يمكنه حذف ملفاته

التمرين 5: قوائم التحكم في الوصول (ACLs)​

الخطوة 1: تثبيت ACLs​

# التحقق إذا كان مثبتًا
which setfacl

# التثبيت إذا لزم الأمر
sudo apt update
sudo apt install acl

الخطوة 2: استخدام ACLs​

# إنشاء ملف
touch fichier-acl.txt

# عرض ACLs الحالية
getfacl fichier-acl.txt

# إعطاء إذن لمستخدم محدد
sudo setfacl -m u:autre-user:rw fichier-acl.txt

# إعطاء إذن لمجموعة
sudo setfacl -m g:developers:rx fichier-acl.txt

# عرض ACLs
getfacl fichier-acl.txt

الخطوة 3: ACLs الافتراضية​

# تعيين ACL افتراضي لمجلد
sudo setfacl -m d:u:autre-user:rw dir1

# الملفات الجديدة سترث هذه ACL
touch dir1/nouveau.txt
getfacl dir1/nouveau.txt

التمرين 6: umask​

الخطوة 1: فهم umask​

# عرض umask الحالي
umask

# umask = الأذونات المرفوضة
# 022 = يرفض الكتابة للمجموعة والآخرين
# لذا: 666 - 022 = 644 للملفات
# 777 - 022 = 755 للمجلدات

الخطوة 2: تغيير umask​

# umask أكثر تقييدًا (027)
umask 027

# إنشاء ملف
touch fichier-umask.txt
ls -l fichier-umask.txt # يجب أن يكون 640

# إعادة umask إلى الافتراضي
umask 022

التمرين 7: ممارسة شاملة​

الخطوة 1: سيناريو حقيقي​

# إنشاء هيكل مشروع
mkdir -p ~/projet/{src,bin,docs}
touch ~/projet/src/{script1.sh,script2.sh}
touch ~/projet/docs/{readme.txt,guide.txt}

# سكربتات قابلة للتنفيذ للمالك والمجموعة
chmod 750 ~/projet/src/*.sh

# مستندات للقراءة فقط للجميع
chmod 644 ~/projet/docs/*.txt

# مجلد bin: قابل للتنفيذ للجميع
chmod 755 ~/projet/bin

# التحقق
ls -lR ~/projet

الخطوة 2: التأمين​

# ملف حساس: للقراءة فقط للمالك
touch ~/projet/config-secret.txt
chmod 600 ~/projet/config-secret.txt

# سكربت نظام: SUID root (بحذر!)
sudo chown root:root ~/projet/src/script1.sh
sudo chmod 4750 ~/projet/src/script1.sh
ls -l ~/projet/src/script1.sh

التحقق​

قائمة التحقق​

تحقق من أنك تستطيع:

  • قراءة وتفسير الأذونات (ls -l)
  • تعديل الأذونات باستخدام chmod (رمزي وثماني)
  • تغيير المالك باستخدام chown
  • تغيير المجموعة باستخدام chgrp
  • استخدام SUID، SGID، sticky bit
  • تكوين ACLs
  • فهم واستخدام umask

أسئلة للتفكير​

  1. ما الفرق بين 755 و 644؟

    • 755: قابل للتنفيذ (للسكربتات/المجلدات)
    • 644: للقراءة فقط (للملفات العادية)
  2. متى تستخدم ACLs مقابل chmod؟

    • ACLs: أذونات دقيقة للمستخدمين/المجموعات المحددة
    • chmod: أذونات قياسية (المالك/المجموعة/الآخرون)
  3. لماذا يعتبر sticky bit مهمًا لـ /tmp؟

    • يمنع المستخدمين من حذف ملفات الآخرين
    • أمان في المجلدات المشتركة

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

  • المختبر 3.3: البحث والروابط
  • المختبر 3.4: ممارسة شاملة
  • الفصل 3.5: أذونات الملفات

تم إنشاء المختبر في: ديسمبر 2024 - تم اختباره على أوبونتو 24.04