FreeToGenerate.com

بتُّ setuid بلا إذن تنفيذٍ يظهر حرف S كبيرًا: مضبوطٌ ولا يفعل شيئًا. وثُلثا الأوضاع التي تحمل بتًّا خاصًّا فيها واحدٌ كهذا.

قراءةكتابةتنفيذ
المالك
المجموعة
الآخرون

يشغّل الملفَّ بهويّة مالكه لا بهويّة من أطلقه. وعلى مجلَّدٍ لا يفعل شيئًا في لينكس.

يشغّل الملفَّ بهويّة مجموعته. وعلى مجلَّدٍ ترث الملفاتُ الجديدة تلك المجموعةَ بدل مجموعة منشئها.

على مجلَّدٍ لا يحذف الملفَّ إلا مالكُه — وهذا ما يجعل ‏/tmp المشترك آمنًا. أما على ملفٍّ عاديٍّ فيُهمَل.

0755
rwxr-xr-x
chmod 0755 filename

ثُمانيٌّ من ثلاثة أرقامٍ أو أربعة، أو حقلُ الأذونات من ls -l، بحرف النوع في أوله أو بدونه.

ما تُبقيه umask

‏umask لا تفعل إلا سلبَ الأذونات، ولا تمنح شيئًا أبدًا. وكونُ umask نفسِها تترك ملفًّا عند 644 ومجلَّدًا عند 755 ليس من صنعها: بل لأنّ البرامج تطلب 666 و777 على الترتيب، وumask تطرح من كلٍّ منهما.

ملفٌّ جديد
644
مجلَّدٌ جديد
755

متوفر أيضًا بلغات أخرى: English · Español · Português · Français

حاسبة chmod

من الأذونات إلى الثُماني والعكس، مع مخرَج ls والأمر جاهزًا للنسخ وتنبيهٍ حين تُشعل بتًّا خاصًّا لا شيء له ليعمل عليه.

ما حاسبة chmod؟

في أنظمة يونكس يحمل كلُّ ملفٍّ تسعةَ بتّاتِ إذن: قراءةً وكتابةً وتنفيذًا، للمالك وللمجموعة ولسائر الناس. والأمر chmod يضبطها، وهو يأخذها رقمًا ثُمانيًّا — أي 755 أو 644 المشهورين. وحاسبةُ chmod تحوّل المربّعات التي تفكّر بها إلى الرقم الذي يريده chmod، وتحوّل في الاتجاه المقابل كذلك.

وفوق تلك التسعة ثلاثةُ بتّاتٍ أخرى. فـ‏setuid وsetgid يجعلان البرنامج يعمل بهويّة مالك الملف أو مجموعته لا بهويّة من أطلقه؛ وبتُّ sticky على مجلَّدٍ يمنع الناس من حذف ملفات بعضهم بعضًا، وهو تمامًا سببُ كون ‏/tmp المشترك آمنًا. وهذه الثلاثة تكوّن الرقم الأول، فـ‏1777 هو ‏/tmp و4755 ملفٌّ تنفيذيٌّ بـsetuid.

وهذه الحاسبة تعمل في الاتجاهين. أشّر على المربّعات واقرأ الرقم، أو ألصق وضعًا — ‏755 أو 4755 أو rwxr-xr-x أو حقلَ الأذونات كاملًا منسوخًا من ls -l بحرف d الذي في أوله — فتتحرّك المربّعات لتطابقه.

كيف تستعملها

  1. أشّر على الأذونات التي تريدها. تسعةُ مربّعاتٍ للأذونات العادية وثلاثةٌ للبتّات الخاصة. والرقمُ الثُماني وصورةُ ls يتحدّثان أولًا بأول.
  2. انسخ الأمر كلَّه لا الرقم وحده. سطرُ الأمر مكتوبٌ جاهزًا للّصق، فليس ثمّة ما يُعاد تركيبه.
  3. أو ألصق وضعًا عندك أصلًا. ثُمانيًّا كان أو رمزيًّا، كلاهما يعمل. وهذا هو الاتجاه الذي تريده حين تقرأ مخرَج ls أو ملفَّ Dockerfile وتحاول أن تعرف ما الذي يسمح به فعلًا.

الحرف الكبير الذي يعني أن البتّ لا يفعل شيئًا

