Halloween على Linux: كيف تقتل عمليات الزومبي

ختم هالوين

سيأتي يوم الموتى ولهذا السبب نريد إجراء هذا البرنامج التعليمي الصغير من LxA للتحدث عن عمليات الزومبي وكيف يمكننا قتلهم. أول شيء يجب قوله هو ما هي عملية الزومبي ، وهذا هو أنه كما تعلم ، فإن Linux kernel لديه نظام فرعي لإدارة العمليات ويعمل مع المجدول لإنشاء ، وتغيير الأولوية ، وإرسال أو إزالة تدفق معالجة وحدة المعالجة المركزية و قتل العمليات. حسنًا ، هذا الجزء من النواة ، مثل باقي الأنظمة الشبيهة بيونكس ، يميز بين حالات العمليات المختلفة ...

حتى نتمكن من إيجاد ذلك عملية يمكن أن يكون في حالة النوم (S) ، أي النوم. أيضًا العمليات في حالة التشغيل (R) وهي تلك التي يتم تشغيلها أو تشغيلها حاليًا ، والعمليات المنتظرة (D) التي تم إيقافها في انتظار الحضور ، والإيماءة (T) أو التعليق ، وكذلك الزومبي (Z) أو المتوفى. عملية الزومبي أو الميتة هي عملية تم إنهاؤها بالفعل بنجاح ، ولكن تم اختطاف بعض موارد النظام نظرًا لأن Linux لا يزال يحفظها في جدول العملية. أنت تعلم بالفعل أنه عندما تنتهي العملية ، يجب ألا تبقى في هذه الحالة ، ولكنها تكتمل وتحرر النواة الموارد حتى تتمكن العمليات الأخرى من استخدامها ، فهي تحرر ذاكرة الوصول العشوائي المشغولة ...

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

ps -el | grep 'Z'

ps aux | grep defunct

وبمجرد اكتشافها ، يمكننا ذلك اقتله مباشرة مع:

kill -HUP `ps -A -ostat,ppid,pid,cmd | grep -e ‘^[Zz]’ | awk ‘{print $2}’`

على الرغم من أن البديل الآخر هو العثور على العمليات الأم ، منذ ذلك الحين قتل عملية الزومبي عليك أن تقتل عمليات الوالدين التي تحافظ عليها ، كما قد تستنتج:

ps -eo pid,ppid | grep <PID>

kill -9 <PPID>

سوف تضطر إلى استبدال من خلال معرف عملية الزومبي التي وجدتها ولقتلها بالقتل ، استخدم معرف العملية الأبوية لتحل محل في المثال ، من الواضح.


اترك تعليقك

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها ب *

*

*

  1. المسؤول عن البيانات: AB Internet Networks 2008 SL
  2. الغرض من البيانات: التحكم في الرسائل الاقتحامية ، وإدارة التعليقات.
  3. الشرعية: موافقتك
  4. توصيل البيانات: لن يتم إرسال البيانات إلى أطراف ثالثة إلا بموجب التزام قانوني.
  5. تخزين البيانات: قاعدة البيانات التي تستضيفها شركة Occentus Networks (الاتحاد الأوروبي)
  6. الحقوق: يمكنك في أي وقت تقييد معلوماتك واستعادتها وحذفها.

  1.   صنع الكرات قال

    موقع جيد!
    هم دائما يخرجوننا من المشاكل.

    حيث يقول:
    على الرغم من أن هناك بديلًا آخر وهو العثور على العمليات الأبوية ، نظرًا لأنه لقتل عملية الزومبي ، يجب عليك قتل العمليات الأبوية التي تدعمها ، كما قد تستنتج:

    1 | ps -eo pid، ppid | grep
    2|
    3 | قتل -9

    سيكون عليك استبدال معرف عملية الزومبي التي وجدتها وقتلها ، استخدم معرّف العملية الأبوية التي ستحل محل المثال ، من الواضح.

    يمكنك إضافة البرنامج النصي:

    القط killppid.sh
    #! / بن / باش
    kill -9 $ (ps -eo pid، ppid | awk '$ 1 ==' $ {1} '{print $ 2}')

    بالطبع ، إنها ليست مهمة يقوم بها المستخدم العادي طوال الوقت.
    سيكون مفيدًا فقط للمسؤول ، ولكن من الخطر تشغيله كجذر ، لأنه يمكن أن يقتل أي عملية على النظام.

    في قتل الرجل لديه هذه الملاحظة:

    ملاحظات قد تحتوي قوقعتك (مترجم سطر الأوامر) على أمر قتل مدمج. يمكنك
    تحتاج إلى تشغيل الأمر الموصوف هنا كـ / bin / kill لحل النزاع.

    باش لديه هذا الأمر ، هذا جزء من الرجل باش حوله:

    قتل [-s sigspec | -n إشارة | -sigspec] [pid | jobspec] ...
    قتل -l | -L [sigspec | حالة_الخرج]
    أرسل الإشارة المسماة بواسطة sigspec أو Signum إلى العمليات المسماة بواسطة pid أو الوظيفة
    المواصفات. sigspec هو إما اسم إشارة غير حساس لحالة الأحرف مثل SIGKILL (مع أو
    بدون بادئة SIG) أو رقم إشارة ؛ إشارة هو رقم إشارة. لو
    sigspec غير موجود ، ثم يفترض SIGTERM. حجة -l يسرد
    أسماء الإشارات. إذا تم توفير أي وسيطات عند إعطاء -l ، فإن أسماء
    يتم سرد الإشارات المقابلة للوسيطات ، وحالة الإرجاع هي 0.
    إن الوسيطة exit_status إلى -l هي رقم يحدد إما رقم إشارة أو
    حالة الخروج من عملية تم إنهاؤها بواسطة إشارة. الخيار -L مكافئ
    أقرضت إلى -l. القتل يعود صحيحًا إذا تم إرسال إشارة واحدة على الأقل بنجاح ، أو
    خطأ إذا حدث خطأ أو تم العثور على خيار غير صالح.

    في البداية يشرحون كيف تحمي bash العمليات ، لتجنب بعض المشاكل ، لكن ليس من الواضح بالنسبة لي كيف يمكنني إنشاء نص برمجي آمن ليعمل كجذر.
    الشيء الوحيد الذي يمكنني التفكير فيه هو حمايته على النحو التالي:

    القط killppid.sh
    #! / بن / باش
    إذا كان [$ USER == "root"]
    ثم صدى لا تقم بتشغيل $ 0 كجذر !!! أنه أمر خطير!
    خروج
    fi

    kill -9 $ (ps -eo pid، ppid | awk '$ 1 ==' $ {1} '{print $ 2}')

    $

    استخدم قتل باش ، وليس / بن / اقتل

    كيف ترى أنني لست على دراية جيدة بالباش.
    هل تعرف كيف تكتب نصًا آمنًا يعمل كمستخدم للعملية الفرعية ، حتى لو كان يعمل كجذر؟
    شيء مكافئ لما يمكن القيام به يدويًا مثل هذا:

    $ سو ؛
    $ kill -9 $ (ps -eo pid، ppid | awk '$ 1 ==' $ {1} '{print $ 2}')