تخطَّ إلى المحتوى

الصلاحيات في Linux: chmod والمالك و sudo

الدرس 5 من 10 · أساسيات Linux

Linux نظام صُمم من البداية ليستخدمه عدة أشخاص على نفس الجهاز، ولتشغيل الخوادم التي تحمل بيانات حساسة. لذلك فيه نظام صارم يحدد: من يستطيع أن يفعل ماذا بكل ملف. هذا النظام اسمه الصلاحيات (Permissions)، وهو من أسباب أمان Linux. في هذا الدرس الأخير ستتعلم قراءة الصلاحيات وتغييرها، وستشغّل أول سكربت لك.

لكل ملف ثلاث صلاحيات:

الحرف الصلاحية على الملف على المجلد
r القراءة (Read) قراءة محتواه عرض ما بداخله
w الكتابة (Write) تعديله إضافة ملفات وحذفها داخله
x التنفيذ (Execute) تشغيله كبرنامج الدخول إليه بـ cd

تُعطى الصلاحيات لثلاث فئات:

  1. المالك (User): صاحب الملف، وغالباً من أنشأه.
  2. المجموعة (Group): مجموعة مستخدمين، مثل فريق العمل.
  3. الآخرون (Others): كل باقي المستخدمين.

تخيّل دفتر يومياتك: أنت (المالك) تقرأ وتكتب فيه، وعائلتك (المجموعة) ربما تقرأ فقط، والغرباء (الآخرون) لا يقتربون منه أصلاً.

نافذة طرفيّة
ls -l
الناتج
-rw-r--r-- 1 sara sara 120 Nov 10 12:00 notes.txt
-rwxr-xr-x 1 sara sara 80 Nov 10 12:05 hello.sh
drwxr-x--- 2 sara team 4096 Nov 10 12:10 project

لنفكك -rw-r--r--، وهي عشرة رموز:

- rw- r-- r--
│ │ │ └── الآخرون: قراءة فقط
│ │ └── المجموعة: قراءة فقط
│ └── المالك: قراءة وكتابة
└── النوع: - ملف، d مجلد

الشرطة - في مكان أي حرف تعني أن الصلاحية غير موجودة. إذن notes.txt: المالك يقرأ ويكتب، والباقون يقرؤون فقط. و hello.sh فيها x، فهي قابلة للتنفيذ. والمجلد project لا يستطيع «الآخرون» حتى الدخول إليه.

بعد الصلاحيات تظهر كلمتان: المالك (sara) ثم المجموعة (sara أو team).

تغيير الصلاحيات: chmod بالحروف

Section titled “تغيير الصلاحيات: chmod بالحروف”

chmod (من change mode) يغيّر الصلاحيات. الطريقة الأسهل للفهم بالحروف:

نافذة طرفيّة
chmod u+x hello.sh # أضف التنفيذ للمالك
chmod g-w notes.txt # احذف الكتابة من المجموعة
chmod o-r notes.txt # احذف القراءة من الآخرين
chmod a+r notes.txt # أضف القراءة للجميع
  • لمن: u المالك، و g المجموعة، و o الآخرون، و a الجميع.
  • ماذا: + إضافة، و - حذف، و = تحديد بالضبط.
  • أي صلاحية: r أو w أو x.

الطريقة الأشهر عند المحترفين: كل صلاحية لها رقم، ونجمعها:

الصلاحية الرقم
r قراءة 4
w كتابة 2
x تنفيذ 1

فمثلاً: rwx = 4 + 2 + 1 = 7، و rw- = 4 + 2 = 6، و r-x = 4 + 1 = 5، و r-- = 4.

ثم تكتب ثلاثة أرقام: للمالك، ثم المجموعة، ثم الآخرين:

نافذة طرفيّة
chmod 644 notes.txt # rw-r--r--
chmod 755 hello.sh # rwxr-xr-x
chmod 600 secret.txt # rw------- لك وحدك
الرقم المعنى يُستخدم لـ
644 المالك يقرأ ويكتب، والباقون يقرؤون الملفات العادية وصفحات الموقع
755 المالك كل شيء، والباقون يقرؤون وينفذون السكربتات والمجلدات
600 المالك فقط يقرأ ويكتب الملفات السرية مثل مفاتيح SSH