كلُّ بتٍّ خاصٍّ يعدّل بتَّ تنفيذٍ واحدًا. فـ‏setuid يعدّل بتَّ المالك، وsetgid بتَّ المجموعة، وsticky بتَّ سائر الناس. فإن أشعلتَ بتًّا خاصًّا وبتُّ التنفيذ الذي يخصّه مطفأ، بقي البتُّ مضبوطًا ولا شيء له ليعمل عليه — وls يقول لك ذلك بطباعة حرفٍ كبيرٍ بدل الصغير. فـ‏4755 يظهر rwsr-xr-x، أما 4644 فيظهر rwSr--r-- بحرف S كبير.

وليست هذه زاويةً نادرة. فمن أصل 3584 وضعًا ممكنًا تحمل بتًّا خاصًّا واحدًا على الأقل، يُظهر 2368 منها — أي 66.1 بالمئة — حرفًا كبيرًا واحدًا على الأقل. وهي بالنسبة لكلّ بتٍّ النصفُ بالضبط، لأنّ البتَّ الخاصّ وبتَّ التنفيذ الذي يعدّله يُضبطان مستقلَّين أحدهما عن الآخر. وهذا الرقم ليس تقديرًا: فالفضاء كلُّه 4096 وضعًا لا غير، فحُوّلت جميعها وفُحصت بدل أن تُؤخذ عيّنة.

وأكثرُ حاسبات chmod تطبع حرف s أو t صغيرًا مهما كان الحال، فتحوّل في صمتٍ خطأً إلى شيءٍ يبدو صحيحًا. أما هذه فتُظهر الحرف الكبير وتقول أيُّ بتٍّ خاملٌ ولماذا.

وتنبيهٌ في الاتجاه المقابل، إذ هو ما يُروى على غير وجهه: معنى بتّ sticky يتوقف على ما هو مثبَّتٌ عليه. فعلى مجلَّدٍ يقيّد الحذف، وهو المراد. أما على ملفٍّ عاديٍّ فكلُّ نظامٍ مستعمَلٍ اليوم يهمله.

حدودٌ صريحة، ومسألة umask

‏umask ليست إذنًا، بل قناعُ أذونٍ يُنزَع، وهي لا تستطيع إلا الطرح. ولهذا تترك umask 022 نفسُها ملفًّا جديدًا عند 644 ومجلَّدًا جديدًا عند 755 — والفرق ليس في umask البتّة، بل في أنّ البرامج تطلب 666 عند إنشاء ملفٍّ و777 عند إنشاء مجلَّد، وumask تنزع البتّات نفسَها من كلٍّ منهما. واللوحةُ هنا تعرض النتيجتين ليُرى هذا التفاوت بدل أن يفاجئ.

أما ما لا تستطيع هذه الصفحة إخبارك به فهو أآمنٌ وضعٌ ما على نظامك، لأنّ ذلك يتوقف على أمورٍ لا يحويها الرقم: من يملك الملف، وأيُّ المجموعات موجودة، وهل يسمح مجلَّدٌ أعلى بالوصول إليه أصلًا، وهل لـSELinux أو AppArmor رأيٌ في الأمر. فـ‏777 على ملفٍّ داخل مجلَّدٍ لا يستطيع أحدٌ اجتيازه لا يُبلَغ أصلًا؛ و644 على ملفٍّ داخل مجلَّدٍ يكتب فيه الجميع يمكن استبداله رغم ذلك.

وهي كذلك لا تمثّل قوائم ACL. فإن كان للملف قوائمُ تحكّمٍ بالوصول موسَّعة طبع ls علامةَ زائدٍ في آخر حقل الأذونات، ولم تعد البتّاتُ التسع هي القصةَ كلَّها. وهذه الحاسبة تقرأ البتّات التسع والثلاثةَ الخاصة ولا شيء سواها، وهذا هو النطاق الصريح لحاسبة أوضاع.

وأخيرًا، هذه دلالاتُ يونكس. أما أذونات ويندوز فنموذجٌ مختلفٌ تمامًا، ورقمٌ يخرج من هنا لا معنى له هناك.

لماذا هي مجانية؟

لأن تشغيلها لا يكلّف شيئًا. فالحسابُ يجري في متصفحك؛ لا يُرفع شيء، ولا خادمَ في الأمر، ولا حساب.

والصورةُ مفحوصةٌ مقابل قواعد نظام التشغيل نفسِه لا مقابل حاسبةٍ أخرى: فالأوضاعُ الـ4096 الممكنة كلُّها تُقابَل بمخرَج تطبيقٍ مطابقٍ لـPOSIX، والاختبارُ الذي يفعل ذلك محفوظٌ إلى جانب الشفرة.