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

أمن Linux / أساسي: الهوية والموارد والأدلة / الدرس 3

فهم الأذونات وقوائم الوصول وأقنعة الإنشاء

استخدام حسابات محدودة لبتات الأذونات مع إدراك الطبقات الأخرى اللازمة للوصول الفعلي.

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

أهداف الدرس

  • اختيار فئة المالك أو المجموعة أو الآخرين دون جمعها.
  • شرح اختلاف قناع الإنشاء عن تغيير أذونات قائمة.

تحديد العملية والكائن محل الفحص

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

اختيار الفئة المنطبقة بدلا من جمع الفئات

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

python فحص ثلاثة قرارات معلنة لفئات الوضع
def selected_bits(uid, groups, owner, group, mode):
    if uid == owner:
        return (mode >> 6) & 7
    if group in groups:
        return (mode >> 3) & 7
    return mode & 7

assert selected_bits(1200, {1300}, 1200, 1300, 0o046) == 0
assert selected_bits(1201, {1300}, 1200, 1300, 0o046) == 4
assert selected_bits(1202, set(), 1200, 1300, 0o046) == 6
print("owner, group, and other are selected separately")
الناتج المتوقع
owner, group, and other are selected separately

يجري البرنامج الكامل حساب بتات لهويات وأوضاع مختلقة ولا يقرأ inode أو يغير إذنا. يحصل المالك على صفر رغم سماح الآخرين؛ ولا ينمذج انتقالا لفئة أخرى أو ACL.

معاملة umask كإزالة من بتات الإنشاء المطلوبة

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

python حساب أوضاع إنشاء مشروطة دون استدعاء umask
def created_mode(requested, mask):
    return requested & (~mask & 0o777)

assert created_mode(0o666, 0o027) == 0o640
assert created_mode(0o777, 0o027) == 0o750
assert created_mode(0o666, 0o111) == 0o666
print("file=0640 directory=0750; mask adds no execute bits")
الناتج المتوقع
file=0640 directory=0750; mask adds no execute bits

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

قراءة قوائم الوصول وقواعد الدليل في سياقها

تضيف POSIX ACL إدخالات مستخدم ومجموعة وقناعا يقيد الحقوق الفعلية المناسبة. قد لا يظهر الوضع المألوف كل علاقة. تحكم الافتراضية الإرث وتحكم قائمة الوصول الكائن؛ وهما سؤالان. لا تصلح الرفض بجعل الشجرة كلها قابلة للكتابة؛ حدد العملية والمكون والهوية والإدخال الفعلي. يشرح المساق دون قراءة ACL حقيقية أو تعديلها، وقد تمنع السياسة الإلزامية فعلا سمح به التقديري.

فحص مصفوفة الوصول عند الطبقة المناسبة

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

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

ينتقل المالك لسماح الآخرين

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

يطرح القناع أو يطبق على القائم

لماذا يحدث؟
يساء فهم البتات ونطاق الإنشاء.
كيف تصلحه؟
استخدم الإزالة المشروطة وافصل التغيير اللاحق.
كيف تتجنب تكراره؟
سجل المطلوب وافتراض ACL.

يعالج الرفض بكتابة واسعة متكررة

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

اختبر فهمك

1. بتات المالك صفر والآخرون يقرؤون ويكتبون. هل يرث المالك وصولهم؟

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

لا. يختار تطابقه فئة المالك فينتج صفر. يحتاج الواقع سياق ACL والقدرات والمسار والسياسة المستبعد. لا تغير أذونات المضيف؛ تكفي البيانات المحلية للادعاء.

2. اختلفت أذونات ملف أُنشئ حديثا عن ناتج requested & ~mask. أي افتراض ينبغي فحصه؟

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

افحص هل تحكم قائمة ACL افتراضية في الدليل الأب عملية الإنشاء، وما وضع الأذونات الذي طلبه التطبيق فعلا، وهل غيرته الخدمة أو شفرة لاحقة. ليست الصيغة المبسطة عامة. لا يفحص التمرين أيا من هذه الحقائق في المضيف؛ لذلك يصفها بأنها غير متحققة، بدلا من تخمين إصلاح.

أهم ما تعلمته

  • تختار الفئات ولا تجمع آليا.
  • يزيل القناع المطلوب وفق افتراض ACL.
  • يتجاوز الوصول الحقيقي رقم الوضع.

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