Skip to content
تم إنشاء هذه الصفحة وترجمتها بمساعدة الذكاء الاصطناعي. إذا لاحظت أي أخطاء، لا تتردد في المساهمة في تحسينها. تعديل على GitHub

استكشاف الأخطاء وإصلاحها

تغطي هذه الصفحة أكثر المشكلات شيوعاً عند تشغيل PRX-SD، إلى جانب أسبابها وحلولها.

فشل تحديث قاعدة بيانات التوقيعات

الأعراض: يفشل sd update بخطأ شبكة أو انتهاء مهلة أو عدم تطابق SHA-256.

الأسباب المحتملة:

  • لا يوجد اتصال بالإنترنت أو جدار الحماية يحجب HTTPS الصادر
  • خادم التحديث غير متاح مؤقتاً
  • وكيل أو جدار حماية مؤسسي يُعدِّل الاستجابة

الحلول:

  1. التحقق من الاتصال بخادم التحديث:
bash
curl -fsSL https://api.github.com/repos/openprx/prx-sd-signatures/commits?per_page=1
  1. استخدام سكريبت التحديث غير المتصل إذا كانت لديك قيود على الشبكة:
bash
# على جهاز متصل بالإنترنت
./tools/update-signatures.sh

# نسخ دليل التوقيعات إلى الجهاز المستهدف
scp -r ~/.prx-sd/signatures user@target:~/.prx-sd/
  1. إجبار إعادة التنزيل لمسح أي ذاكرة مؤقتة تالفة:
bash
sd update --force
  1. استخدام خادم تحديث مخصص إذا كنت تستضيف مرآة خاصة:
bash
sd config set update_server_url "https://internal-mirror.example.com/prx-sd/v1"
sd update
  1. التحقق من عدم تطابق SHA-256 -- هذا يعني عادةً أن التنزيل كان تالفاً أثناء النقل. حاول مرة أخرى، أو نزِّل يدوياً:
bash
sd update --force

TIP

شغِّل sd update --check-only للتحقق من توفر تحديث دون تنزيله.

بطء الفحص

الأعراض: يستغرق فحص دليل وقتاً أطول بكثير مما هو متوقع.

الأسباب المحتملة:

  • فحص أنظمة ملفات مثبتة عبر الشبكة (NFS، CIFS، SSHFS)
  • يُجمَّع قواعد YARA عند كل فحص (لا توجد ذاكرة مؤقتة للتجميع)
  • الكثير من المسارات المتنافسة على I/O على الأقراص الدوارة
  • التكرار في الأرشيفات على الأرشيفات المتداخلة الكبيرة

الحلول:

  1. زيادة عدد المسارات لتخزين SSD:
bash
sd config set scan.threads 16
  1. تقليل عدد المسارات للأقراص الدوارة (محدودة بـ I/O):
bash
sd config set scan.threads 2
  1. استثناء المسارات البطيئة أو غير ذات الصلة:
bash
sd config set scan.exclude_paths '["/mnt/nfs", "/proc", "/sys", "/dev", "*.iso"]'
  1. تعطيل فحص الأرشيفات إذا لم يكن مطلوباً:
bash
sd config set scan.scan_archives false
  1. تقليل عمق الأرشيف لتجنب الأرشيفات المتداخلة بعمق:
bash
sd config set scan.max_archive_depth 1
  1. استخدام العلم --exclude للفحوصات لمرة واحدة:
bash
sd scan /home --exclude "*.iso" --exclude "node_modules"
  1. تمكين تسجيل debug للعثور على نقاط الاختناق:
bash
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

الحلول:

  1. التشغيل كجذر:
bash
sudo sd monitor /home /tmp --block
  1. التحقق من إعداد النواة:
bash
zgrep FANOTIFY /proc/config.gz
# يجب أن يُظهر: CONFIG_FANOTIFY=y وCONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
  1. استخدام وضع غير الحظر كبديل احتياطي (لا يزال يكتشف التهديدات، لكن لا يمنع الوصول إلى الملفات):
bash
sd monitor /home /tmp

WARNING

