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

الاختبار – خدمات systemd وإدارة العمليات في Ubuntu 24.04

  • اسم الطالب : _____________________________________
  • المجموعة : ____________

الجزء 1 – التحقيق في خدمة systemd نشطة بالفعل (المنفذ 3000)​

1. المتطلبات المسبقة​

قبل البدء في هذا القسم، تأكد من استيفاء الشروط التالية:

  • خادم Wiki.js مُعد للتشغيل على المنفذ 3000.
  • خادم NGINX نشط.

أوامر التحضير :

sudo apt update
sudo apt install nginx
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx

2. سياق السيناريو​

السيد إريك، مسؤول النظام، يحاول نشر تطبيق Wiki.js. يبدو أن التثبيت صحيح، لكن التطبيق لا يستجيب كما هو متوقع على المنفذ 3000. يجب عليك إجراء تحقيق مفصل لتحديد المشكلة وحلها بشكل نهائي.


3. خطوات التحقيق​

الخطوة 1 – التحقق من المنفذ المستخدم​

التحقق الأولي من المنفذ 3000:

lsof -i :3000

النتيجة :

COMMAND   PID   USER     FD   TYPE DEVICE SIZE/OFF NODE NAME
node 9744 wikijs 22u IPv4 59242 0t0 TCP *:3000 (LISTEN)

السؤال 1 :

ما هو الغرض من الأمر lsof؟ قارنها بالأمر fuser: هل لهما نفس الاستخدامات؟ كيف يختلفان في إدارة الملفات أو المنافذ المفتوحة في Linux؟

الإجابة 1 :

...............................................................................................................................


الخطوة 2 – محاولة الإيقاف اليدوي​

محاولة إيقاف العملية:

kill -15 9744
kill -9 9744

السؤال 2 :

هل تعيد العملية التشغيل تلقائيًا بعد إيقافها يدويًا؟ اشرح لماذا، بالاعتماد على آليات systemd:

الإجابة 2 :

............................................................................................................................... ............................................................................................................................... ...............................................................................................................................

السؤال 3 :

ما الفرق بين daemon (أو عملية في الخلفية) التقليدية و خدمة systemd؟ قدم مثالًا ملموسًا لتوضيح كل حالة.

الإجابة 3 :

............................................................................................................................... ............................................................................................................................... ...............................................................................................................................


الخطوة 3 – تحديد الخدمة المسؤولة​

تحديد خدمة systemd:

systemctl list-units --type=service --state=running | grep -i wiki
ps aux | grep node
ls -l /etc/systemd/system/ | grep wiki

الخدمة المحددة :

wikijs.service

السؤال 4 :

لقد حددت الخدمة wikijs.service باستخدام الأوامر التالية:

systemctl list-units --type=service --state=running | grep -i wiki
ps aux | grep node
ls -l /etc/systemd/system/ | grep wiki

اشرح كيف تسمح هذه الأوامر بتأكيد وجود خدمة systemd نشطة. برر لماذا هذه الأساليب الثلاثة مكملة لبعضها البعض.

الإجابة 4 :

............................................................................................................................... ............................................................................................................................... ...............................................................................................................................


الخطوة 4 – التحقق من الرابط بين الخدمة والمنفذ​

التأكيد النهائي للرابط:

sudo lsof -i -P -n | grep 3000
ps -p <PID> -o pid,cmd

السؤال 5 :

اشرح كيف تسمح الأوامر أعلاه بإنشاء رابط مباشر بين PID معين، المنفذ 3000 و خدمة systemd المحددة سابقًا. لماذا تعتبر هذه خطوة ضرورية قبل إيقاف أو تعطيل خدمة؟

الإجابة 5 :

............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ...............................................................................................................................


الخطوة 5 – التعطيل النهائي للخدمة​

الأوامر النهائية :

sudo systemctl stop wikijs.service
sudo systemctl disable wikijs.service

التحقق من تحرير المنفذ :

lsof -i :3000

السؤال 6 :

اشرح الفرق بين الأوامر systemctl stop و systemctl disable. لماذا من الضروري تنفيذ كلاهما لضمان عدم إعادة تشغيل الخدمة، حتى بعد إعادة تشغيل الجهاز؟ لماذا الأمر kill -9 غير كافٍ في هذه الحالة؟

الإجابة 6 :

............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ...............................................................................................................................


السؤال 7 :

