حدّد القراءة والكتابة والتنفيذ للمالك والمجموعة والآخرين للحصول على رقم chmod الثماني وسلسلة rwx الرمزية وأمر يمكنك لصقه مباشرة في الطرفية.
حدّد المربعات للحصول على الرقم، أو اكتب الرقم لترى ما يسمح به فعلًا. تنطبق الأذونات على ثلاث فئات — مالك الملف والمجموعة المالكة وكل شخص آخر — وتحصل كل فئة على القراءة والكتابة والتنفيذ بشكل مستقل. بدّل الشبكة أو اكتب قيمة ثمانية؛ يبقيان متزامنين.
من
قراءة (4)
كتابة (2)
تنفيذ (1)
المالك (u)
المجموعة (g)
الآخرون (o)
–
قراءة وكتابة بتات أذونات Unix
ثلاث ثلاثيات، ثلاثة بتات لكل منها
يحمل كل ملف Unix تسعة بتات أذونات مرتبة في ثلاث مجموعات من ثلاثة. تعود الثلاثية الأولى إلى مالك الملف، والثانية إلى مجموعة الملف، والثالثة إلى كل شخص آخر على النظام. داخل كل ثلاثية تعني البتات القراءة والكتابة والتنفيذ، وقيمها 4 و2 و1 على التوالي. جمع قيم البتات التي تريدها ينتج رقمًا واحدًا من 0 إلى 7، ولهذا تُكتب الأذونات تقليديًا كثلاثة أرقام ثمانية.
هذا هو السر كله وراء رقم مثل 755. رقم المالك هو 7، أي 4 + 2 + 1، لذلك يمكن للمالك القراءة والكتابة والتنفيذ. رقما المجموعة والآخرين كلاهما 5، أي 4 + 1، لذلك يمكنهما القراءة والتنفيذ دون تعديل. مكتوبة رمزيًا تقرأ القيمة نفسها rwxr-xr-x، وهذا بالضبط ما يطبعه ls -l بعد حرف نوع الملف الأول.
تعني الأفعال الثلاثة شيئًا مختلفًا قليلًا على الدليل. القراءة تتيح لك سرد الأسماء داخله، والكتابة تتيح إنشاء وحذف الإدخالات، والتنفيذ يتيح لك العبور عبره للوصول إلى مسار تعرفه مسبقًا. الدليل الذي يحمل قراءة دون تنفيذ شبه عديم الفائدة: يمكنك رؤية الأسماء لكن لا يمكنك فتح أي شيء خلفها.
القيم التي ستدخلها فعلًا
يغطي عدد قليل من التركيبات معظم الأعمال الحقيقية. 644 (rw-r--r--) هو الوضع العادي لمستند أو ملف مصدري: يحرره المالك، ويقرأه الجميع. 755 (rwxr-xr-x) هو الوضع العادي لدليل أو سكربت قابل للتنفيذ، لأن كليهما يحتاج بت التنفيذ ليكون قابلًا للاستخدام أصلًا. 600 (rw-------) يُبقي الملف خاصًا بمالكه، وهو ما يصر عليه OpenSSH للمفاتيح الخاصة، ويفعل 700 الأمر نفسه للدليل.
الأوضاع التي تمنح وصول الكتابة للآخرين تستحق نظرة ثانية. 777 يتيح لكل حساب على الجهاز الكتابة فوق الملف أو حذفه، وهو دائمًا تقريبًا ليس الإجابة الصحيحة — إنه ببساطة أسرع طريقة لجعل خطأ أذونات يختفي دون فهمه. عندما لا يستطيع خادم ويب الكتابة في دليل رفع، يكون الإصلاح الحقيقي عادةً تغيير المستخدم أو المجموعة المالكة بـchown، وليس فتح الملف للجميع.
تتفاعل الأذونات أيضًا مع umask. تُنشأ الملفات الجديدة بوضع افتراضي منقوص بقيمة umask، وعادةً ما تكون 022، ولهذا يميل الملف المُنشأ حديثًا إلى الظهور كـ644 بدلًا من 666.
Setuid وsetgid والبت اللاصق
يمكن أن يجلس رقم رابع أمام الأرقام الثلاثة المألوفة، ويحمل ثلاثة بتات خاصة: setuid (4) وsetgid (2) والبت اللاصق (1). تغيّر من يعمل بصلاحيات البرنامج وكيف يعامل الدليل الملفات المنشأة داخله.
يجعل setuid على ملف قابل للتنفيذ البرنامج يعمل بصلاحيات مالك الملف بدلًا من المستخدم الذي شغّله. هكذا يستطيع passwd تحديث ملف على مستوى النظام بينما يشغّله مستخدم غير متميز، ولهذا تُدقق ملفات setuid القابلة للتنفيذ بعناية فائقة — فخطأ في أحدها طريق مباشر إلى صلاحيات المالك. يفعل setgid الشيء نفسه للمجموعة. على الدليل، لـsetgid معنى ألطف: الملفات الجديدة المنشأة داخله ترث مجموعة الدليل، ما يحافظ على اتساق مجلد مشروع مشترك مهما كان من يكتب فيه.
البت اللاصق أشهر ما يكون على /tmp، ويُكتب عادةً 1777. يتيح لأي شخص إنشاء ملفات في الدليل مع تقييد الحذف على مالك كل ملف، فلا يستطيع المستخدمون حذف الملفات المؤقتة لبعضهم البعض. في قائمة طويلة، تستبدل هذه البتات حرف التنفيذ: s مكان x تعني أن setuid أو setgid مفعل، وS الكبيرة تعني أن البت مفعل دون التنفيذ، وt تعلم البت اللاصق.
الأسئلة الشائعة
ماذا يعني 755 بالضبط؟
يمكن للمالك القراءة والكتابة والتنفيذ؛ ويمكن للمجموعة وكل شخص آخر القراءة والتنفيذ دون تعديل. إنه الوضع المعتاد للدلائل والسكربتات التي يجب أن تكون قابلة للتشغيل من مستخدمين آخرين.
سكربتي قابل للقراءة لكنه يقول رفض الإذن. لماذا؟
قراءة الملف وتشغيله بتان منفصلتان. يحتاج السكربت إلى بت التنفيذ للمستخدم الذي يحاول تشغيله، لذا فإن 644 غير كافية — استخدم 755، أو شغّله صراحةً عبر مترجمه.
هل يكون 777 الاختيار الصحيح في أي حال؟
تقريبًا أبدًا على جهاز مشترك أو متصل بالإنترنت، لأنه يتيح لأي حساب محلي تعديل الملف أو حذفه. إذا لم تستطع خدمة الكتابة في مكان ما، غيّر المالك أو المجموعة بدلًا من توسيع الوضع.
ما الفرق بين 644 و0644؟
لا فرق، بالنسبة للبتات التسع القياسية. الصفر البادئ هو رقم البتات الخاصة، وتحديده على 0 يمحو setuid وsetgid والبت اللاصق. يكتب كثيرون أربعة أرقام بدافع العادة فقط.
لماذا يرفض SSH استخدام مفتاحي الخاص؟
يرفض OpenSSH مفتاحًا خاصًا يمكن لمستخدمين آخرين قراءته. اضبط المفتاح على 600 ودليل .ssh المحتوي على 700، ويختفي التحذير.
هل يتصرف chmod بالطريقة نفسها على macOS وLinux؟
الأوضاع الرقمية متطابقة. تظهر الاختلافات حول السمات الموسعة وACLs، التي يعرضها macOS بـ`+` بعد سلسلة الأذونات ولا يديرها chmod وحده.