وضع الحظر متاح فقط على لينكس مع دعم fanotify. على macOS (FSEvents) وويندوز (ReadDirectoryChangesW)، تعمل المراقبة في الوقت الفعلي في وضع الكشف فقط.

  1. التحقق من SELinux/AppArmor:
bash
# SELinux: التحقق من الرفضات
ausearch -m AVC -ts recent | grep prx-sd

# AppArmor: التحقق من الرفضات
dmesg | grep apparmor | grep prx-sd

نتيجة إيجابية كاذبة (ملف شرعي مكتشف كتهديد)

الأعراض: ملف آمن معروف يُصنَّف كمشبوه أو ضار.

الحلول:

  1. التحقق مما شغَّل الكشف:
bash
sd scan /path/to/file --json

انظر إلى الحقلين detection_type وthreat_name:

  • HashMatch -- هاش الملف يتطابق مع هاش برامج ضارة معروفة (نتيجة إيجابية كاذبة نادرة)
  • YaraRule -- قاعدة YARA تطابقت مع أنماط في الملف
  • Heuristic -- سجَّل محرك الاكتشافي الملف فوق العتبة
  1. للنتائج الإيجابية الكاذبة الاكتشافية، ارفع العتبة:
bash
# الافتراضي 60؛ ارفع إلى 70 لتقليل النتائج الإيجابية الكاذبة
sd config set scan.heuristic_threshold 70
  1. استثناء الملف أو الدليل من الفحص:
bash
sd config set scan.exclude_paths '["/path/to/safe-file", "/opt/known-good/"]'
  1. لنتائج YARA الإيجابية الكاذبة، يمكنك استثناء قواعد محددة بإزالتها أو التعليق عليها في دليل ~/.prx-sd/yara/.

  2. القائمة البيضاء عبر الهاش -- إضافة SHA-256 الملف إلى قائمة سماح محلية (ميزة مستقبلية). كحل بديل، استثنِ الملف بالمسار.

TIP

إذا كنت تعتقد أن اكتشافاً نتيجة إيجابية كاذبة حقيقية، يُرجى الإبلاغ عنها في github.com/openprx/prx-sd/issues مع هاش الملف (وليس الملف نفسه) واسم القاعدة.

تعذُّر بدء الـ Daemon

الأعراض: sd daemon يخرج فوراً، أو يُظهر sd status "stopped".

الأسباب المحتملة:

  • نسخة أخرى قيد التشغيل بالفعل (ملف PID موجود)
  • دليل البيانات غير قابل للوصول أو تالف
  • قاعدة بيانات التوقيعات مفقودة

الحلول:

  1. التحقق من ملف PID القديم:
bash
cat ~/.prx-sd/prx-sd.pid
# إذا كان PID المُدرَج لا يعمل، احذف الملف
rm ~/.prx-sd/prx-sd.pid
  1. التحقق من حالة الـ daemon:
bash
sd status
  1. التشغيل في المقدمة مع تسجيل debug لرؤية أخطاء بدء التشغيل:
bash
sd --log-level debug daemon /home /tmp
  1. التأكد من وجود التوقيعات:
bash
sd info
# إذا كان hash_count صفراً، شغِّل:
sd update
  1. التحقق من أذونات الدليل:
bash
ls -la ~/.prx-sd/
# يجب أن تكون جميع الدلائل مملوكة لمستخدمك وقابلة للكتابة
  1. إعادة التهيئة إذا كان دليل البيانات تالفاً:
bash
# نسخ احتياطي للبيانات الموجودة
mv ~/.prx-sd ~/.prx-sd.bak

# إعادة تشغيل أي أمر لتشغيل إعداد التشغيل الأول
sd info

# إعادة تنزيل التوقيعات
sd update

ضبط مستوى السجل

المشكلة: تحتاج إلى مزيد من المعلومات التشخيصية لتصحيح مشكلة.

يدعم PRX-SD خمسة مستويات سجل، من الأكثر إلى الأقل تفصيلاً:

