احسب صلاحيات ملفات يونكس وأمر chmod
تعرض حاسبة chmod هذه صلاحيات الملفات في لينكس وmacOS بكل الصيغ التي تحتاجها: حدّد القراءة والكتابة والتنفيذ للمالك والمجموعة والآخرين، أو اكتب صيغة ثمانية مثل <code>755</code> أو رمزية مثل <code>rwxr-xr-x</code>، فتتحدث بقية العروض تلقائيًا. تحصل على أمر <code>chmod</code> المطابق بالصيغتين الرقمية والرمزية، وبتات setuid وsetgid وsticky، وشرح واضح لمن يستطيع فعل ماذا. كل الحسابات تتم في متصفحك.
كيف تحسب صلاحيات chmod
- 1حدّد الصلاحيات التي تريدها لـالمالك والمجموعة والآخرين، أو اكتب صيغة ثمانية مثل
644أو رمزية مثلrw-r--r--. يمكنك أيضًا لصق عمود كامل منls -lمثلdrwxr-sr-x. - 2اختر ملف أو مجلد: للقراءة والكتابة والتنفيذ معانٍ مختلفة لكل منهما، ويتغير الشرح بحسب اختيارك.
- 3أضف بت setuid أو setgid أو sticky إن احتجت إليه، أو ابدأ من وضع جاهز شائع مثل 755 أو 600.
- 4اكتب المسار، وفعّل تكراري إذا أردت تطبيقه على شجرة كاملة، ثم انسخ أمر chmod.
كيف تعمل الصلاحيات الثمانية
لكل ملف ثلاث مجموعات من الصلاحيات: واحدة لـالمالك (u)، وواحدة لـالمجموعة (g)، وواحدة لـالآخرين (o) أي كل من سواهم. كل مجموعة ثلاثة بتات — قراءة وكتابة وتنفيذ — والرقم الثماني هو مجموعها ببساطة: القراءة 4 والكتابة 2 والتنفيذ 1. إذن 7 تعني rwx (4+2+1)، و6 تعني rw- (4+2)، و5 تعني r-x (4+1)، و4 تعني r-- وحدها.
تشكّل ثلاثة أرقام الوضع كاملًا بترتيب: المالك ثم المجموعة ثم الآخرون. لذلك يمنح chmod 755 المالك rwx والجميع r-x، ويُكتب rwxr-xr-x، بينما يمنح chmod 644 المالك rw- والجميع r--، ويُكتب rw-r--r--. ويحمل رقم رابع في البداية البتات الخاصة: 4 لـsetuid و2 لـsetgid و1 لـsticky، كما في chmod 1777.
قيم chmod الشائعة
- 644 (rw-r--r--)
- الافتراضي للملفات العادية: المالك يعدّل والجميع يقرأ. مناسب لملفات HTML والصور ومعظم الإعدادات.
- 755 (rwxr-xr-x)
- الافتراضي للمجلدات والسكربتات والبرامج: الجميع يقرأ ويشغّل، والمالك وحده يعدّل.
- 600 (rw-------)
- ملفات خاصة لا يقرؤها إلا المالك: مفاتيح SSH الخاصة وملفات .env وبيانات الاعتماد. يرفض ssh المفتاح الخاص إذا كان الآخرون يستطيعون قراءته.
- 700 (rwx------)
- مجلد خاص مثل ~/.ssh لا يدخله إلا مالكه.
- 664 / 775
- مثل 644 و755 لكن المجموعة تستطيع الكتابة أيضًا: لمجلدات المشاريع المشتركة حيث يتشارك الزملاء مجموعة واحدة.
- 777 (rwxrwxrwx)
- يستطيع أي أحد القراءة والتعديل والتشغيل. نادرًا جدًا ما يكون الحل الصحيح لخطأ صلاحيات، وهو خطر أمني على خادم الويب.
- 1777 (rwxrwxrwt)
- كتابة للجميع مع sticky bit كما في /tmp: يستطيع الجميع إنشاء ملفات، لكن لا يحذف الملف إلا مالكه.
الصلاحيات على المجلدات
على المجلد تعني الأحرف الثلاثة شيئًا مختلفًا. القراءة تتيح عرض الأسماء بداخله، والكتابة تتيح إنشاء العناصر وإعادة تسميتها وحذفها، والتنفيذ (ويُسمى غالبًا البحث) يتيح دخوله بـcd والوصول إلى الملفات بأسمائها. القراءة والكتابة قليلتا الفائدة دون التنفيذ، ولهذا تحمل المجلدات x غالبًا حيثما تحمل r — أي 755 لا 644.
حذف ملف هو تعديل على مجلده لا على الملف نفسه. أي شخص لديه صلاحية الكتابة والتنفيذ على مجلد يستطيع حذف أي ملف فيه، حتى لو كان للقراءة فقط ولا يملكه — إلا إذا كان على المجلد sticky bit.
Setuid وsetgid وsticky bit
في الصيغة الرمزية تحل البتات الخاصة محل حرف التنفيذ: s عندما يكون التنفيذ مفعّلًا أيضًا وS عندما لا يكون، وt أو T لـsticky bit. الحرف الكبير يعني غالبًا خطأ، لأن برنامج setuid لا يستطيع أحد تشغيله لا يفعل شيئًا.
خصوصية في GNU coreutils: الأمر chmod 755 على مجلد يُبقي بت setuid أو setgid الموجود. لمسحهما برقم اكتب خمسة أرقام — chmod 00755 — أو استخدم chmod g-s.
- Setuid (4000, u+s)
- يعمل البرنامج بصلاحيات مالكه لا بصلاحيات من شغّله. يستخدمه passwd لكتابة /etc/shadow بصفة root. يتجاهله لينكس على السكربتات والمجلدات.
- Setgid (2000, g+s)
- يعمل البرنامج بصلاحيات مجموعته. وعلى المجلد ترث الملفات الجديدة مجموعة المجلد بدل المجموعة الأساسية لمنشئها — الإعداد المعتاد لمجلدات الفرق المشتركة (2775).
- Sticky bit (1000, +t)
- على المجلد، لا يحذف الملفات أو يعيد تسميتها إلا مالك الملف أو مالك المجلد أو root. يتجاهله لينكس الحديث على الملفات.
chmod رقمي أم رمزي؟
الوضع الرقمي مثل chmod 644 file يضبط كل البتات دفعة واحدة، وهذا ما تريده عندما تعرف الحالة النهائية. الصيغة الرمزية أكثر مرونة: chmod u=rw,g=r,o=r file يضبط الشيء نفسه، بينما chmod g+w file أو chmod o-rwx file يغيّران البتات المذكورة فقط ويتركان الباقي.
احذر مع chmod -R: وضع واحد لكل الملفات والمجلدات في الشجرة يمنح الملفات عادةً بت تنفيذ لا تحتاجه. استخدم find . -type d -exec chmod 755 {} + وfind . -type f -exec chmod 644 {} + لمعاملتها كلٌّ على حدة، أو الحرف الكبير X في chmod -R u=rwX,go=rX الذي يضيف التنفيذ للمجلدات وللملفات التي كان لديها أصلًا فقط. تأخذ الملفات الجديدة صلاحياتها الأولى من umask: قيمة 022 تعطي ملفات 644 ومجلدات 755. لمطابقة أسماء الملفات في سكربتات shell جرّب مختبر التعابير النمطية.
الأسئلة الشائعة
- ماذا يعني chmod 755؟
- يمنح 755 المالك القراءة والكتابة والتنفيذ (7)، والمجموعة والجميع القراءة والتنفيذ (5 و5)، ويُكتب rwxr-xr-x. إنه الوضع المعتاد للمجلدات والسكربتات والبرامج.
- ماذا يعني chmod 644؟
- يمنح 644 المالك القراءة والكتابة (6)، والجميع القراءة فقط (4 و4)، ويُكتب rw-r--r--. إنه الوضع المعتاد للملفات العادية مثل صفحات الويب والصور وملفات الإعداد.
- ما الفرق بين 755 و644؟
- يضيف 755 التنفيذ للجميع. على الملف يسمح بتشغيله كبرنامج، وعلى المجلد يسمح بدخوله. استخدم 644 للملفات التي تُقرأ فقط و755 للمجلدات والملفات التنفيذية.
- هل chmod 777 آمن؟
- نادرًا. يسمح 777 لكل مستخدم على النظام بتعديل الملف أو استبداله، وعلى خادم الويب قد يتيح لمهاجم دخل عبر موقع واحد تعديل مواقع أخرى. بدلًا من ذلك صحّح المالك بـchown أو امنح المجموعة الوصول (775 أو 664).
- ما الصلاحيات المناسبة لمفتاح SSH الخاص؟
- 600 (rw-------)، أو 400 للقراءة فقط، مع 700 للمجلد ~/.ssh نفسه. يرفض OpenSSH استخدام مفتاح خاص يستطيع مستخدمون آخرون قراءته ويعرض "UNPROTECTED PRIVATE KEY FILE".
- ماذا يعني s أو t في rwsr-xr-x؟
- الحرف s في موضع المالك أو المجموعة هو بت setuid أو setgid مع تفعيل التنفيذ أيضًا، والحرف t في موضع الآخرين هو sticky bit. أما S أو T الكبيران فيعنيان أن البت الخاص مفعّل دون صلاحية التنفيذ تحته.
- كيف أحوّل rwxr-xr-x إلى رقم؟
- قسّمه إلى ثلاث مجموعات — rwx وr-x وr-x — واجمع r=4 وw=2 وx=1 في كل منها: 7 و5 و5، فتحصل على 755. اكتبه في الحقل الرمزي أعلاه لتحويله فورًا.
- هل تغيّر هذه الأداة أي ملفات؟
- لا. هي تحسب الوضع والأمر فقط، وأنت من يشغّل الأمر. كل شيء يحدث في متصفحك.