7.1. لماذا كانت العملية المرتبطة بالمنفذ 3000 تعيد التشغيل تلقائيًا بعد kill -9؟

الإجابة : ...............................................................................................................................

7.2. ما الأمر الذي يسمح بتحديد الخدمات systemd النشطة بسرعة والتي تحتوي على كلمة مفتاحية؟

الإجابة : ...............................................................................................................................

7.3. ما الطريقة التي سمحت لك بتأكيد الرابط بين المنفذ وملف wikijs.service؟

الإجابة : ...............................................................................................................................

7.4. اشرح لماذا يوصى باستخدام systemctl stop و disable بدلاً من kill -9.

الإجابة : ............................................................................................................................... ...............................................................................................................................

7.5. اقترح برنامجًا نصيًا بسيطًا لأتمتة هذا البحث :

# البرنامج النصي :
...............................................................................................................................
...............................................................................................................................

السؤال 8 (إضافي) :

لاستكشاف المزيد، اختبر وشرح هذه الأدوات:

  • systemd-cgls
  • ss -lptn
  • fuser -k 3000/tcp
  • journalctl -u wikijs.service

الجزء 2 – الكشف عن خدمة ضارة (systemd) وتحيدها​

1. تعليمات عامة مهمة​

  • التنفيذ على Ubuntu 24.04.
  • الخدمة الضارة logservice.service نشطة منذ بدء التشغيل.
  • تقديم تقرير نهائي دقيق.
  • لا يُسمح بإعادة التشغيل أو الإيقاف الكامل للنظام.

2. السياق التقني​

تقوم خدمة ضارة بإنشاء ملفات سجلات باستمرار في /var/log/malicious، مما قد يؤدي إلى تشبع النظام. تعيد هذه الخدمة التشغيل تلقائيًا في حالة التوقف (Restart=always).

الملف المشبوه :

/etc/systemd/system/logservice.service

3. الهدف​

  • تحديد خدمة غير طبيعية.
  • إيقاف وتعطيل خدمة systemd بشكل نهائي.
  • تنظيف الملفات التي تم إنشاؤها.
  • تقديم تقرير تقني دقيق.

3.1. إنشاء البرنامج النصي الضار​

sudo mkdir -p /opt/malicious
sudo nano /opt/malicious/logwriter.sh

محتوى البرنامج النصي :

#!/bin/bash

mkdir -p /var/log/malicious

while true; do
echo "$(date) - LOG ENTRY" >> /var/log/malicious/attack.log
sleep 0.1
done

3.2. جعل البرنامج النصي قابلاً للتنفيذ​

sudo chmod +x /opt/malicious/logwriter.sh

3.3. إنشاء خدمة systemd الضارة​

sudo nano /etc/systemd/system/logservice.service

محتوى ملف logservice.service :

[Unit]
Description=خدمة ضارة – مولد سجلات
After=network.target

[Service]
ExecStart=/opt/malicious/logwriter.sh
Restart=always
RestartSec=1

[Install]
WantedBy=multi-user.target

3.4. تفعيل وبدء الخدمة​

sudo systemctl daemon-reload
sudo systemctl enable logservice
sudo systemctl start logservice

3.5. التحقق من السلوك​

sudo systemctl status logservice
ls -lh /var/log/malicious/
  • سترى الملف ينمو بسرعة كبيرة.

  • تحاكي هذه الخدمة سلوكًا ضارًا من نوع "log flooding"، وهو نموذجي لبرنامج ثنائي مثبت بشكل غير ملحوظ ومستمر عند بدء التشغيل. يدفعك إلى:

    • تحديد ملف يتضخم بشكل خطير (du, lsof, إلخ)

    • ربط PID ↔ خدمة systemd

    • محاولة الإيقاف باستخدام kill -9 (فشل)

    • فهم Restart=always

    • تطبيق التسلسل الصحيح:

      • systemctl stop
      • systemctl disable
      • rm
      • daemon-reload
      • التنظيف

4. الخطوات الواجب تنفيذها​

الخطوة 1 – تحديد المشكلة​

الأوامر المستخدمة :

