Est-il possible de provoquer une panique du noyau avec une seule ligne de commande?
Quelle serait la commande la plus simple pour un utilisateur sudoing et quelle serait-elle pour un utilisateur régulier, le cas échéant?
Les scénarios qui suggèrent de télécharger quelque chose dans le cadre de la commande ne comptent pas.
FreeBSD:
sysctl debug.kdb.panic=1
Linux (plus d'informations dans la documentation du noya ):
echo c > /proc/sysrq-trigger
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
Compile un module qui plante le noyau en appelant la fonction panic
, a besoin de root, requiert make
et gcc
Remplacez le "dépassement de tampon à 0x4ba4c73e73acce54" dans la commande par quelque chose d'intéressant pour plus de drame.
Le noyau est censé continuer à fonctionner quoi qu'il arrive. Donc, tout moyen de provoquer une panique du noyau par interaction de l'utilisateur (autre que le vandalisme délibéré par une racine tout-puissant, comme le propose jokinkly Bruce Ediger, et la plupart des noyaux aujourd'hui sont construits de sorte que la plupart de ces farces ne fonctionneront pas en premier lieu) est un extrêmement bug grave, qui serait rapidement corrigé.
Je ne sais pas pourquoi cela n'a pas été mentionné auparavant ...
Sudo kill -9 1
Panique avec le message "a essayé de tuer init".
Essaye ça:
dd if=/dev/urandom of=/proc/sysrq-trigger
. Mais le noyau m'a envoyé des messages d'erreur de spam lorsque je l'ai fait dans l'environnement terminal pur.
La chose la plus simple est de maintenir la touche alt + print screen (sysrq) enfoncée et d'appuyer sur c tout en les maintenant. Cela fait la même chose que echo c > /proc/sysrq-trigger
Une petite explication: la clé sysrq est utilisée pour envoyer des commandes de bas niveau au noyau lui-même, en dernier recours pour essayer de sauver le système. Si vous maintenez alt + print screen (sysrq) enfoncé et appuyez sur une autre touche à côté d'eux, cela fait la même chose que si vous deviez faire écho à la touche dans ce fichier sysrq-trigger. Ils l'appellent déclencheur pour une raison; 3 Le 'c' dit au noyau de planter (provoquer une panique du noyau)
Cependant, vous voudrez peut-être voir le contenu de 'proc/sys/kernel/sysrq'. Si c'est 178 ou quoi que ce soit d'autre, vous devez le changer en 1. 0 est tout désactivé, 1 est tout activé, et tout ce qui dépasse 1 est un bitmap pour les choses spécifiques que le noyau permet de faire avec sysrq.
compilez le code suivant dans un module et insmodez-le, assurez-vous de paniquer:
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);