एकल आदेश के साथ कर्नेल आतंक का कारण कैसे बनें?


61

क्या एकल कमांड लाइन के साथ कर्नेल पैनिक का कारण संभव है?

एक sudoing उपयोगकर्ता के लिए इस तरह के सबसे सीधे आदेश क्या होंगे और एक नियमित उपयोगकर्ता के लिए क्या होगा, यदि कोई हो?

परिदृश्य जो कमांड के एक भाग के रूप में कुछ डाउनलोड करने का सुझाव देते हैं, उनकी गिनती नहीं है।


11
:(){ :|:& };:शायद?
कार्ल

@carleeto ठीक है, क्या आप समझा सकते हैं कि हमें आराम करने के लिए एक?
चाड हैरिसन

14
@ हाइपरोपराडाइस इसे "फॉरबॉम्ब" कहा जाता है। :()एक समारोह में कहा जाता को परिभाषित करता है :के शरीर के साथ :|:&, जिसका अर्थ है 'चलाएँ: और भी चलाएँ: पृष्ठभूमि में "। ;फ़ंक्शन की परिभाषा को समाप्त करता है, और :आपके नए फ़ंक्शन को कॉल करता है, जो अंतहीन रूप से स्वयं के नए संस्करणों को पैदा करता है जब तक कि आप या तो प्रक्रिया की सीमा को हिट नहीं करते हैं या सिस्टम रुक जाता है। यह एक ऐसी कमांड है जो प्रभावी रूप से अच्छी प्रक्रिया सीमा के बिना किसी भी सिस्टम को जमा देती है। घर पर यह कोशिश मत करो।
फॉशी

1
@ केविन का अर्थ है एक सी प्रोग्राम लिखना, इसे संकलित करना, और इसे एक ड्राइवर के रूप में स्थापित करना, सभी एक ही कमांड लाइन में? एक काम करने का उदाहरण बहुत अच्छा होगा।
डेसमंड ह्यूम

1
एक forkbomb जरूरी कर्नेल आतंक का कारण नहीं बनता है। OTOH, एक चीज जो हो सकती है वह है (जैसा रूट) लिखना है, कहना है, dd if=/dev/urandom of=/dev/mem(आपके कर्नेल संस्करण के आधार पर, आपके पास नहीं हो सकता है /dev/kmem)। लेकिन मैं उसके बाद सिस्टम का उपयोग नहीं करूंगा। :)
rbrito

जवाबों:


80

FreeBSD:

sysctl debug.kdb.panic=1

लिनक्स ( यहाँ अधिक जानकारी ):

echo c > /proc/sysrq-trigger

8
echo c > /proc/sysrq-triggerयकीन है कि एक लिनक्स सिस्टम को ठंड में एक अच्छा काम करता है। लेकिन व्यक्तिगत रूप से, कॉल स्टैक के एक नाटकीय विकास के बारे में बताने वाली मौत की एक अच्छी 'काली काली स्क्रीन' अधिक "विहित" कर्नेल घबराहट की तरह महसूस करेगी।
डेसमंड ह्यूम

4
लिनक्स पर, echo 1 > /proc/sys/kernel/sysrqइससे पहले कि आप सक्षम हो सकें echo c > /proc/sysrq-trigger
क्रिश्चियन

OpenBSD में कैसे?
मीकल

जब किसी को यह साबित करने की जरूरत है कि hw का एक निर्दोष टुकड़ा कितना दोषपूर्ण है, तो यह काम आ सकता है ...
nemesisfixx

@mykhal देखें man.openbsd.org/ddb यह वर्णन करेगा कि OpenBSD पर कर्नेल डीबगर कैसे दर्ज करें।
Kusalananda

24
mkdir /tmp/kpanic && cd /tmp/kpanic && printf '#include <linux/kernel.h>\n#include <linux/module.h>\nMODULE_LICENSE("GPL");static int8_t* message = "buffer overrun at 0x4ba4c73e73acce54";int init_module(void){panic(message);return 0;}' > kpanic.c && printf 'obj-m += kpanic.o\nall:\n\tmake -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules' > Makefile && make && insmod kpanic.ko

एक मॉड्यूल को संकलित panicकरता है जो फ़ंक्शन को कॉल करके कर्नेल को क्रैश करता है, रूट की आवश्यकता होती है, makeऔर gcc

अधिक ड्रामा के लिए कुछ दिलचस्प के साथ कमांड में "बफर ओवररून 0x4ba4c73e73acce54" को प्रतिस्थापित करता है।


4
यह स्रोत कोड काफी हानिरहित दिखता है।
मार्क लकाटा

इसके कारण कर्नेल क्रैश हो गया, लेकिन आप कर्नेल को मेमोरी डंप करने और रीस्टार्ट करने के बारे में कैसे बताते हैं? इस का उपयोग करते हुए रस्पियन सिर्फ मेरे लिए लटका हुआ है।
हीटफैनजॉन

अपडेट: ऐसा लगता है कि मुझे apt-get install kdump-toolsरास्पियन / डेबियन पर करने की आवश्यकता है ।
हीटफैनजॉन

