يعمل أمر VPN بصلاحيات مستخدمك، فلا تظهر كلمة مرور، ويرتفع النفق. تبدو هذه السلسلة عملية بلا صلاحيات، وهي في الغالب ليست كذلك. توجد خدمة منفصلة تنفّذ تغييرات الشبكة، والسؤال المهم هو ما ستفعله تلك الخدمة لمستدعٍ لم تتحقق منه. عدّ طلبات كلمة المرور لا يخبرك بشيء عن تلك الحدود.

الواجهة والآلية والفحص

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

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

التفويض هو التصميم الطبيعي

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

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

النمط هو تفويض تقف خلفه سياسة. المثال تطبيق واحد لهذا النمط، لا تطبيق شامل.

اقرأ الحدود، لا الطلب

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

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

systemctl status NetworkManager
nmcli general permissions
ls -l /run/NetworkManager

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

أصلح الأذونات بالطريقة المدعومة

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

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

كيف يبدو الفصل الجيد

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

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

مقالات ذات صلة