محتويات الدورة

لينكس / الأساسي: أسس سطر الأوامر / الدرس 4

فهم الصلاحيات والملكية

اقرأ أنماط الملفات وميّز صلاحيات الملف من المجلد واختر أذونات محدودة لمختبر خاص.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • فك ترميز الأذونات الرمزية والثمانية.
  • شرح فحوص عبور المجلد والحذف.
  • استخدام umask دون افتراض أنه يمنح أذونات.

يعتمد الوصول على الهوية والكائن

لكل ملف معرف مستخدم مالك ومعرف مجموعة وبتات نمط. تحدد فئات المالك والمجموعة والآخرين مجموعة الأذونات المطبقة. تختار النواة عادة فئة المالك عند تطابق الهوية، وإلا فئة المجموعة المطابقة، وإلا الآخرين. لا تجمع الفئات الثلاث لتعويض رفض طلب. وللمجموعات الإضافية أثر أيضاً. يعرض id اعتماد العملية الحالية، ويعرض ls -l الملكية والنمط بصيغة مقروءة. الأسماء تسميات تُحل من معرفات رقمية، لذا يفيد العرض الرقمي عند اختلاف قواعد الحسابات.

تختلف دلالة البتات بين الملفات والمجلدات

تسمح القراءة في الملف العادي بقراءة المحتوى، والكتابة بتعديله، والتنفيذ بمحاولة تشغيله. وفي المجلد تسمح القراءة بعرض الأسماء، والتنفيذ بالبحث عن أسماء معلومة، والكتابة بتغيير المداخل مع نجاح بقية الفحوص. يغيّر حذف ملف المجلد الأب أساساً؛ لذلك قد يستطيع صاحب وصول مناسب إلى الأب إزالة ملف للقراءة فقط. يحتاج كل مجلد أب في المسار إلى إذن البحث، ولا يعوض نمط ملف قابل للقراءة عن مجلد سلف محجوب.

تحويل الأنماط إلى سياسة

تسمي عمليات chmod الرمزية الفئات والأذونات المتأثرة. يمنح u=rw,go= المالك القراءة والكتابة ويمحو أذونات المجموعة والآخرين. تجمع الأنماط الرقمية القراءة=4 والكتابة=2 والتنفيذ=1 لكل فئة؛ فيعني 640 قراءة وكتابة للمالك وقراءة للمجموعة ومنع الآخرين. حدد السياسة قبل اختيار الرقم. يغيّر chmod النمط، أما الملكية فلها أدوات مختلفة وغالباً صلاحيات إدارية. لا تعالج مشكلة وصول مجهولة بمنح الجميع كل الأذونات.

bash تخصيص الوصول لملاحظة مصطنعة
lab=$(mktemp -d)
printf '%s\n' 'synthetic private note' > "$lab/note.txt"
chmod u=rw,go= "$lab/note.txt"
stat -c '%a' "$lab/note.txt"
الناتج المتوقع
600

يحصل ملف المختبر الذي أنشأه المالك على النمط 600. يغيّر المثال الملاحظة المؤقتة الجديدة وحدها، ويستخدم stat صياغة GNU.

يحجب umask أذونات الإنشاء

تطلب البرامج نمط إنشاء أولياً، ويحجب umask عادة البتات المحددة من الطلب. من الطلبات الشائعة 666 للملفات العادية و777 للمجلدات، وقد يطلب التطبيق أقل. مع umask 027 تصبح النتيجة 640 و750. هو قناع بتات وليس طرحاً عشرياً عادياً، ولا يضيف إذناً لم يطلبه البرنامج. ولا يؤثر في الملفات الموجودة. وقد يغير ACL افتراضي للمجلد الأب اشتقاق أذونات الإنشاء، وهو ما ندرسه في المستوى المتوسط.

bash ملاحظة القناع داخل صدفة فرعية
lab=$(mktemp -d)
(umask 027; mkdir "$lab/team"; : > "$lab/team/item.txt")
stat -c '%a' "$lab/team" "$lab/team/item.txt"
الناتج المتوقع
750
640

في نظام ملفات مختبري عادي دون ACL افتراضي موروث، يكون المجلد 750 والملف 640. لا يتغير قناع الصدفة الأم.

التعرف إلى ضوابط إضافية

بتات النمط نموذج أولي وليست نظام الحماية كله. قد تمنح ACL وصولاً لمستخدمين محددين، وتفرض ضوابط إلزامية مثل SELinux أو AppArmor قيوداً إضافية، ويمنع تركيب للقراءة فقط الكتابة رغم سماح النمط. تقيد البتة اللاصقة في مجلد مشترك من يمكنه إزالة المداخل أو إعادة تسميتها، ولا تجعل الملفات خاصة تلقائياً. ولمعرف المستخدم أو المجموعة المضبوطين دلالات تنفيذ أو وراثة خاصة تستحق مراجعة مستقلة. شخّص العملية المرفوضة قبل تغيير ضوابط لا علاقة لها.

الأخطاء الشائعة وإصلاحها

Permission denied رغم السماح بقراءة الملف

لماذا يحدث؟
يفتقر مجلد أب إلى إذن البحث أو يمنع ضابط آخر الوصول.
كيف تصلحه؟
افحص المسار كاملاً والسياسة المطبقة.
كيف تتجنب تكراره؟
قيّم العملية المطلوبة من البداية للنهاية.

استخدام 777 إصلاحاً عاماً

لماذا يحدث؟
لم يُحدد المستخدم والفعل المطلوبان.
كيف تصلحه؟
امنح الفئة والإذن المطلوبين فقط.
كيف تتجنب تكراره؟
اكتب سياسة وصول قبل تغيير النمط.

توقع تعديل umask للملفات الموجودة

لماذا يحدث؟
اختلط قناع الإنشاء بالأمر chmod.
كيف تصلحه؟
افحص الأنماط الموجودة وعدّل كائنات المختبر المحددة فقط.
كيف تتجنب تكراره؟
افصل افتراضيات الإنشاء عن إدارة الأذونات لاحقاً.

اختبر فهمك

1. فسّر 750 على مجلد وما يستطيع عضو المجموعة فعله.

اعرض الحل المشروح

للمالك القراءة والكتابة والبحث، وللمجموعة القراءة والبحث، وللآخرين لا شيء. يستطيع عضو المجموعة عرض الأسماء وعبور المجلد، ولا ينشئ المداخل أو يزيلها بهذه الأذونات وحدها. وتبقى قراءة المحتوى مرتبطة بأذونات كل ملف.

2. يطلب برنامج النمط 600 مع umask 022. توقع النتيجة وعللها.

اعرض الحل المشروح

تبقى النتيجة 600 لأن الطلب يستبعد أصلاً بتات كتابة المجموعة والآخرين التي يحجبها 022. يزيل umask البتات المطلوبة ولا يضيف القراءة للمجموعة والآخرين لتحويل النمط إلى 644.

أهم ما تعلمته

  • الوصول إلى المجلد ومحتوى الملف فحصان منفصلان.
  • استخدم أنماطاً صريحة محدودة وافحص الضوابط الإضافية.

المراجع الرسمية