8

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


खैर, कर्नेल का कोई बहुत उपयोग नहीं है जब सिस्टम को गैर-सूदिंग उपयोगकर्ता द्वारा पूरी तरह से जमे हुए किया गया है, जिसकी समानता में एक आदेश जारी किया गया है :(){ :|:& };:
डेसमंड ह्यूम

4
@DesmondHume एक अच्छा सेटअप बहुत अधिक प्रक्रियाओं के कारण क्रैश नहीं करता है। करने के लिए देखो /etc/security/limits.confफ़ाइल।

4

मुझे नहीं पता कि यह पहले क्यों उल्लेख नहीं किया गया था ...

sudo kill -9 1

संदेश के साथ दहशत "init को मारने की कोशिश की"।


मेरे परीक्षण प्रणाली पर कुछ भी नहीं किया ...
kgutwin

@kgutwin अपने टेस्ट सिस्टम पर आप किस कर्नेल का उपयोग कर रहे थे?
नीदजजकोब

2

इसे इस्तेमाल करे:

dd if=/dev/urandom of=/proc/sysrq-trigger 


इससे मेरे लिए बहुत तेज़ कर्नेल घबराहट हुई, लेकिन मुझे यकीन नहीं है कि यह प्रक्रिया कितनी सुरक्षित है क्योंकि मैंने इसे लाइव उबंटू इंस्टॉलेशन पर किया था। जब मैंने शुद्ध टर्मिनल वातावरण में किया तो कर्नेल ने मुझ पर स्पैम त्रुटि संदेश दिया।


2
यह मतदान क्यों है? यह पूछे गए प्रश्न को संबोधित करता है।
जोसुआ रॉबसन

1
इस एक के साथ समस्या यह है कि यह संभावित रूप से फाइल को 'सी' लिखने से पहले सभी उपयोगकर्ता प्रक्रियाओं को समाप्त करने के लिए कमांड चला सकता है।
यूजर

1

निम्नलिखित कोड को एक मॉड्यूल में संकलित करें और इसे अंकित करें, सुनिश्चित करें कि आपको एक आतंक मिलना चाहिए:

static int crash_module_init(void)

{
     printf("crash module starting\n");
     int *p = 0;

     printk("%d\n", *p);

     return 0;
}

static void crash_module_exit(void)
{
    printf("crash module exiting\n");
}

module_init(crash_module_init);
module_exit(crash_module_exit);

2
यह एक कारण होगा oops, लेकिन एक आतंक नहीं।
स्काईडैन

1

सबसे आसान काम यह है कि alt + प्रिंट स्क्रीन (sysrq) को दबाए रखें और उन्हें दबाते हुए c दबाएं। यह वही करता है जो echo c > /proc/sysrq-trigger थोड़ी व्याख्या के रूप में होता है : sysrq कुंजी का उपयोग निम्न-स्तरीय कमांड को कर्नेल में भेजने के लिए किया जाता है, अंतिम उपाय के रूप में सिस्टम को बचाने के लिए प्रयास करें। यदि आप alt + प्रिंट स्क्रीन (sysrq) को दबाए रखते हैं और उनके बगल में एक और कुंजी दबाते हैं, तो यह वैसा ही होता है जैसे कि आप उस sysrq- ट्रिगर फ़ाइल में कुंजी को प्रतिध्वनित करने के लिए थे। वे इसे एक कारण के लिए ट्रिगर कहते हैं; 3 'सी' कर्नेल को दुर्घटनाग्रस्त होने का कारण बताता है (कर्नेल आतंक)

हालाँकि, आप 'proc / sys / कर्नेल / sysrq' की सामग्री देखना चाहते हैं। यदि यह 178 या कुछ और है, तो आपको इसे 1 में बदलना चाहिए। 0 सभी अक्षम है, 1 सभी सक्षम है, और 1 से बड़ा कुछ भी उन विशिष्ट चीजों के लिए बिटमैप है जो कर्नेल sysrq के साथ करने की अनुमति देता है।


1
आप धीरे-धीरे "REISUB" भी टाइप कर सकते हैं। उन जादुई कुंजियों को पकड़ते हुए जब आपके कंप्यूटर को लिनक्स के नीचे पूरी तरह से फ्रीज कर दिया जाए। R- बदल कीबोर्ड मोड को Xlate || ई-सिग्टर्म को सभी प्रक्रिया में भेजें || I- सिगिल को सभी प्रोसेस में भेजते हैं (कोर्स के लिए छोड़कर) || S- सभी माउंटेड ड्राइव को सिंक करें। U- रिमाउंट में सभी डिवाइसेज़ केवल-पढ़े || B- बिना किसी प्रोसेस के तुरंत ही रीस्टार्ट हो जाते हैं या अनमाउंटिंग (जिसे हमने ध्यान रखा था) || पहले के बारे में)। आप पुनः आरंभ करने के बजाय B को बंद करने के लिए O का उपयोग कर सकते हैं; D आपके सिस्टम को क्रैश करने का अच्छा समय है
Yakusho
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.