Anécdotas del kernel de Linux: SysMagic

La tecla mágica es una interrupción que permite comunicarse con el kernel en situaciones de inestabilidad en una máquina Linux, que viene habilitada por defecto en la gran mayoría de kernels precompilados de las distribuciones actuales. En caso de que compilemos el núcleo a mano, la opción «Magic SysRq Key» se encuentra en el menú «Kernel Hacking». En el fichero de configuración del kernel recibe el nombre de CONFIG_MAGIC_SYSRQ por lo que realizando un «grep» de éste veremos si la hemos habilitado (debe aparecer CONFIG_MAGIC_SYSRQ=Y).

En caso de tener la opción activada en el kernel se creará el fichero /proc/sys/kernel/sysrq. Este fichero indicará si la tecla mágica esta habilitada (valor 1) o por lo contrario esta deshabilitada (valor 0). La tecla mágica acepta una serie de valores. Estos valores son una única letra en minúscula que significa una acción. Vamos a listar las más importantes:

  • s: sincroniza los discos duros. Los datos que permanecen en memoria y no han sido escritos en el disco duro por rendimiento (escritura retardada) se escriben ahora en memoria evitando inconsistencias en la información.
  • e: manda señal SIGTERM (15) a todos los procesos menos a init. Es decir, pide a los procesos que terminen.
  • i: manda señal KILL (9) a todos los procesos menos a init.
  • f: manda señal oom_kill para detener los procesos que están consumiendo excesiva cantidad de memoria RAM.
  • u: desmontamos los discos duros. Importante para evitar daños en los discos una vez han sido sincronizados.
  • w: muestra las tareas que están bloqueadas y no se pueden detener.
  • t: muestra todas las tareas que se están ejecutando y información de ellas.
  • h: apaga la máquina.
  • b: reinicia la máquina.
  • r: esta opción pone el teclado en modo Raw descargando todos los controladores del teclado. Suele emplearse para conseguir tomar el control del teclado, cuando por ejemplo, las X han bloqueado el sistema.

La tecla mágica se puede activar mediante dos maneras: introduciendo la opción en la variable /proc/sysrq-trigger (con un simple echo por ejemplo), y mediante la combinación de teclas alt+impr+opción escogida (para x86 y x86_64, mirar manual para otra plataforma).

La primera opción puede servir para cuando estemos conectados remotamente a la máquina y queramos invocar a la tecla mágica. Hay que tener en cuenta que en caso de un fallo grave en el sistema es muy probable que perdamos el acceso remoto a la máquina. Por ejemplo si queremos sincronizar los discos duros, terminar los procesos (que no matar) y reiniciar seria de la siguiente forma:

echo s > /proc/sysrq-trigger; echo e > /proc/sysrq-trigger; echo b > /proc/sysrq-trigger

La segunda forma de emplear la tecla mágica es mediante la combinación de teclas Alt+Impr+Opción escogida. Esta forma solo se puede ejecutar de forma local y se emplea para casos en los que el sistema no responda y se requiera un apagado de emergencia (halt) intentando dañar lo menos posible al sistema. Un ejemplo ordenado de detención de un sistema en caso de inestabilidad grave sería teclear las siguientes opciones manteniendo las teclas Alt+Impr presionadas:

r s f e i u b

Espero que les haya gustado esta anécdota del kernel. Para más información, visiten la página de SysRq en la documentación del kernel.

Trackbacks

  1. […] This post was mentioned on Twitter by Security Art Work, Ricardo Donoso. Ricardo Donoso said: Anécdotas del kernel de Linux: SysMagic http://bit.ly/2f7T9z […]