Tek bir komutla çekirdek panikine neden olur?


62

Tek bir komut satırı ile bir çekirdek panikine neden olmak mümkün mü?

Bir sudoing kullanıcısı için bu şekilde en basit komut hangisi olurdu ve eğer varsa normal bir kullanıcı için ne olurdu?

Bir şeyin komutun bir parçası olarak indirilmesini öneren senaryolar sayılmaz.


11
:(){ :|:& };:olabilir?
Carl

@ carleeto Tamam, bunu bize dinleneni açıklayabilir misiniz?
Chad Harrison

14
@ hidroparadise Buna "çatalbomb" denir. "run: and ayrıca run: arka planda" anlamına gelen gövdesi ile :()adlandırılan bir işlevi tanımlar . işlev tanımını sona erdirir ve yeni işlevinizi çağırır; bu işlem, işlem sınırlarına ulaşana veya sistem durma noktasına gelene kadar kendisinin yeni sürümlerini sınırsızca ortaya çıkarır. İyi işlem limitleri koyulmadan herhangi bir sistemi etkili bir şekilde donatan bir komuttur. Bunu evde denemeyin. ::|:&;:
Phoshi

1
@Kevin Bir C programı yazmak, derlemek ve bir sürücü olarak yüklemek, hepsini tek bir komut satırında mı demek istiyorsunuz? Çalışan bir örnek harika olurdu.
Desmond Hume,

1
Bir çatal bomba mutlaka bir çekirdek panikine neden olmaz. Otoh, bir şey olabilir bunu (root olarak) yazmaktır, diyelim ki, etmektir dd if=/dev/urandom of=/dev/mem(sizin çekirdek sürümü bağlı olarak, olmayabilir /dev/kmem). Fakat bundan sonra sistemi kullanmazdım. :)
rbrito

Yanıtlar:


80

FreeBSD:

sysctl debug.kdb.panic=1

Linux ( burada daha fazla bilgi ):

echo c > /proc/sysrq-trigger

8
echo c > /proc/sysrq-triggerBir Linux sistemini dondurmak için kesinlikle iyi bir iş çıkar. Fakat şahsen, çağrı yığınının dramatik bir şekilde gelişimini anlatan bir ol 'un iyi bir siyah ekran perdesi daha "kanonik" bir çekirdek paniği gibi hissettirir.
Desmond Hume,

4
Linux'ta echo 1 > /proc/sys/kernel/sysrqyapabilmeniz için önce yapmanız gerekebilir echo c > /proc/sysrq-trigger.
Christian

OpenBSD'de nasıl?
mykhal

Biri gerektiğinde ispat hw masum parçasıdır nasıl kusurlu, bu kullanışlı ... yarayabilir
nemesisfixx

@ mykhal Bakınız man.openbsd.org/ddb Bu, OpenBSD'de çekirdek hata ayıklayıcısına nasıl girileceğini açıklar.
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

panicFonksiyonu çağırarak çekirdeği çökerten bir modülü derler , root gerektirir, gerektirir makeve gcc

komuttaki "0x4ba4c73e73acce54 adresinde arabellek taşması" komutunu yerine getirin.


4
Bu kaynak kodu yeterince zararsız görünüyor.
Mark Lakata

Bu çekirdeğin çökmesine neden oldu, ama çekirdeğe bellek dökmesini ve yeniden başlatılmasını nasıl söylersin? Raspbian az önce bunu kullanırken benim için astı.
HeatfanJohn

Güncelleme: apt-get install kdump-toolsRaspbian / Debian ile ilgili ihtiyacım var .
HeatfanJohn

8

Çekirdek ne olursa olsun koşmaya devam etmek içindir. Bu yüzden, kullanıcı etkileşimi ile bir çekirdek panikine yol açmanın herhangi bir yolu (Bruce Ediger'ın şaka yapmadan önerdiği ve bugün çoğu çekirdeğin ilk etapta işe yaramayacağı şekilde yapılan çoğu çekirdek tarafından kasıtlı vandalizm dışında) son derece ciddi bir hata, hızlı bir şekilde düzeltilecektir.


Eh, sistem tamamen benzer şekilde bir komut veren bir sudoing olmayan kullanıcı tarafından sistem tamamen donduğunda çekirdeğin fazla kullanımı yoktur :(){ :|:& };:.
Desmond Hume,

4
@DesmondHume Çok fazla işlem nedeniyle iyi bir kurulum çökmez. /etc/security/limits.confDosyaya bak .
Gerçeklik

4

Bunun neden daha önce söylenmediğini bilmiyorum ...

sudo kill -9 1

Panik "init'i öldürmeye çalıştı" mesajı ile panikledi.


Test sistemimde hiçbir şey yapmadı ...
kgutwin

@kgutwin test sisteminizde hangi çekirdeği kullanıyordunuz?
NieDzejkob

2

Bunu dene:

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


Bu benim için çok hızlı bir çekirdek panik yapmıştı, ancak canlı Ubuntu kurulumunda yaptığım için işlemin ne kadar güvenli olduğundan emin değilim. Fakat çekirdek, saf uçbirim ortamında yaptığımda bana spam hata mesajları verdi.


2
Neden aşağı oy verildi? Sorulan soruyu ele alıyor.
Josua Robson

1
Bununla ilgili sorun, tüm kullanıcı işlemlerini dosyaya 'c' yazmadan önce sonlandırma komutunu potansiyel olarak çalıştırabilmesidir.
kullanıcı

1

Aşağıdaki kodu bir modüle derleyin ve bir panik almanız gerektiğinden emin olun:

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
Bu, oopsbir paniğe yol açmayacak fakat paniğe neden olmayacak .
SkyDan

1

En kolay şey alt + yazdırma ekranını (sysrq) basılı tutmak ve onları tutarken c tuşuna basmaktır. echo c > /proc/sysrq-trigger Küçük bir açıklama ile aynıdır : sysrq tuşu, son çare olarak çekirdeğe düşük seviye komutlar göndermek için kullanılır. sistemi kaydetmeyi denemek için. Alt + print screen (sysrq) düğmesini basılı tutarsanız ve yanlarında başka bir tuşa basarsanız, aynı sysrq-tetikleyici dosyasındaki anahtarı eklermiş gibi yaparsınız. Buna bir sebeple tetikleyici diyorlar; 3 'c', çekirdeğe çökmesini söyler (bir çekirdek panikine neden olur)

Ancak, 'proc / sys / kernel / sysrq' içeriğini görmek isteyebilirsiniz. 178 veya başka bir şeyse, 1 olarak değiştirmelisiniz. 0 tümü devre dışı bırakılmış, 1 tümü etkin ve 1'den büyük herhangi bir şey, çekirdeğin sysrq ile yapmasına izin veren belirli şeyler için bir bitmap'tir.


1
Ayrıca yavaş yavaş "REISUB" yazabilirsiniz. Bu sihirli tuşları basılı tutarken, linux altında tamamen donduğunda bilgisayarınızı yeniden başlatmak için basılı tutun. Klavye modunu Xlate'e getiriniz || SigTerm'i tüm işlemlere gönderin || SigKill'i tüm işlemlere gönderirim (elbette init hariç) || Tüm monte edilmiş sürücüleri senkronize et | U-Tüm cihazları salt okunur olarak birleştirin || B- herhangi bir işlemi öldürmeden veya sökmeden anında yeniden başlar yaklaşık önce). Yeniden başlatma yerine kapatmak için B yerine O'yu da kullanabilirsiniz; D sisteminizi çökertmek için güzel zamanlar
geçirir
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.