# الأمان ## نظرة عامة صُمِّم Neotask بنية أمنية أولاً. تُقيَّد البوابة بـ localhost بشكل افتراضي، وتُشفَّر جميع البيانات الحساسة في حالة السكون، ويمكن تحديد تنفيذ الوكيل ببيئة معزولة في حاويات مخصصة. ## أمان الشبكة ### Loopback بشكل افتراضي تستمع البوابة فقط على `127.0.0.1` (localhost) ما لم تغيّر وضع الارتباط صراحةً. لا كشف شبكي خارجي بشكل افتراضي. ### المصادقة تتطلب جميع اتصالات WebSocket المصادقة: - **مصادقة الرمز**, رمز حامل (UUID أو سلسلة مخصصة) - **مصادقة كلمة المرور**, كلمة مرور مشفرة بـ Bcrypt - **الوكيل الموثوق**, رؤوس مصادقة مسبقة من الوكلاء العكسيين - **الثقة المحلية**, اتصالات Loopback موثوقة ضمنياً ### أمان الوصول عن بُعد للوصول عن بُعد، النهج الموصى به هو **Tailscale VPN** أو **نفق SSH**, لا تكشف البوابة مباشرة على الإنترنت أبداً. ## إقران الأجهزة ### كيف يعمل الإقران كل عميل يتصل بالبوابة يجب إقرانه: 1. يقدم الجهاز هويته (البصمة + المفتاح العام) 2. تُصدر البوابة تحدي الإقران (nonce) 3. يوقّع الجهاز الـ nonce بمفتاحه الخاص 4. توافق على الجهاز من خلال واجهة المستخدم 5. تُصدر البوابة رمز الجهاز للاتصالات المستقبلية ### نموذج الثقة - **الأجهزة المحلية** (loopback) تتم الموافقة عليها تلقائياً للراحة - **الأجهزة غير المحلية** تتطلب موافقة صريحة - تُخزَّن رموز الأجهزة محلياً وتُعاد استخدامها عند إعادة الاتصال - يمكن إلغاء الأجهزة في أي وقت ## التشفير ### البيانات في حالة السكون - **AES-256-GCM**, تُشفَّر جميع الرموز والأسرار ومفاتيح API في حالة السكون - **مفاتيح مشتقة من الآلة**, مفاتيح التشفير مشتقة عبر scrypt من هوية الجهاز - **لا تخزين نصي**, الرموز لا تُخزَّن أبداً كنص عادي ### البيانات أثناء النقل - **TLS**, HTTPS لتواصل API - **WSS**, WebSocket Secure لاتصالات البوابة (عند استخدام Tailscale Serve أو وكيل عكسي) - **توقيع HMAC**, سلامة الطلب مع nonce والطابع الزمني ## العزل ### العزل المبني على Docker يمكن تحديد تنفيذ أوامر الوكيل ببيئة معزولة في حاويات Docker: - **ملفات تعريف لكل وكيل**, يمكن لكل وكيل أن يمتلك إعداد بيئته المعزولة الخاص - **حدود الموارد**, حدود CPU والذاكرة والمهلة قابلة للتكوين - **عزل الشبكة**, يمكن عزل الحاويات من الشبكة - **تقييد نظام الملفات**, الوكلاء يصلون فقط إلى مساحة عملهم - **صور مخصصة**, استخدام صور مبنية مسبقاً مع أدوات محددة مثبتة ### نطاقات البيئة المعزولة | النطاق | الوصف | |-------|-------------| | **لكل جلسة** | حاوية جديدة لكل جلسة | | **لكل وكيل** | حاوية دائمة لكل وكيل | | **مشترك** | حاوية مشتركة عبر الوكلاء | ### وصول مساحة العمل يمكن للوكلاء المحددين ببيئة معزولة الوصول إلى دليل مساحة عملهم (المثبتة في الحاوية) لكن لا يمكنهم الوصول إلى نظام ملفات المضيف خارج مساحة عملهم. ## موافقات التنفيذ التحكم في الأوامر التي يمكن للوكلاء تنفيذها على العقد ومضيف البوابة: ### الأوضاع | الوضع | الوصف | |------|-------------| | **قائمة السماح** | الأوامر المعتمدة مسبقاً فقط تنفّذ | | **الطلب** | الأوامر غير المعروفة تطلب موافقة المستخدم | | **كامل** | بدون قيود (استخدم بحذر) | ### التكوين لكل عقدة لكل عقدة (macOS ومضيفات بدون واجهة) إعداد موافقة تنفيذ خاص بها، مخزّن محلياً. يمكنك السماح لثنائيات محددة (مثلاً `/usr/bin/docker` و`/usr/local/bin/terraform`) مع حظر كل شيء آخر. ## الوضع المرتفع بعض العمليات تتطلب التشغيل على مضيف البوابة مباشرة (وليس في بيئة معزولة). الوضع المرتفع: - مقيَّد بإذن صريح في إعداد الوكيل - متاح فقط على مضيف البوابة - معطّل بشكل افتراضي - قابل للتدقيق من خلال التسجيل ## تدقيق الأمان يتحقق تدقيق الأمان المدمج من: - أذونات ملف الإعداد (يجب أن تكون 600) - أذونات ملفات الجلسة - إصدار Node.js (تصحيحات الأمان) - اكتشاف الأسرار النصية - التحقق من قائمة سماح الإضافات - تدقيق واجهة الشبكة المفتوحة - اكتمال إعداد المصادقة يمكن للتدقيق إصلاح العديد من المشكلات تلقائياً عند منحه الإذن. ## أفضل الممارسات 1. **إبقاء البوابة على loopback**, استخدم Tailscale أو SSH للوصول عن بُعد 2. **تفعيل العزل**, تشغيل أوامر الوكيل في حاويات Docker 3. **استخدام قوائم سماح التنفيذ**, تقييد الأوامر التي يمكن للوكلاء تشغيلها على العقد 4. **تعيين رموز المصادقة**, تكوين مصادقة الرمز دائماً، حتى لـ loopback 5. **مراجعة أذونات الوكيل**, استخدام ملفات تعريف الأدوات الدنيا حيثما أمكن 6. **إبقاء Neotask محدَّثاً**, التحديثات تتضمن تصحيحات الأمان 7. **التدقيق بانتظام**, تشغيل تدقيقات الأمان لرصد الإعدادات الخاطئة 8. **تقييد تحميل الإضافات**, ثبّت الإضافات الموثوقة فقط