कांटा बम को कैसे रोकें और पता लगाएं


14
#include <stdlib.h>
#include <unistd.h>

int main()
{
   while(1)
      fork();
}

यह एक कांटा बम के लिए कोड है।

हमारे कॉलेज में, हम टेलनेट यानी क्लाइंट सेवारत प्रोटोकॉल के माध्यम से जुड़ते हैं। कुछ 100 सिस्टम सर्वर से जुड़े हैं। अचानक हमने सर्वर को धीमा होता देखा, और कुछ समय बाद यह दुर्घटनाग्रस्त हो गया। मुझे पता चला कि किसी ने कांटा बम लागू किया है।

हम कैसे पता लगा सकते हैं कि किस सिस्टम पर फोर्क बम लागू किया गया है? और हम इसे कैसे रोक सकते हैं?

एक विधि अधिकतम प्रक्रियाओं को सीमित करने के लिए है जो एक एकल उपयोगकर्ता के पास हो सकती है। क्या इसे रोकने की कोई विधि है और यह जानने के लिए कि इसे किस प्रणाली से लागू किया गया है?


19
टेलनेट? गंभीरता से? आपको वास्तव में SSH का उपयोग करना चाहिए ...
ThiefMaster


यह भी देखें unix.stackexchange.com/q/64611/17609
moooeeeep

अच्छी तरह से यह एसओ के रूप में माइग्रेट किया गया था, लेकिन एक उत्तर कर्नेल स्तर पर हो सकता है। कुछ पैच अस्थायी रूप से किए गए हैं, लेकिन कोई भी स्वीकृति को पूरा नहीं करता है। मेरी बात यह है: यह कैसे पता लगाने के लिए: अच्छी तरह से किसी भी uer पता होगा कि यह अब प्रणाली का उपयोग नहीं कर सकते हैं, इसलिए पता लगाने के बिंदु शायद महत्वपूर्ण बिंदु नहीं है। कैसे उबरें? वर्तमान उत्तर रिबूट है, मैं बताऊंगा: कर्नेल को केवल एक प्रक्रिया (आप जिस गंदगी को साफ करना चाहते हैं) को चलाने के लिए और अन्य सभी को रोकने के लिए एक तरीका। यह केवल सिस्टम कंसोल में उपलब्ध एक सुविधा हो सकती है।
दलीप लार्डी

जवाबों:


16

एक तरीका प्रक्रियाओं की संख्या को सीमित करना है, एक उपयोगकर्ता चला सकता है।

बस रूट के रूप में लॉगिन करें, और उपयोगकर्ताओं को जोड़ने और उनकी सीमा को कॉन्फ़िगर करने के लिए, इस फ़ाइल को संपादित करें।

# vi /etc/security/limits.conf

इस लाइन को फाइल में जोड़ें

john hard nproc 10

अब उपयोगकर्ता जॉन केवल 10 प्रक्रियाएं बना सकते हैं।


मुझे लगता है कि आपको नई सेटिंग्स को /etc/security/limits.confप्रभावी होने के लिए रिबूट करना होगा ।
डैन डी।

2
नहीं, लेकिन वे PAM द्वारा लागू किए जाते हैं इसलिए वे केवल नए लॉगिन पर लागू होते हैं।
ThiefMaster

14

एक रनिंग फोर्क बम को रोकने के लिए आप बम की killall <name>सभी प्रक्रियाओं को मारने के लिए उपयोग करने में सक्षम हो सकते हैं । हालांकि, एक कांटा बम के परिणामस्वरूप आमतौर पर सिस्टम पर एक अविश्वसनीय रूप से उच्च भार होता है, आप इसे एसएसएच में सक्षम नहीं कर सकते हैं या उस पर अमल नहीं कर सकते हैं। तो एक रिबूट आवश्यक हो सकता है या कम से कम बहुत तेज हो सकता है।

यदि प्रत्येक उपयोगकर्ता के पास सिस्टम पर अपना खाता है, तो आप बस सभी के होम डायरेक्टरी की जांच कर सकते हैं और निष्पादन योग्य के लिए खोज कर सकते हैं। संभावना अच्छी है कि उसने स्रोत कोड भी अपलोड किया है ताकि यह पता चले कि यह बहुत कठिन नहीं होना चाहिए। यदि यह उन सभी छात्रों के लिए एक साझा खाता था जो आप भाग्य से बाहर हैं। विशेष रूप से उपयोगकर्ता के टेलनेट या ssh सत्र समाप्त होने के बाद आपको यह पता लगाने का कोई मौका नहीं है कि इसे किसने शुरू किया।

हालांकि, उस उपयोगकर्ता को दंडित करने के बजाय जिसने उस फोर्क बम को विस्फोट किया था, बल्कि आपको फोर्क बम को निष्क्रिय करने के लिए सिस्टम के कॉन्फ़िगरेशन को ठीक करना चाहिए। आप प्रति-उपयोगकर्ता प्रक्रिया सीमा का उपयोग कर सेट कर सकते हैं /etc/security/limits.confऔर इस प्रकार एक फोर्क बम को नियंत्रण से बाहर होने से रोक सकते हैं - जैसे कि सिर्फ 50 प्रक्रियाओं के साथ कांटा बम ज्यादा नुकसान नहीं करेगा।


यह असंभव है कि किस सिस्टम से इसका आना संभव है?
राजेश एम।

@ user1670364: यह स्पष्ट नहीं है कि आप क्या पूछ रहे हैं। "इसके आने" से आपका क्या मतलब है? आप बता सकते हैं कि उपयोगकर्ता किस प्रक्रिया का मालिक है, आप और क्या जानना चाहते हैं?
डेविड श्वार्ट्ज

@DavidSchwartz का मतलब है कि फोर्क बम का पता लगाना संभव है कि इसे किस सिस्टम पर लागू किया जा रहा है?
राजेश एम।

@ user1670364: यदि आपका मतलब है कि सिस्टम वास्तव में कांटा बम चला रहा है, तो यह धीमा है। यदि आप उपयोगकर्ता को जिम्मेदार मानते हैं, तो यह उपयोगकर्ता है जो उन प्रक्रियाओं का मालिक है जो फोर्किंग कर रहे हैं।
डेविड श्वार्ट्ज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.