Archivo

Entradas Etiquetadas ‘remoto’

REISUB y llamadas remotas a Alt+Sysrq

Domingo, 29 de Agosto de 2010 Gaspar Fernández Sin comentarios

En muchos sitios, podemos ver esta palabra clave, para muchos RESUIB para otros RESIUB y normalmente REISUB. Y sirve para reiniciar el sistema Linux de forma segura después de que el sistema se congele; de la siguiente forma: Alt+Imprimir Pantalla + R,E,I,S,U,B (no hace falta soltar las teclas Alt + Imprimir pantalla). Cada letra representa una acción del kernel:

  • R (Devuelve el control al teclado unRaw)
  • E (Termina todos los procesos tErm)
  • I (Mata los procesos que queden vivos full kIll)
  • S (Sincroniza los discos Sync)
  • U (Monta todos los sistemas de archivos como sólo lectura Umount)
  • B (Reinicia el ordenador Boot)

Bien, si tenemos acceso físico al ordenador, no hay problema, pero y si estamos enchufados en otra máquina ? Todo está en el fichero especial /proc/sysrq-trigger.

Obteniendo información de los procesos

Enviando a /proc/sysrq-trigger (como root) la letra correspondiente a la acción del kernel vale. Empezaremos pidiendo ayuda:

root $ echo “h” > /proc/sysrq-trigger

root $ dmesg | tail

…. # Nos dirá muchas cosas, sólo nos interesa la última línea
SysRq : HELP : loglevel0-8 reBoot tErm Full kIll saK showMem Nice powerOff showPc show-all-timers(Q) unRaw Sync showTasks Unmount shoW-blocked-tasks

Vemos cómo el kernel a través de dmesg se comunicará con nosotros. Cada letra mayúscula nos indicará una acción diferente, empezaremos obteniendo información sobre la memoria:

root $ echo “m” > /proc/sysrq-trigger

root $ dmesg | tail -n 35

O información sobre tareas bloqueadas:

root $ echo “m” > /proc/sysrq-trigger

root $ dmesg

Más acciones

Incluso podemos lanzar el OOM killer con la siguiente línea:

root $ echo “f” > /proc/sysrq-trigger

Terminar todos los procesos (igual que comentábamos arriba del todo):

root $ echo “e” > /proc/sysrq-trigger

Cambia el nivel de información de dmesg (del 0 al 8):

root $ echo 5 > /proc/sysrq-trigger

Para enviar un REISUB es algo más elaborado:

root $ nohup bash -c “for key in s u b; do echo \$key > /proc/sysrq-trigger; sleep 4; done”

Aunque tendremos que asegurarnos de que las tareas estén muertas, ya que, nuestra conexión ssh, o nuestro terminal, o incluso bash, se mueren al mandar un E o un I al kernel (dando igual el nohup). Por otra parte, la R la podemos quitar, ya que vale para devolver el control al teclado, y estamos desde un equipo remoto.

Seguridad

Pero tanto por nosotros mismos (debemos de protegernos de meter la pata), como los posibles usuarios del ordenador, tal vez no nos interese que puedan pulsar en teclado alguna combinación de teclas que comprometa al kernel. Para ello, tenemos  /proc/sys/kernel/sysrq o directamente el comando sysctl del cual modificamos la propiedad kernel.sysrq; lo haremos de la siguiente manera:

root $ sysctl kernel.sysrq=0 # Para desactivar Alt+SysRq

root $ sysctl kernel.sysrq=1 # Para activarlo

Se pueden activar algunos comandos sólo, dependiendo del número que se indique.

Identificar si estamos en el servidor local o no

Lunes, 25 de Enero de 2010 Gaspar Fernández Sin comentarios

A veces es interesante saber en qué servidor estamos, si en nuestro servidor local para hacer pruebas, o en el remoto (y será la web definitiva); puede que porque las claves de mi servidor MySQL local son diferentes, o porque en local activamos automáticamente el modo de depuración, o símplemente porque en nuestro servidor local tenemos todos nuestros proyectos como http://localhost/proyecto1/ y en el servidor se ejecutarán como http://www.proyecto1.com/.

Para ello nos vale esta línea que podemos incluir en nuestra biblioteca de funciones personal en PHP:

1
$serv_local = (file_exists($_SERVER['DOCUMENT_ROOT']."/serv_local"));

Ahora en nuestro servidor local (valga la redundancia en todo el post) hacemos un touch en nuestro DOCUMENT_ROOT (por ejemplo /home/www/public_http/):

1
2
$ cd /home/www/public_http
$ touch serv_local

Con esto siempre que ejecutemos nuestros scripts buscaremos el fichero serv_local, si se encuentra, estamos seguros de que estamos en nuestro ordenador, si no, estamos en el servidor remoto.

Categories: PHP Tags: , ,

Visita otras webs de la red