المستوىالوصف
traceكل شيء، بما فيه تفاصيل مطابقة YARA لكل ملف
debugعمليات المحرك التفصيلية وتحميل الإضافة وعمليات البحث عن الهاش
infoتقدم الفحص وتحديثات التوقيعات وتسجيل الإضافة
warnالتحذيرات والأخطاء غير الحرجة (الافتراضي)
errorالأخطاء الحرجة فقط
bash
# أقصى تفصيل
sd --log-level trace scan /tmp

# مستوى debug لاستكشاف الأخطاء
sd --log-level debug monitor /home

# إعادة توجيه السجلات إلى ملف للتحليل
sd --log-level debug scan /home 2> /tmp/prx-sd-debug.log

TIP

العلم --log-level عام ويجب أن يأتي قبل الأمر الفرعي:

bash
# صحيح
sd --log-level debug scan /tmp

# خطأ (العلم بعد الأمر الفرعي)
sd scan /tmp --log-level debug

ارتفاع استخدام الذاكرة

الأعراض: تستهلك عملية sd ذاكرة أكثر مما هو متوقع، خاصةً أثناء فحوصات الدليل الكبيرة.

الأسباب المحتملة:

  • فحص عدد كبير جداً من الملفات مع مسارات متعددة
  • قواعد YARA مُجمَّعة في الذاكرة (أكثر من 38,800 قاعدة تستخدم ذاكرة كبيرة)
  • فحص الأرشيفات يُضخِّم الملفات المضغوطة الكبيرة في الذاكرة
  • إضافات WASM بحدود max_memory_mb عالية

الحلول:

  1. تقليل عدد المسارات (كل مسار يُحمِّل سياق YARA الخاص به):
bash
sd config set scan.threads 2
  1. الحد من الحجم الأقصى للملف لتخطي الملفات الكبيرة جداً:
bash
# الحد إلى 50 ميجابايت
sd config set scan.max_file_size 52428800
  1. تعطيل فحص الأرشيفات للأنظمة المحدودة بالذاكرة:
bash
sd config set scan.scan_archives false
  1. تقليل عمق الأرشيف:
bash
sd config set scan.max_archive_depth 1
  1. التحقق من حدود ذاكرة إضافات WASM -- راجع ~/.prx-sd/plugins/*/plugin.json بحثاً عن الإضافات ذات قيم max_memory_mb العالية وقلِّلها.

  2. مراقبة الذاكرة أثناء الفحوصات:

bash
# في طرفية أخرى
watch -n 1 'ps aux | grep sd | grep -v grep'
  1. بالنسبة للـ daemon، راقب الذاكرة مع مرور الوقت:
bash
sd status
# يُظهر PID؛ استخدم top/htop لمشاهدة الذاكرة

المشكلات الشائعة الأخرى

تحذير "No YARA rules found"

دليل قواعد YARA فارغ. أعِد تشغيل الإعداد الأول أو نزِّل القواعد:

bash
sd update
# أو شغِّل الإعداد يدوياً بإزالة دليل yara:
rm -rf ~/.prx-sd/yara
sd info  # يُشغِّل إعداد التشغيل الأول مع القواعد المدمجة

خطأ "Failed to open signature database"

قاعدة بيانات توقيعات LMDB قد تكون تالفة:

bash
rm -rf ~/.prx-sd/signatures
sd update

Adblock: "insufficient privileges"

تُعدِّل أوامر تمكين/تعطيل adblock ملف hosts النظام وتتطلب الجذر:

bash
sudo sd adblock enable
sudo sd adblock disable

الفحص يتخطى الملفات بخطأ "timeout"

مهلة الملف الفردي تبلغ 30 ثانية افتراضياً. زِدها للملفات المعقدة:

bash
sd config set scan.timeout_per_file_ms 60000

الحصول على مساعدة

إذا لم يحل أيٌّ من الحلول أعلاه مشكلتك:

  1. تحقق من المشكلات الموجودة: github.com/openprx/prx-sd/issues
  2. قدِّم مشكلة جديدة مع:
    • إصدار PRX-SD (sd info)
    • نظام التشغيل وإصدار النواة
    • مخرجات سجل debug (sd --log-level debug ...)
    • خطوات إعادة الإنتاج

الخطوات التالية

Released under the Apache-2.0 License.