لماذا يكون الوضع المميّز أوسع مما يحتاجه VPN
يمنح الحاوية المميّزة أجهزة وقدرات لا علاقة لها بالنفق. اعرف الشرط الواحد الكامن وراء الخطأ قبل أن تستخدمه كمفتاح.
لم تكن الحاوية تريد فتح نفقها، فأُضيف علم الامتياز، والآن تعمل. ما أثبتته تلك التسلسلة هو أن إذنًا واحدًا على الأقل كان ناقصًا، ولا يقول شيئًا عن أي إذن. يمنح الوضع المميّز مجموعة من القدرات والوصول إلى الأجهزة أوسع بكثير مما تحتاجه واجهة النفق.
ما يغيّره العلم فعليًا
تتلقى الحاوية المميّزة قدرات واسعة ووصولًا إلى أجهزة المضيف، وهو منح أكبر بكثير مما يتطلبه مسار الشبكة. المجموعة الدقيقة توثّقها بيئة التشغيل لا تحددها الحكايات المتوارثة، وتوضح وثائق تشغيل الحاويات في Docker خيارات الامتياز المتاحة. قراءتها مرة واحدة تكفي لرؤية أن النفق جزء صغير من المجموع.
شرطان أضيق يغطيان معظم حاويات VPN. يتطلب إعداد واجهة قدرة إدارة الشبكة، ويتطلب فتح جهاز النفق الوصول إلى عقدة الجهاز تلك تحديدًا. هذان منحان منفصلان، وتوفيرهما معًا يبقى أضيق من الخيار الشامل. بقية المجموعة المميّزة لا علاقة لها بالنفق. إنها موجودة لأحمال العمل التي تحتاج فعلًا إلى وصول على مستوى المضيف، وحاوية VPN ليست عادة واحدة منها.
طابِق كل خطأ مع شرط واحد مسبق
تخبرك رسالة الخطأ بالشرط المسبق الناقص إذا قرأتها قبل أن تكتمها. رسالة عن عقدة جهاز تسمّي الجهاز، ورسالة عن عملية غير مسموح بها تسمّي قدرة، ورسالة عن وحدة أو sysctl تسمّي دعم النواة. لكل من هذه إصلاح مختلف، وواحدة فقط منها قدرة.
ملف التهيئة الناقص يبقى ناقصًا بعد منح كل قدرة، ولهذا لا يغيّر الوضع المميّز شيئًا أحيانًا على الإطلاق. تبدأ الحاوية، ويظل النفق يفشل، ولم يكن الخطأ الحقيقي يومًا عن الأذونات. دعم النواة هو الحالة الثالثة وأكثرها عرضة لسوء القراءة. الوحدة غير المحمّلة على المضيف لا يمكن تحميلها من داخل حاوية بلا امتيازات، ومنح المزيد من القدرات داخل الحاوية لا يغيّر حالة المضيف.
افحص الشرط لا العَرَض
ابدأ بأدنى استدعاء توثّقه الصورة، وشغّله، واحتفظ بنص الفشل الدقيق. ثم أضف منحًا واحدًا في كل مرة ولاحظ أي إضافة غيّرت النتيجة.
ls -l /dev/net/tun
docker run --rm --cap-add NET_ADMIN --device /dev/net/tun image:tag
ip -br link show type tunالحاوية التي ترى الجهاز وتحمل القدرة لكنها تفشل رغم ذلك تخبرك أن المشكلة في مكان آخر. تلك نتيجة مفيدة، وكان الوضع المميّز سيخفيها.
افحص أذونات الجهاز على المضيف أيضًا، لأن عقدة جهاز ممنوحة بشكل صحيح مع ملكية مجموعة خاطئة تنتج الخطأ نفسه الذي ينتجه منح مفقود.
سجّل أضيق منح يعمل
اكتب كل جهاز وقدرة يحتاجها النشر، مع الخطأ الذي برّره. هذا السجل هو ما يتيح للشخص التالي إزالة شيء بأمان، وهو ما سيطلبه المدقق عندما يُبلّغ عن حاوية بأنها مميّزة.
راجع السياق المحيط أيضًا، لأن شبكة المضيف ونقاط تركيب المضيف وخيارات بيئة التشغيل يمكن أن يوسّع كل منها أثر منح الإذن. استدعاء مختبري معزول يجمعها كلها ليس تهيئة إنتاج، مهما نجح. اختبر التطبيق وسلوكه في DNS وفشل النفق قبل أن تعتبر النشر منتهيًا. الإذن بإنشاء واجهة ليس سياسة خروج، والحاوية التي تستطيع النفق بشكل مثالي لا تزال تمرّر كل ما يرسله التطبيق.