استكشاف الأخطاء وإصلاحها
تغطي هذه الصفحة أكثر المشكلات شيوعاً عند تشغيل PRX-SD، إلى جانب أسبابها وحلولها.
فشل تحديث قاعدة بيانات التوقيعات
الأعراض: يفشل sd update بخطأ شبكة أو انتهاء مهلة أو عدم تطابق SHA-256.
الأسباب المحتملة:
- لا يوجد اتصال بالإنترنت أو جدار الحماية يحجب HTTPS الصادر
- خادم التحديث غير متاح مؤقتاً
- وكيل أو جدار حماية مؤسسي يُعدِّل الاستجابة
الحلول:
- التحقق من الاتصال بخادم التحديث:
curl -fsSL https://api.github.com/repos/openprx/prx-sd-signatures/commits?per_page=1- استخدام سكريبت التحديث غير المتصل إذا كانت لديك قيود على الشبكة:
# على جهاز متصل بالإنترنت
./tools/update-signatures.sh
# نسخ دليل التوقيعات إلى الجهاز المستهدف
scp -r ~/.prx-sd/signatures user@target:~/.prx-sd/- إجبار إعادة التنزيل لمسح أي ذاكرة مؤقتة تالفة:
sd update --force- استخدام خادم تحديث مخصص إذا كنت تستضيف مرآة خاصة:
sd config set update_server_url "https://internal-mirror.example.com/prx-sd/v1"
sd update- التحقق من عدم تطابق SHA-256 -- هذا يعني عادةً أن التنزيل كان تالفاً أثناء النقل. حاول مرة أخرى، أو نزِّل يدوياً:
sd update --forceTIP
شغِّل sd update --check-only للتحقق من توفر تحديث دون تنزيله.
بطء الفحص
الأعراض: يستغرق فحص دليل وقتاً أطول بكثير مما هو متوقع.
الأسباب المحتملة:
- فحص أنظمة ملفات مثبتة عبر الشبكة (NFS، CIFS، SSHFS)
- يُجمَّع قواعد YARA عند كل فحص (لا توجد ذاكرة مؤقتة للتجميع)
- الكثير من المسارات المتنافسة على I/O على الأقراص الدوارة
- التكرار في الأرشيفات على الأرشيفات المتداخلة الكبيرة
الحلول:
- زيادة عدد المسارات لتخزين SSD:
sd config set scan.threads 16- تقليل عدد المسارات للأقراص الدوارة (محدودة بـ I/O):
sd config set scan.threads 2- استثناء المسارات البطيئة أو غير ذات الصلة:
sd config set scan.exclude_paths '["/mnt/nfs", "/proc", "/sys", "/dev", "*.iso"]'- تعطيل فحص الأرشيفات إذا لم يكن مطلوباً:
sd config set scan.scan_archives false- تقليل عمق الأرشيف لتجنب الأرشيفات المتداخلة بعمق:
sd config set scan.max_archive_depth 1- استخدام العلم
--excludeللفحوصات لمرة واحدة:
sd scan /home --exclude "*.iso" --exclude "node_modules"- تمكين تسجيل debug للعثور على نقاط الاختناق:
sd --log-level debug scan /path/to/dir 2>&1 | grep -i "slow\|timeout\|skip"أخطاء أذونات fanotify
الأعراض: يفشل sd monitor --block بـ "Permission denied" أو "Operation not permitted".
الأسباب المحتملة:
- لا يعمل كجذر
- نواة لينكس لا تحتوي على
CONFIG_FANOTIFY_ACCESS_PERMISSIONSمُمكَّناً - AppArmor أو SELinux يحجبان وصول fanotify
الحلول:
- التشغيل كجذر:
sudo sd monitor /home /tmp --block- التحقق من إعداد النواة:
zgrep FANOTIFY /proc/config.gz
# يجب أن يُظهر: CONFIG_FANOTIFY=y وCONFIG_FANOTIFY_ACCESS_PERMISSIONS=y- استخدام وضع غير الحظر كبديل احتياطي (لا يزال يكتشف التهديدات، لكن لا يمنع الوصول إلى الملفات):
sd monitor /home /tmpWARNING
وضع الحظر متاح فقط على لينكس مع دعم fanotify. على macOS (FSEvents) وويندوز (ReadDirectoryChangesW)، تعمل المراقبة في الوقت الفعلي في وضع الكشف فقط.
- التحقق من SELinux/AppArmor:
# SELinux: التحقق من الرفضات
ausearch -m AVC -ts recent | grep prx-sd
# AppArmor: التحقق من الرفضات
dmesg | grep apparmor | grep prx-sdنتيجة إيجابية كاذبة (ملف شرعي مكتشف كتهديد)
الأعراض: ملف آمن معروف يُصنَّف كمشبوه أو ضار.
الحلول:
- التحقق مما شغَّل الكشف:
sd scan /path/to/file --jsonانظر إلى الحقلين detection_type وthreat_name:
HashMatch-- هاش الملف يتطابق مع هاش برامج ضارة معروفة (نتيجة إيجابية كاذبة نادرة)YaraRule-- قاعدة YARA تطابقت مع أنماط في الملفHeuristic-- سجَّل محرك الاكتشافي الملف فوق العتبة
- للنتائج الإيجابية الكاذبة الاكتشافية، ارفع العتبة:
# الافتراضي 60؛ ارفع إلى 70 لتقليل النتائج الإيجابية الكاذبة
sd config set scan.heuristic_threshold 70- استثناء الملف أو الدليل من الفحص:
sd config set scan.exclude_paths '["/path/to/safe-file", "/opt/known-good/"]'لنتائج YARA الإيجابية الكاذبة، يمكنك استثناء قواعد محددة بإزالتها أو التعليق عليها في دليل
~/.prx-sd/yara/.القائمة البيضاء عبر الهاش -- إضافة SHA-256 الملف إلى قائمة سماح محلية (ميزة مستقبلية). كحل بديل، استثنِ الملف بالمسار.
TIP
إذا كنت تعتقد أن اكتشافاً نتيجة إيجابية كاذبة حقيقية، يُرجى الإبلاغ عنها في github.com/openprx/prx-sd/issues مع هاش الملف (وليس الملف نفسه) واسم القاعدة.
تعذُّر بدء الـ Daemon
الأعراض: sd daemon يخرج فوراً، أو يُظهر sd status "stopped".
الأسباب المحتملة:
- نسخة أخرى قيد التشغيل بالفعل (ملف PID موجود)
- دليل البيانات غير قابل للوصول أو تالف
- قاعدة بيانات التوقيعات مفقودة
الحلول:
- التحقق من ملف PID القديم:
cat ~/.prx-sd/prx-sd.pid
# إذا كان PID المُدرَج لا يعمل، احذف الملف
rm ~/.prx-sd/prx-sd.pid- التحقق من حالة الـ daemon:
sd status- التشغيل في المقدمة مع تسجيل debug لرؤية أخطاء بدء التشغيل:
sd --log-level debug daemon /home /tmp- التأكد من وجود التوقيعات:
sd info
# إذا كان hash_count صفراً، شغِّل:
sd update- التحقق من أذونات الدليل:
ls -la ~/.prx-sd/
# يجب أن تكون جميع الدلائل مملوكة لمستخدمك وقابلة للكتابة- إعادة التهيئة إذا كان دليل البيانات تالفاً:
# نسخ احتياطي للبيانات الموجودة
mv ~/.prx-sd ~/.prx-sd.bak
# إعادة تشغيل أي أمر لتشغيل إعداد التشغيل الأول
sd info
# إعادة تنزيل التوقيعات
sd updateضبط مستوى السجل
المشكلة: تحتاج إلى مزيد من المعلومات التشخيصية لتصحيح مشكلة.
يدعم PRX-SD خمسة مستويات سجل، من الأكثر إلى الأقل تفصيلاً:
| المستوى | الوصف |
|---|---|
trace | كل شيء، بما فيه تفاصيل مطابقة YARA لكل ملف |
debug | عمليات المحرك التفصيلية وتحميل الإضافة وعمليات البحث عن الهاش |
info | تقدم الفحص وتحديثات التوقيعات وتسجيل الإضافة |
warn | التحذيرات والأخطاء غير الحرجة (الافتراضي) |
error | الأخطاء الحرجة فقط |
# أقصى تفصيل
sd --log-level trace scan /tmp
# مستوى debug لاستكشاف الأخطاء
sd --log-level debug monitor /home
# إعادة توجيه السجلات إلى ملف للتحليل
sd --log-level debug scan /home 2> /tmp/prx-sd-debug.logTIP
العلم --log-level عام ويجب أن يأتي قبل الأمر الفرعي:
# صحيح
sd --log-level debug scan /tmp
# خطأ (العلم بعد الأمر الفرعي)
sd scan /tmp --log-level debugارتفاع استخدام الذاكرة
الأعراض: تستهلك عملية sd ذاكرة أكثر مما هو متوقع، خاصةً أثناء فحوصات الدليل الكبيرة.
الأسباب المحتملة:
- فحص عدد كبير جداً من الملفات مع مسارات متعددة
- قواعد YARA مُجمَّعة في الذاكرة (أكثر من 38,800 قاعدة تستخدم ذاكرة كبيرة)
- فحص الأرشيفات يُضخِّم الملفات المضغوطة الكبيرة في الذاكرة
- إضافات WASM بحدود
max_memory_mbعالية
الحلول:
- تقليل عدد المسارات (كل مسار يُحمِّل سياق YARA الخاص به):
sd config set scan.threads 2- الحد من الحجم الأقصى للملف لتخطي الملفات الكبيرة جداً:
# الحد إلى 50 ميجابايت
sd config set scan.max_file_size 52428800- تعطيل فحص الأرشيفات للأنظمة المحدودة بالذاكرة:
sd config set scan.scan_archives false- تقليل عمق الأرشيف:
sd config set scan.max_archive_depth 1التحقق من حدود ذاكرة إضافات WASM -- راجع
~/.prx-sd/plugins/*/plugin.jsonبحثاً عن الإضافات ذات قيمmax_memory_mbالعالية وقلِّلها.مراقبة الذاكرة أثناء الفحوصات:
# في طرفية أخرى
watch -n 1 'ps aux | grep sd | grep -v grep'- بالنسبة للـ daemon، راقب الذاكرة مع مرور الوقت:
sd status
# يُظهر PID؛ استخدم top/htop لمشاهدة الذاكرةالمشكلات الشائعة الأخرى
تحذير "No YARA rules found"
دليل قواعد YARA فارغ. أعِد تشغيل الإعداد الأول أو نزِّل القواعد:
sd update
# أو شغِّل الإعداد يدوياً بإزالة دليل yara:
rm -rf ~/.prx-sd/yara
sd info # يُشغِّل إعداد التشغيل الأول مع القواعد المدمجةخطأ "Failed to open signature database"
قاعدة بيانات توقيعات LMDB قد تكون تالفة:
rm -rf ~/.prx-sd/signatures
sd updateAdblock: "insufficient privileges"
تُعدِّل أوامر تمكين/تعطيل adblock ملف hosts النظام وتتطلب الجذر:
sudo sd adblock enable
sudo sd adblock disableالفحص يتخطى الملفات بخطأ "timeout"
مهلة الملف الفردي تبلغ 30 ثانية افتراضياً. زِدها للملفات المعقدة:
sd config set scan.timeout_per_file_ms 60000الحصول على مساعدة
إذا لم يحل أيٌّ من الحلول أعلاه مشكلتك:
- تحقق من المشكلات الموجودة: github.com/openprx/prx-sd/issues
- قدِّم مشكلة جديدة مع:
- إصدار PRX-SD (
sd info) - نظام التشغيل وإصدار النواة
- مخرجات سجل debug (
sd --log-level debug ...) - خطوات إعادة الإنتاج
- إصدار PRX-SD (
الخطوات التالية
- راجع مرجع الإعدادات لضبط سلوك المحرك
- تعرف على محرك الكشف لفهم كيفية تحديد التهديدات
- أعدَّ التنبيهات للحصول على إشعارات استباقية بالمشكلات