يُعد أمر chmod (اختصارًا لـ “change mode”) أحد الركائز الأساسية في إدارة أنظمة لينكس، حيث يتحكم في جوهر أمان النظام من خلال إدارة أذونات الوصول إلى الملفات والمجلدات. منذ نشأة نظام يونكس في السبعينيات، كان نظام الأذونات هذا أحد الميزات التي ميزته عن غيره من أنظمة التشغيل، ومن ثم انتقلت هذه الميزة إلى نظام لينكس الذي نعرفه اليوم.
تخيل نظام التشغيل الخاص بك كقلعة محصنة، حيث تمثل الملفات والمجلدات الغرف المختلفة، وأذونات الوصول هي المفاتيح التي تمنع أو تسمح بالدخول إلى هذه الغرف. هنا يأتي دور chmod كمشرف الأمان الذي يقرر من يستطيع الدخول ومن لا يستطيع، وما هي الإجراءات المسموح به داخل كل غرفة.
أهمية فهم chmod لا تقتصر على مسؤولي الأنظمة المحترفين؛ فكل مستخدم لينكس يحتاج في مرحلة ما لتعديل أذونات ملف ما، سواء كان ذلك لجعل ملف نصي قابلًا للتنفيذ، أو لتقييد الوصول إلى ملفات حساسة، أو لمشاركة مجلد مع مستخدمين آخرين دون المساومة على الأمان.
في هذا الدليل الشامل، سنغطي كل ما تحتاج لمعرفته عن أمر chmod، بدءًا من الأساسيات البسيطة وحتى التقنيات المتقدمة، مع التركيز على الجانب التطبيقي وأفضل الممارسات الأمنية. سنبدأ بفهم أساسيات نظام الأذونات، ثم نتعلم كيفية استخدام chmod بطرق مختلفة، ونختتم بسيناريوهات عملية شائعة وحلول لمشكلات متكررة.
أساسيات نظام الأذونات في لينكس
فئات المستخدمين في نظام لينكس
لكل ملف أو مجلد في نظام لينكس ثلاث فئات مستخدمين لها أذونات مستقلة:
المالك (Owner): المستخدم الرئيسي الذي يملك الملف أو المجلد. يتم تحديده عادةً عند إنشاء الملف ويمكن تغييره باستخدام أمر chown.
المجموعة (Group): مجموعة المستخدمين المرتبطة بالملف. يمكن لأعضاء هذه المجموعة الحصول على مجموعة منفصلة من الأذونات تختلف عن المالك وبقية المستخدمين.
الآخرون (Others): أي مستخدم ليس مالك الملف ولا عضو في المجموعة المرتبطة به. تمثل هذه الفئة جميع المستخدمين الآخرين في النظام.
أنواع الأذونات الأساسية
هناك ثلاثة أنواع رئيسية من الأذونات في لينكس لكل فئة من الفئات السابقة:
القراءة (Read – r):
– للملفات: الإذن بمطالعة محتويات الملف
– للمجلدات: الإذن بسرد محتويات المجلد (أي رؤية أسماء الملفات والمجلدات الفرعية)
الكتابة (Write – w):
– للملفات: الإذن بتعديل محتويات الملف
– للمجلدات: الإذن بإنشاء أو حذف ملفات ومجلدات داخل هذا المجلد
التنفيذ (Execute – x):
– للملفات: الإذن بتنفيذ الملف كبرنامج
– للمجلدات: الإذن بالوصول إلى محتويات المجلد (أي الدخول إليه باستخدام cd)
قراءة إخراج أمر ls -l
عند استخدام أمر ls -l لعرض الملفات والمجلدات، ستظهر معلومات الأذونات في العمود الأول بالصيغة التالية:
-rwxr-xr-- 1 user group 2048 Jan 1 10:00 filename
الحرف الأول يحدد نوع العنصر (- لملف عادي، d لمجلد). الأذونات مقسمة إلى ثلاث مجموعات كل منها ثلاث أحرف:
1. الأذونات الثلاثة الأولى (rwx): للمالك
2. الأذونات الثلاثة المتوسطة (r-x): لأعضاء المجموعة
3. الأذونات الثلاثة الأخيرة (r–): للآخرين
الطرق المختلفة لاستخدام أمر chmod
الصيغة الأساسية للأمر chmod
الصيغة الأساسية لأمر chmod هي:
chmod [options] permission-setting file
حيث يمكن تحديد الأذونات بطريقتين رئيسيتين:
1. الطريقة الرقمية (الثمانية): باستخدام أرقام تمثل مجموعات الأذونات (مثل 755)
2. الطريقة الرمزية: باستخدام رموز (u, g, o, a) مع (+,-,=) و(r,w,x)
الطريقة الرقمية (الثمانية)
في هذه الطريقة، يتم تمثيل كل مجموعة من الأذونات برقم واحد من 0 إلى 7 حسب الجدول التالي:
رقم | أذونات | حساب القيمة |
---|---|---|
0 | — | 0+0+0 |
1 | –x | 0+0+1 |
2 | -w- | 0+2+0 |
3 | -wx | 0+2+1 |
4 | r– | 4+0+0 |
5 | r-x | 4+0+1 |
6 | rw- | 4+2+0 |
7 | rwx | 4+2+1 |
لتعيين الأذونات لملف باستخدام الطريقة الرقمية، نستخدم ثلاثة أرقام تمثل:
1. الرقم الأول: أذونات المالك
2. الرقم الثاني: أذونات المجموعة
3. الرقم الثالث: أذونات الآخرين
مثال لإعطاء المالك كافة الصلاحيات، المجموعة والآخرين القراءة والتنفيذ فقط:
chmod 755 filename
الطريقة الرمزية
تقدم هذه الطريقة مرونة أكبر لتعديل أذونات محددة دون التأثير على الباقي. الصيغة العامة هي:
chmod [ugoa...][[+-=][rwxXst...][,...]] file
حيث:
محددات الفئة:
– u: للمالك (user)
– g: للمجموعة (group)
b o: للآخرين (others)
– a: للجميع (اختصار لـ ugo)
المشغلات:
– +: إضافة الأذونات المحددة
– -: إزالة الأذونات المحددة
– =: تعيين الأذونات المحددة بالضبط (إزالة كل الأذونات الأخرى للفئة)
أنواع الأذونات:
– r: القراءة
– w: الكتابة
– x: التنفيذ/الدخول
– s: setuid/setgid
– t: sticky bit
مثال لإعطاء صلاحية التنفيذ للمالك فقط:
chmod u+x filename
استخدامات عملية متقدمة لأمر chmod
تطبيق الأذونات بشكل عكسي على المجلدات
يستخدم الخيار -R لتطبيق الأذونات بشكل عكسي (recursive) على مجلد ومحتوياته:
chmod -R 755 /path/to/directory
يطبق هذا كافة التغييرات على:
– المجلد الأساسي نفسه
– جميع الملفات والمجلدات الفرعية داخله
– كل المحتويات في المستويات الأعمق
تحذير: كن حذرًا عند استخدام -R مع مسارات عالية المستوى مثل / أو /etc فقد يؤدي ذلك إلى جعل النظام غير قابل للتشغيل.
أذونات خاصة: setuid، setgid، و sticky bit
هناك بعض الأذونات الخاصة التي تقدم وظائف إضافية:
setuid (s على المالك): عند تطبيقه على ملف قابل للتنفيذ، البرنامج سيعمل بصلاحيات مالك الملف وليس المستخدم الذي قام بتشغيله.
chmod u+s /usr/bin/program
setgid (s على المجموعة):
– للملفات القابلة للتنفيذ: يشبه setuid ولكن يعمل مع صلاحيات المجموعة
– للمجلدات: الملفات الجديدة داخلها ترث مجموعة المجلد الأساسيchmod g+s /shared/folder
sticky bit (t على الآخرين): للمجلدات فقط، يسمح بإنشاء/حذف الملفات للمالكين فقط حتى لو كان للمجموعة/الآخرين صلاحيات كتابة.
chmod +t /tmp
في الطريقة الرقمية، يتم تمثيل هذه الأذونات برقم رابع قبل الأرقام الثلاثة الرئيسية (مثل 4755 لـ setuid).
حفظ الأذونات الافتراضية باستخدام umask
بينما يتعامل chmod مع تغيير الأذونات الموجودة، فإن أمر umask يتحكم في الأذونات الافتراضية للملفات والمجلدات الجديدة:
umask 0022
حيث تمثل الأرقام الأذونات التي سيتم إزالتها (masked) من الأذونات الأساسية. الأذونات الأساسية هي:
– 666 للملفات (rw-rw-rw-)
– 777 للمجلدات (rwxrwxrwx)
بتطبيق umask 0022 (المستخدم عادةً):
– الملفات الجديدة: 666 – 022 = 644 (rw-r–r–)
– المجلدات الجديدة: 777 – 022 = 755 (rwxr-xr-x)
سيناريوهات وحلول شائعة
إصلاح أذونات موقع ويب
تتطلب معظم تطبيقات الويب أذونات محددة لتعمل بشكل صحيح مع الحفاظ على الأمان. لإصلاح أذونات موقع ويب نموذجي:
# المشرف (على سبيل المثال www-data) لديه كل الصلاحيات
chown -R www-data:www-data /var/www/html
# ملفات الموقع - قراءة للمالك والجماعة
find /var/www/html -type f -exec chmod 664 {} \;
# مجلدات الموقع - إضافة التنفيذ للدخول
find /var/www/html -type d -exec chmod 775 {} \;
# المجلدات القابلة للكتابة من قبل التطبيق (مثل التحميلات)
chmod -R 777 /var/www/html/uploads
جعل الملف النصي قابلًا للتنفيذ
للسماح بتنفيذ ملف نصي (script):
1. أضف سطر shebang في بداية الملف:
#!/bin/bash
2. اجعله قابلًا للتنفيذ:
chmod +x script.sh
3. يمكن الآن تشغيله مباشرة:
./script.sh
إنشاء مجلد مشترك بين عدة مستخدمين
لإنشاء مجلد يمكن لأعضاء مجموعة معينة الكتابة فيه:
1. إنشاء المجموعة (إذا لم تكن موجودة):
sudo groupadd mygroup
2. إضافة المستخدمين للمجموعة:
sudo usermod -aG mygroup user1
sudo usermod -aG mygroup user2
3. إنشاء المجلد المشترك وتحديد المجموعة:
sudo mkdir /shared
sudo chown root:mygroup /shared
sudo chmod 775 /shared
4. تحقق أن setgid مضبوط لضمان أن الملفات الجديدة تحافظ على المجموعة الصحيحة:
sudo chmod g+s /shared
حل مشكلة “Permission denied” الشائعة
عند مواجهة رسالة “Permission denied”، اتبع خطوات استكشاف الأخطاء هذه:
1. تحقق من الأذونات الحالية:
ls -l /path/to/file
2. تحقق من مالك الملف ومجموعته:
ls -ld /path/to/file
3. تأكد من أن المستخدم ينتمي للمجموعة الصحيحة:
groups
4. تحقق من الأذونات على المسار الكامل للملف/المجلد:
namei -l /full/path/to/file
5. عدل الأذونات حسب الحاجة باستخدام chmod
وchown
أفضل الممارسات الأمنية والتحذيرات
ممارسات خاطئة شائعة
تجنب هذه الأخطاء التي قد تؤدي إلى ثغرات أمنية:
استخدام 777 بشكل عشوائي: إعطاء كل الصلاحيات للجميع قد يحل المشكلة مؤقتاً، لكنه يخلق ثغرة أمنية خطيرة. الأفضل هو تحديد الضبط الأدق المطلوب.
عدم استخدام setuid/setgid بحذر: البرامج التي تعمل بصلاحيات عالية يمكن أن تكون خطرًا إذا تم استغلالها.
نسيان المجلدات في التطبيق العكسي: عند استخدام chmod -R، تذكر أن المجلدات تحتاج عادةً صلاحيات تنفيذ إضافية (x) مقارنة بالملفات.
نصائح أمنية مهمة لأمر chmod
1. مبدأ الامتياز الأقل: أعط فقط أقل قدر من الصلاحيات اللازمة لأداء المطلوب.
2. تقسيم الصلاحيات: استخدم مجموعات المستخدمين والمجموعات المنطقية لعزل الصلاحيات.
3. التدقيق المنتظم: راجع أذونات الملفات والمجلدات الحساسة بانتظام.
4. نسخ احتياطية للأذونات: احفظ سجلاً لأذونات النظام الأساسية للاسترداد عند الحاجة.
5. أتمتة الإصلاحات: استخدم نصوصًا برمجية لتطبيق سياسات الأذونات بشكل متسق عبر النظام.
أدوات مساعدة لأدارة الأذونات
getfacl/setfacl: لإدارة Access Control Lists (ACLs) التي تتيح أذونات أكثر تفصيلاً من نظام لينكس الأساسي.
auditd: لمراقبة التغييرات في أذونات الملفات والمجلدات الحساسة.
lsattr/chattr: لإدارة السمات الممتدة للملفات التي قد تؤثر على قابلية التعديل حتى مع وجود أذونات الكتابة.
fstab مع options مثل noexec/nodev: لمنع تنفيذ البرامج أو الأجهزة على نقاط تركيب معينة.
يعد إتقان أمر chmod وفهم نظام الأذونات في لينكس مهارة أساسية لأي مستخدم أو مدير نظام. لقد غطينا في هذا الدليل الشكلين الرئيسيين لاستخدام chmod (الرقمي والرمزي)، والأذونات الخاصة مثل setuid وsticky bit، بالإضافة إلى سيناريوهات تطبيقية شائعة.
أهم النقاط التي يجب تذكرها:
1. استخدم الطريقة الرقمية للإعدادات الثابتة والطريقة الرمزية لتعديلات دقيقة.
2. كن حذرًا عند استخدام الخيار -R لتطبيق الأذونات بشكل عكسي.
3. اتبع مبدأ “الحد الأدنى من الامتيازات” لأمان أفضل.
4. استخدم مجموعات المستخدمين وأذونات المجموعة للمشاركة الآمنة للملفات.
5. تعلم أدوات مثل getfacl وumask للتحكم الدقيق في الأذونات.
لتوسيع معرفتك، يمكنك استكشاف:
– Access Control Lists (ACLs) للتحكم المعقد في الأذونات
– أدوات مراقبة التغييرات مثل auditd
– كيفية تكوين sudoers للتحكم في امتيازات المستخدمين
– إدارة الأذونات في أنظمة الملفات المتقدمة مثل ZFS وBtrfs
المراجع والمواقع المفيدة
1. الصفحة الرسمية لـ GNU Coreutils