الأمان والموافقات
تستخدم EstaCoda نموذج أمان قائم على القدرات. فئات مخاطر الأدوات، وأنماط الموافقة، وثقة مساحة العمل، وقوائم السماح للقنوات تعمل معًا لتحديد سلوك الوكيل. القواعد مرئية، والإعدادات الافتراضية متحفظة، والأرضية الصلبة لا يمكن تجاوزها.
أنماط الموافقة
| الوضع | السلوك | الاسم المستعار |
|---|---|---|
strict | يطلب الموافقة على تقريبًا كل تنفيذ أداة بعد الأرضية الصلبة | manual |
adaptive | الفرز الحتمي أولًا، ثم المقيّم الذكي الاختياري للحالات المحلية المدمرة الغامضة | smart |
open | بوابات محدودة للإجراءات غير الصلبة؛ الأرضية الصلبة لا تزال سارية | off |
الافتراضي: adaptive.
في الوضع adaptive، يطبق النظام القواعد الحتمية أولًا. إذا كان الأمر غامضًا ومحليًا مدمرًا، يصنّفه المقيّم الذكي. إذا كان المقيّم مفقودًا أو فاشلًا، يرتدع النظام إلى الموافقة اليدوية.
/yolo يبدّل الوضع open للجلسة الحالية. لا يتجاوز الأرضية الصلبة.
الأرضية الصلبة
الأرضية الصلبة غير مشروطة. تعمل قبل الموافقات، و /yolo، والمقيّم الذكي، وطوابير البوابة. أي أمر يطابق نمط الحظر الصلب مرفوض. الشدة هي بيانات وصفية فقط؛ لا تقرر ما إذا كان الحظر قابلًا للموافقة.
فئات الحظر الصلب:
- الحذف العودي الواسع أو الشبيه بالجذر
- عمليات القرص التدميرية (
mkfs،ddإلى أجهزة الكتلة) - أوامر الإيقاف أو إعادة التشغيل
- أنماط fork-bomb أو kill-all
- قراءة الأسرار الصريحة
- التثبيت عبر الأنابيب (
curl ... | bash) - دفع git بالقوة
- تدمير الأذونات (
chmod 777 /،chmod 000 /) - الكتابة فوق الأجهزة، وتفريغ جدران الحماية، والإنهاء الذاتي
- Terraform destroy، والإزالة التدميرية للحزم، وإعادة تعيين Git التدميرية
يُسوّي كاشف سلامة الأوامر المدخلات قبل المطابقة: تُزال تسلسلات ANSI، وتُسوّى أحرف Unicode العريضة بـ NFKC، ويُحافظ على التحليل المدرك للرموز.
فئات مخاطر الأدوات
| الفئة | الأمثلة | البوابة |
|---|---|---|
safe | قراءة الملفات | لا شيء |
read-only-network | البحث/استخراج/زحف الويب، لقطات المتصفح | سياسة الشبكة للقراءة فقط |
caution | كتابة الملفات، التعديلات | تكيفي أو صارم |
external-side-effect | POSTs الشبكة، واجهات API الخارجية | عادةً مُبواب |
irreversible | الحذف، التوزيع، الإرسال | دائمًا مُبواب |
نطاقات الموافقة
| النطاق | المدة |
|---|---|
once | تنفيذ واحد |
session | حتى نهاية الجلسة |
always | مستمر حتى الإلغاء |
الموافقات الدائمة تطابق قيم targetKey المُسوّاة. targetKey يتضمن نوع العملية والأهداف المُسوّاة. ملخصات العرض ليست حدود الموافقة.
الموافقات الدائمة لا تتجاوز حظر الأوامر الصلبة. فحص الأرضية الصلبة يعمل أولًا.
ثقة مساحة العمل
ثقة مساحة العمل تسمح للعمل المحلي العادي في ذلك الدليل بالمضي بشكل استباقي. هي حالة مملوكة لكل دليل عالميًا تُحفظ في ~/.estacoda/trust.json.
- الثقة لا تتحكم في تحميل الإعداد. يأتي إعداد وقت التشغيل دائمًا من الملف الشخصي المُختار.
- الثقة لا تُعطّل الأرضية الصلبة.
- فئات المخاطر الواضحة لا تزال تُطلق منطق الموافقة حتى في مساحات العمل الموثوقة.
الثقة منفصلة عن الملفات الشخصية. الملف الشخصي يختار الإعداد والاعتمادات. ثقة مساحة العمل تتحكم في سلوك الأداة المحلية لدليل.
أمان القنوات
جميع القنوات تشترك في نفس سياسة الأمان في وقت التشغيل. لا يوجد تصعيد خاص بالقناة. Email لا يُضيف احتكاكًا خاصًا بـ Email؛ Discord لا يُضيف احتكاكًا خاصًا بـ Discord.
قوائم السماح
| القناة | السماح بـ | مفتاح الإعداد |
|---|---|---|
| Telegram | userId، chatId | allowedUsers، allowedChats |
| Discord | userId، guildId، channelId | allowedUsers، allowedGuilds، allowedChannels |
| عنوان المرسل | allowedSenders | |
userId (هاتف/JID) | allowedUsers |
allowAllUsers: true في Email يتجاوز تصفية المرسلين. WhatsApp يتطلب channels.whatsapp.experimental: true للتهيئة.
تفويض مستخدمي WhatsApp منفصل عن ربط جهاز WhatsApp: أمر estacoda whatsapp يربط الجهاز عبر QR code في الطرفية، بينما dmPolicy: "pairing" ينتظر رمز تفويض أحادي الاستخدام ومخزنًا كـ hash وليس وصولًا مفتوحًا. يبقى Telegram pairing قائمًا على الإعدادات وغير متغير حاليًا.
موافقات البوابة
موافقات البوابة تستخدم جدول pending_approvals الدائم في قاعدة بيانات الجلسة. الصفوف مُنطقة بالملف الشخصي. الموافقات المعلّقة للاستفسار فقط: نتائج deny الحتمية ونتائج الأرضية الصلبة لا تصفوف قابلة للموافقة. حمولات الأوامر تُحذف بعد الموافقة أو الرفض أو انتهاء الصلاحية.
حدود تحكم CLI أثناء الدور النشط
تحكم الدور النشط هو إدخال محلي خاص بـ CLI. يعمل فقط أثناء دور CLI تفاعلي على TTY مدعوم، ويمر عبر سطح Operator Console steer ومسار المقاطعة الصلبة. لا تحصل محولات البوابة، ولا رسائل القنوات، ولا طوابير الموافقة، ولا موجه المزود على هذا المسار.
السلوك الحالي:
- الكتابة أثناء الدور النشط تفتح
Steer current turn. - النص غير الفارغ يرسل توجيهًا، ويكتب كتلة
User steer:مرئية في transcript، ويلغي الدور الحالي بسببCLI steer، ثم يصفّ إعادة محاولة واحدة بالنص الأصلي مع كتلة ملاحظة توجيه صريحة. - الإدخال الفارغ أو المؤلف من مسافات فقط لا يفعل شيئًا.
Escيلغي draft أو queued steer.- يبقى
Ctrl+Cمسار المقاطعة الصلبة ويلغي الدور الحالي بسببSIGINT؛ ولا يُعامل كإرسال أو إلغاء لـ steer.
هذه الضوابط لا تغيّر دلالات موافقات البوابة. البوابة والقنوات غير CLI تبقى
على مسارات التحكم الحالية: الموافقات البعيدة تمر عبر ChannelGateway، وصفوف
الموافقة الدائمة تبقى للاستفسار فقط، والمحولات لا تحصل على steer lane للدور
النشط.
مطالبات الأسرار خارج مسار Operator Console هذا. يجب ألا يظهر المحتوى الملصوق في مطالبة سرية ضمن paste preview أو ملفات مراجع اللصق أو status rails أو السجلات أو رسائل steer.
رموز التسليم
التسليم CLI↔Telegram يستخدم رموزًا قصيرة العمر لمرة واحدة:
- رموز Crockford base-32 من 6 أحرف من
crypto.randomInt - حيز المفاتيح: 32^6 (~1.07 مليار تركيبة)
- TTL: 10 دقائق افتراضيًا
- كتابة ملفات ذرية بأذونات
0o600 - الفشل في الاسترداد يعيد رسائل عامة؛ لا تسريب لمعرف الجلسة
- لا مُقيّد معدل في v0.1.0؛ الاحتواء هو TTL قصير + حيز المفاتيح + مرة واحدة + قائمة السماح
سلامة عنوان URL للمتصفح والويب
أدوات المتصفح والويب تُطبق أرضية سلامة URL:
- عناوين URL الخاصة والداخلية محظورة افتراضيًا (loopback، RFC1918، link-local، نقاط نهاية بيانات التعريف السحابية)
- نقاط نهاية بيانات التعريف السحابية محظورة دائمًا، حتى عند السماح بعناوين URL الخاصة
security.allowPrivateUrlsهو مفتاح الإعداد القانوني؛browser.allowPrivateUrlsهو اسم مستعار مهملESTACODA_ALLOW_PRIVATE_URLSيتجاوز الإعداد (1/true/yes/onللصواب؛0/false/no/offللخطأ)security.websiteBlocklistتدعم النطاقات الدقيقة وبدائل اللاحقات مثل*.example.com
browser.cdp هي أداة external-side-effect. طرق CDP القادرة على URL تُطبق سلامة URL، وفحص الأسرار، وفحوصات سياسة المواقع.
الفشل والاسترداد
الإجراء المرفوض: الأمر تطابق حظر الأرضية الصلبة أو السياسة أرجعت deny. الأداة لا تُنفذ. تحقق من وضع الأمان وفئة مخاطر الأمر.
الموافقة مطلوبة: السياسة أرجعت ask. استخدم /approve أو /deny في البوابة، أو رد على مطالبة CLI. يمكن إلغاء الموافقات الدائمة بـ /revoke <id>.
موافقة قديمة: الموافقات الدائمة تستمر حتى الإلغاء. إذا انحرف السلوك، ألغِ الموافقات القديمة وأعد الموافقة تحت السياسة الحالية.
ثقة ملغاة: إذا كانت مساحة العمل غير موثوقة، الأوامر المحلية التي كانت تعمل استباقيًا قد تتطلب موافقة. أعد الثقة بـ estacoda trust إذا كان الدليل آمنًا.
أرضية الأوامر غير الآمنة: حتى في الوضع open أو مع /yolo، حظر الأرضية الصلبة يبقى نشطًا. إذا حُظر أمر، فهو محظور. غيّر الأمر، لا الوضع.
كيفية الفحص
# وضع الأمان الحالي والقرارات الأخيرة
/security
/security debug
# حالة البوابة بما في ذلك الموافقات المعلقة
estacoda gateway status
# جاهزية البوابة لكل قناة
estacoda gateway diagnose
# قوائم السماح للقنوات
estacoda channels status
مرتبطات
- الهندسة المعمارية — بنية النظام وطبقة الأمان
- بيئة التشغيل — سلك سياسة الأمان أثناء إنشاء وقت التشغيل
- القنوات — إعداد القنوات وقوائم السماح
- الذاكرة — حدود ثقة الذاكرة