السكربت (Script) ملف نصي فيه أوامر Linux تُنفَّذ بالترتيب. أنشئ ملف hello.sh:

hello.sh
#!/bin/bash
echo "أهلاً من السكربت!"
echo "اليوم هو: $(date +%A)"
  • السطر الأول #!/bin/bash يسمى Shebang: يخبر النظام بالبرنامج الذي سينفّذ الملف.
  • $(date +%A) تنفّذ الأمر date وتضع نتيجته (اسم اليوم) داخل النص.

لتشغيله، يجب أن يكون قابلاً للتنفيذ:

نافذة طرفيّة
./hello.sh
الناتج
bash: ./hello.sh: Permission denied

الملف الجديد لا يملك صلاحية x افتراضياً، لأسباب أمنية. نعطيه إياها:

نافذة طرفيّة
chmod +x hello.sh
./hello.sh
الناتج
أهلاً من السكربت!
اليوم هو: Tuesday

(اسم اليوم سيكون يوم تشغيلك أنت.) و ./ تعني «الملف الموجود في المجلد الحالي». وهكذا يؤتمت المبرمجون المهام المتكررة: النسخ الاحتياطي، ورفع المواقع، وتنظيف الملفات القديمة.

في Linux مستخدم خاص اسمه root (المدير)، يستطيع فعل أي شيء. ولأن هذا خطير، لا نعمل به مباشرة. بدلاً من ذلك، نستخدم sudo قبل الأمر الذي يحتاج صلاحيات المدير فقط:

نافذة طرفيّة
sudo apt install git

سيطلب منك كلمة المرور، ثم ينفّذ هذا الأمر الواحد بصلاحيات المدير. مثل مفتاح المدير في مدرسة: لا يُعطى للجميع، ويُستخدم فقط عند الحاجة، ثم يُعاد.

ولتغيير مالك ملف (يحتاج عادة sudo): sudo chown sara:team report.txt.

  1. أنشئ سكربت backup.sh ينسخ ملفاً معيناً إلى مجلد backup ويطبع «تم النسخ». تذكّر سطر #!/bin/bash.
  2. حاول تشغيله بـ ./backup.sh ولاحظ الخطأ، ثم أعطه صلاحية التنفيذ وشغّله.
  3. أنشئ ملف diary.txt واجعل صلاحياته 600، وتأكد بـ ls -l.
  4. حوّل هذه الصلاحيات إلى أرقام بنفسك: rwxr-x--- و rw-rw-r--.

(ملاحظة: على Git Bash في ويندوز، بعض أوامر الصلاحيات لا يظهر تأثيرها كاملاً لأن نظام ملفات ويندوز مختلف. للتجربة الحقيقية استخدم Linux أو WSL.)

  • Permission denied عند تشغيل سكربت: نسيت chmod +x.
  • chmod 777 لحل المشاكل: ثغرة أمنية. أعطِ الصلاحية المطلوبة فقط.
  • sudo مع كل شيء: قد تنشئ ملفات يملكها المدير فلا تستطيع تعديلها لاحقاً كمستخدم عادي.

سؤال

ما الصلاحيات التي يمثلها الرقم 754؟

سؤال

ظهرت رسالة Permission denied عند تشغيل ./deploy.sh. ما الحل الأنسب غالباً؟

  • الصلاحيات r و w و x لثلاث فئات: المالك والمجموعة والآخرين.
  • ls -l يعرضها: -rw-r--r-- تعني ملفاً يكتب فيه المالك ويقرؤه الجميع.
  • chmod بالحروف (u+x) أو بالأرقام (644 و 755 و 600)، وتجنّب 777.
  • السكربت يحتاج #!/bin/bash و chmod +x ليعمل بـ ./script.sh.
  • sudo لصلاحيات المدير عند الحاجة فقط.