إنتقل إلى المحتوى الرئيسي

0003 — عقد cTrader CLI هي HTTP + JWT، بدون SSH/shell

السياق​

تنفذ حاويات الاختبار/التشغيل على المضيفين البعيدين. النهج الواضح - SSH ثم تشغيل docker - يعطي التطبيق الرئيسي تنفيذ كود بعيد تعسفي بيانات اعتماد طويلة الأجل على كل عقدة. هذا نطاق انفجار كبير لنظام يقوم بتشغيل cBots غير الموثوقة من المستخدمين.

القرار​

كل مضيف بعيد يقوم بتشغيل وكيل HTTP مستقل CtraderCliNode بدون SSH وبدون shell. يستدعي التطبيق الرئيسي الوكيل عبر HTTP؛ كل طلب يحمل HS256 JWT قصير الأجل (5 دقائق، iss=app-main / aud=app-node) موقعة بسر تلك العقدة. الوكيل:

  • تشغيل فقط الصور التي تطابق AllowedImagePrefix (مع حد المسار حتى ghcr.io/spotware لا يمكن أن تطابق ghcr.io/spotware-evil/...);
  • execs docker عبر ArgumentList - أبداً string shell؛
  • هو بدون حالة، البحث عن الحاويات بواسطة تصنيف app.instance؛
  • التسجيل الذاتي والنبض إلى POST /api/nodes/register؛ يقوم التطبيق الرئيسي بتحديث/إدراج CtraderCliNode حسب الاسم، لذا تنجو عقدة من تغييرات IP.

النتائج​

  • رمز طلب مسرب تنتهي صلاحيته في دقائق؛ لا توجد بيانات اعتماد shell دائمة لسرقتها.
  • قدرة الوكيل محدودة بـ "تشغيل صورة مسموحة" - لا يمكن تحويله إلى shell بعيد عام.
  • هوية العقدة مبنية على الاسم، لذا إعادة توفير عقدة برقم IP جديد لا تيتم العقد تاريخه.