du -sh /var/log/*
ps aux | grep logservice
lsof | grep malicious
systemctl status logservice

السؤال 9 :

اشرح ما تفعله كل من هذه الأوامر وكيف تسمح بتحديد سلوك غير طبيعي مرتبط بالخدمة logservice. يجب أن تذكر إجابتك العناصر التقنية القابلة للملاحظة (الحجم، العمليات، الملفات المفتوحة، الحالة، إلخ).

الإجابة :

............................................................................................................................... ...............................................................................................................................


الخطوة 2 – محاولات الإيقاف​

الأمر 1 (إيقاف العملية بشكل قاسي):

sudo kill -9 <PID>

الأمر 2 (الإيقاف عبر systemd):

sudo systemctl stop logservice

السؤال 10 :

تهدف الأوامر أعلاه إلى إيقاف تشغيل الخدمة الضارة.

  • أيهما فعال حقًا لإيقاف الخدمة بشكل دائم؟
  • لماذا يكون الأمر kill -9 غير كافٍ في كثير من الأحيان في حالة خدمة تُدار بواسطة systemd؟
  • برر إجابتك فيما يتعلق بمعلمات ملف .service.

الإجابة المتوقعة :

............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ...............................................................................................................................


الخطوة 3 – التعطيل الكامل للخدمة​

تعطيل الخدمة عند بدء التشغيل :

sudo systemctl disable logservice

حذف ملف التعريف :

sudo rm /etc/systemd/system/logservice.service

إعادة تحميل تكوين systemd :

sudo systemctl daemon-reload

حذف الملفات التي تم إنشاؤها :

sudo rm -rf /var/log/malicious

السؤال 11 :

اشرح بدقة دور كل من الأوامر أعلاه.

لماذا يجب تنفيذ الأوامر الثلاثة الأولى بهذا الترتيب لتعطيل خدمة systemd بالكامل؟

لماذا يعتبر الأمر daemon-reload ضروريًا في هذه العملية؟

وأخيرًا، ما هو الخطر إذا تم نسيان حذف المجلد /var/log/malicious؟

الإجابة :

............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ...............................................................................................................................


الخطوة 4 – التحقق النهائي​

التحقق من إيقاف الخدمة :

sudo systemctl status logservice

التحقق من حذف الدليل :

ls -la /var/log/malicious

السؤال 12 :

اشرح ما تسمح هذه الأوامر بالتحقق منه.

ماذا يجب أن تلاحظ في مخرجاتها إذا تم تحييد الخدمة بشكل صحيح وإذا تم حذف الملفات الضارة بشكل صحيح؟

الإجابة المتوقعة :

............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ...............................................................................................................................


السؤال 13 :

13.1. التعرف​

  1. ما الأمر الذي اكتشف الدليل المشكل؟

الإجابة : ...............................................................................................................................

  1. ما هو الاسم الدقيق للعملية الضارة؟

الإجابة : ...............................................................................................................................

  1. ما الأمر الذي سمح بالحصول على PID الخاص بها؟

الإجابة : ...............................................................................................................................

13.2. إيقاف العملية​

  1. الأمر المستخدم للإيقاف القاسي؟

الإجابة : ...............................................................................................................................

  1. هل عادت العملية تلقائيًا؟

الإجابة : ...............................................................................................................................

  1. الأمر الفعال لإيقاف الخدمة بشكل دائم؟

الإجابة : ...............................................................................................................................

13.3. التعطيل والتنظيف​

  1. الأمر المستخدم لحذف الخدمة بشكل دائم؟

الإجابة : ...............................................................................................................................

  1. الأمر المستخدم لحذف الملفات التي تم إنشاؤها؟

الإجابة : ...............................................................................................................................

13.4. أسئلة الفهم​

  1. لماذا يكون kill -9 غير كافٍ ضد بعض الخدمات؟

الإجابة : ...............................................................................................................................

  1. ماذا يعني Restart=always في ملف .service؟

الإجابة : ...............................................................................................................................

  1. الأمر لإعادة تحميل تكوين خدمات systemd؟

الإجابة : ...............................................................................................................................


إضافي (اختياري)​

إنشاء خدمة hello.service تكتب التاريخ الحالي كل 5 ثوانٍ في /tmp/bonjour.log:

  • البرنامج النصي: /opt/bonjour.sh
  • الخدمة: /etc/systemd/system/hello.service

أدرج حلك في التقرير النهائي إذا تم الانتهاء منه.


التسليم النهائي المتوقع​

المحتوى المطلوب :

  • جميع الأوامر المستخدمة في الملحق
  • ملاحظات مفصلة
  • إجابات كاملة على الأسئلة
  • الحل الإضافي إذا تم تنفيذه

تم إنشاء الاختبار في: ديسمبر 2024