chmod في اللغة البسيطة — لماذا يكتب الجميع 755 دون أن يفهم ما يعنيه
755، 644، 777 — لقد كتبتها مئات المرات. إليك المعنى الحقيقي لها، لماذا chmod 777 هو عبارة عن تجاهل وليس عن مخاطر، ومتى يكون كل قيمة مناسبة في الواقع.
في وقت ما في بداية مسيرتك المهنية، قال لك شخص ما أن تُنفذ chmod 755 على دليل أو chmod 644 على ملف إعدادات. عمل ذلك. انتقلت إلى الأمام. الآن، بعد سنوات، تكتب تلك الأرقام المحددة من ذاكرة عضلية — وعندما يسألك أي شخص عن معنى 755، تُشير بشكل عام إلى الشاشة وتقول "هي مجرد مسألة الصلاحيات القياسية."
هذا مقبول، حتى أن يصبح غير مقبول. في اللحظة التي تحتاج فيها إلى تحليل خطأ صلاحيات منع الوصول، تقرر ما يجب وضعه في سكربت جديد، أو تشرح له مطور مبتدئ لماذا chmod 777 لا يُعد الحل لكل الأشياء — تصبح ذاكرة العضلات غير كافية.
إليك ما يعنيه الأرقام في الواقع.
هيكل البتات
تُستخدم صلاحيات الملفات في نظام يونكس كثلاث مجموعات من البتات الثلاثة. هذا كل شيء. كل مجموعة تتحكم في ما يمكن للنوع المحدد من المستخدم القيام به — المُلك، المجموعة، الآخرين — وكل بيت داخل المجموعة يُشير إلى قراءة، كتابة، أو تنفيذ.
القيم هي: قراءة = 4، كتابة = 2، تنفيذ = 1. تُجمع هذه القيم لكل مجموعة. لذا 7 تعني قراءة + كتابة + تنفيذ (4+2+1). 5 تعني قراءة + تنفيذ (4+1). 4 تعني قراءة فقط.
تُحلل 755: يحصل المُلك على 7 (rwx)، يحصل المجموعة على 5 (r-x)، يحصل الآخرون على 5 (r-x). بالشكل الثنائي: 111 101 101. بالشكل الرمزي: rwxr-xr-xالقيمة الافتراضية التي كنت تكتبها طوال الوقت هي فقط "يمكن للمُلك أن يفعل كل شيء، ويمكن للآخرين أن يقرأوا ويعملوا ولكن لا يمكنهم الكتابة."
قراءة مخرجات ls -la
قبل إضافة أي فهرس. تأكد من وجود المشكلة أولاً. ls -la في أي دليل وتحصل على شيء مثل هذا:
drwxr-xr-x 2 deploy www-data 4096 May 29 10:00 public_html
-rw-r--r-- 1 deploy www-data 2341 May 29 09:45 config.php
-rwx------ 1 deploy deploy 891 May 28 14:20 deploy.sh
-rw------- 1 deploy deploy 411 May 10 08:30 .env
الرقم الأول هو نوع الملف: d للمجلد، - للملف العادي، l للمُشير. ثم تأتي مجموعات من ثلاث أحرف — المُلك، المجموعة، الآخرون. الـ "ـ" يعني أن الصلاحية مفقودة.
العدد بعد الصلاحيات هو عدد الروابط الصلبة. ثم اسم المُلك، اسم المجموعة، حجم الملف بالبايت، وقت التعديل، وأخيرًا اسم الملف.
لذا drwxr-xr-x 2 deploy www-data تعني: دليل، المُلك (الإطلاق) يمكنه القراءة والكتابة والتنفيذ، المجموعة (www-data) يمكنها القراءة والدخول ولكن لا يمكنها الكتابة، الجميع الآخر يمكنه القراءة والدخول ولكن لا يمكنه الكتابة. روابط صلبة مكونة من اثنين. هذه هي المجلدات القياسية للويب.
القيم الشائعة للصلاحيات وسبب وجودها
إليك تحليل القيم التي تستخدمها في الواقع، ما تعنيه، وما هي الأوقات التي تلجأ إليها:
| قيمة | رمزي | ثنائي | لا يوجد رأس 'Access-Control-Allow-Origin' | متى تستخدمها |
|---|---|---|---|---|
755 | rwxr-xr-x | 111 101 101 | المُلك: كامل. المجموعة/الآخرون: قراءة + تنفيذ | المجلدات، الملفات المُقدمة علائياً، الملفات المُقدمة للويب |
644 | rw-r–r– | 110 100 100 | المُلك: قراءة + كتابة. المجموعة/الآخرون: قراءة فقط | ملفات الإعداد، الملفات الثابتة، HTML، مصادر PHP |
600 | rw——- | 110 000 000 | المُلك: قراءة + كتابة. الجميع الآخر: لا شيء | مفاتيح SSH (~/.ssh/id_rsa)، ملفات .env |
700 | rwx—— | 111 000 000 | المُلك: كامل. الجميع الآخر: لا شيء | الملفات التي تحتوي على أسرار، الملفات المُخصصة |
777 | rwxrwxrwx | 111 111 111 | كل الناس: صلاحية كاملة | /tmp، مساحات التخزين المؤقتة في الحاويات — في أماكن قليلة فقط |
السبب في أن المجلدات تحتاج إلى صلاحية تنفيذ هو أن "التنفيذ" على المجلد يعني "الدخول" — القدرة على دخول المجلد ووصول إلى محتواه. إذا كان المجلد r--r--r--، يمكنك عرض أسماء الملفات داخله ولكن لا يمكنك الوصول إليها. تحتاج إلى البت x للدخول إلى المجلد أو فتح الملفات. هذا هو السبب في أن تكون 755 وليس 744 للمجلدات.
إذا أردت أن تمرّ بقيم هذه المجموعات بشكل تفاعلي، فإن مُحسّن IO Tools يسمح لك بتعديل البتات الفردية ورؤية القيم العشريّة والرمزيّة تتحديث في الوقت الفعلي — مفيد عند الحاجة إلى بناء قيمة صلاحية غير مألوفة.
النمط الرمزي: متى تستخدمه بدلًا من ذلك
النمط العشري يُحدد جميع الصلاحيات مرة واحدة. النمط الرمزي يُتيح تغييرات تدريجية. كلاهما صحيح — الاختيار يعتمد على ما تفعله.
chmod u+x script.sh يضيف صلاحية التنفيذ للمُلك دون تغيير أي شيء آخر. إذا كان الملف حاليًا 644، فإن هذا يجعله 744. إذا استخدمت النمط العشري وكتبت chmod 744 script.sh، فستحصل على نفس النتيجة — ولكن عليك أن تعرف الحالة الحالية أولاً.
العمليات الرمزية بسيطة: + تضيف صلاحية، - تُزيلها، = تُحدد لها بدقة. الأهداف هي u (المستخدم/المُلك)، g (المجموعة)، o (الآخرين)، a (الثلاثة معاً).
chmod u+x deploy.sh # add execute for owner
chmod g-w config.php # remove write from group
chmod o=r public/index.html # set others to read-only exactly
chmod a+r shared.txt # add read for everyone
استخدم النمط الرمزي عندما ترغب في تغيير صلاحية واحدة دون إعادة تعيين باقي الأشياء. استخدم النمط العشري عندما تُحدد الصلاحيات من الصفر أو ترغب في التحكم الكامل في الحالة النهائية.
لماذا لا تُنشأ الملفات بقيمة 666 بشكل افتراضي؟
أنشئ ملفًا جديدًا باستخدام محرر نصوص أو touch وستحصل على 644. أنشئ مجلدًا وستحصل على 755. من أين تأتي هذه القيم الافتراضية؟
تبدأ الملفات بقيمة نظرية أقصى هي 666 (لا تنفيذ بشكل افتراضي — يجب تعيينه بشكل محدد). تبدأ المجلدات بـ 777. القيمة umask تُطرح من هذه القيم القصوى.
القيمة الافتراضية لـ umask على معظم أنظمة لينكس هي 022. عند تطبيقها على ملف: 666 – 022 = 644. عند تطبيقها على مجلد: 777 – 022 = 755. هذا هو السبب في أن 644 و755 يشعرون بالافتراضية — لأنها ميكانيكية.
قبل إضافة أي فهرس. تأكد من وجود المشكلة أولاً. umask باستخدام أمر umask 027 تُعطيك 640 لملفات و750 لمجلدات، مما يُزيل جميع الصلاحيات للآخرين ويُسمح فقط للمجموعة بالقراءة.
chmod 777: ليس شريرًا، بل مجرد تقصير
إليك المراجعة الصادقة حول chmod 777: ليست كارثة أمنية في كل السياقات. فهي نادرة جدًا أن تكون الإجابة الصحيحة في البيئة الإنتاجية، ويعمل الناس عليها لأنها تُزيل خطأ الصلاحيات دون الحاجة إلى التفكير.
على خادم مشترك، chmod 777 على مجلد قابل للتعديل يعني أن أي عملية تعمل تحت أي مستخدم — بما في ذلك تطبيق ويب مُختل — يمكنها الكتابة في هذا المجلد. هذا هو سطح هجوم حقيقي. كما أن هذا النوع من الأشياء يبقى في البيئة الإنتاجية إلى الأبد لأن "سنتعامل معه لاحقًا."
الاستخدامات المناسبة لـ 777:
- /tmp في حاوية مؤقتة — لا شيء يُحتفظ به، لا شيء مهم، انتقل إلى الأمام
- التحقق من مشكلة صلاحيات أثناء التطوير — استخدمها لتأكيد أن المشكلة هي صلاحيات الملفات وليس شيئًا آخر، ثم قم بتعيين القيمة الصحيحة
- مجلدات التخزين المؤقت المشتركة على جهاز موثوق، مُستخدم واحد فقط — إذا كنت المُستخدم الوحيد، فإن صلاحية "الآخرين" ليست ذات أهمية
العملية التشخيصية هي: تواجه خطأ منع الوصول، قم بتطبيق 777 مؤقتًا لتأكيد أن المشكلة هي صلاحيات الملفات وليس شيئًا آخر، ثم اكتشف ما هي القيمة الصحيحة للصلاحيات وقم بتعيينها بدلًا من ذلك. chmod 777 استخدامها كأداة تشخيصية مقبول. chmod 777 في سكربت نقل يُراجعه أحد فقط هو كيف تحدث الاختراقات.
القيم المهمة التي يجب معرفتها
لا تحتاج إلى تذكر كل تجميعات ممكنة. هذه الأربعة تغطي حوالي 95% من الحالات الواقعية:
- 755 — المجلدات والملفات المُستخدمة بشكل علائين
- 644 — الملفات التي يجب أن تكون قابلة للقراءة من قبل الجميع ولكن قابلة للكتابة فقط من قبل المُلك
- 600 — الملفات الحساسة: مفاتيح SSH، بيانات التحقق، ملفات .env. سيرفض SSH استخدام مفتاح خاص إذا لم يكن 600 أو أكثر.
- 700 — الملفات التي تحتوي على أسرار تُستخدم داخلها ولا ينبغي أن تُنفذ من قبل أي شخص آخر
عندما تواجه شيئًا خارج هذا المدى، ابدأ من هيكل البتات: قم بتحديد ما يحتاجه المُلك، المجموعة، والآخرون لكل شيء، جمع البتات، اكتب الرقم. الـ حاسبة شمود مفيد هنا إذا كنت ترغب في تجنب الحساب الذهني تحت الضغط.
نموذج الصلاحيات هو أحد الأمور في يونكس التي تبدو عشوائية حتى تفهم أنها مجرد جمع ثنائي. بمجرد أن يُفهم هذا، تتوقف عن تقلد أوامر chmod التي يكتبها الآخرون وتفتح صلاحيات بشكل مقصود — وهذا هو الهدف.
تثبيت ملحقاتنا
أضف أدوات IO إلى متصفحك المفضل للوصول الفوري والبحث بشكل أسرع
恵 وصلت لوحة النتائج!
لوحة النتائج هي طريقة ممتعة لتتبع ألعابك، يتم تخزين جميع البيانات في متصفحك. المزيد من الميزات قريبا!
