domingo, 23 de junio de 2019

Un servidor NUNCA se reinicia

Voy a ser claro y muy crítico. Veo mucha confusión en relación a este tema, y es que aún hay gente que parece que no se entera o no se quiere enterar de que un servidor en producción no es como un ordenador personal, por lo que actúan en un servidor en prod de igual forma que como lo hacen en un ordenador personal.


Esta es la gran pelea con los desarrolladores y con los departamentos de desarrollo. Muchas veces, cuando están desarrollando una aplicación o cuando una aplicación que tenían desarrollada falla, tienden a buscar mínimamente el problema mirando algunos logs y si no ven solución, reinician la máquina. ERROR.

¿Cómo se debería actuar? Para empezar se debería encargar de esto un sysadmin. El departamento de desarrollo solamente debería mirar si el fallo ha sido provocado por el código y ya está. Si no, deben parar su actuación y que entren los sysadmin. Eso para empezar, pero pongamos que se permite que el departamento de desarrollo pueda reiniciar máquinas, aún así hay que tener un protocolo. Por ejemplo:

1. Arrancar la máquina de desarrollo o respaldo. Para esto hemos tenido que hacer los deberes previamente y tener una máquina de producción y otra de respaldo con exactamente lo mismo que la de producción para que cuando caiga Prod, arrancar respaldo. Así disponemos de una continuidad del servicio.

2. Detener el servicio en Prod (no el servidor). Una vez que esté todo detenido en Prod, analizamos logs, bases de datos,etc y tratamos de encontrar el problema. Analizamos el estado de los discos y recuperamos los datos y os almacenamos bien en caso de fallo. Si los discos están bien, nada debería costarnos volver a instalar un sistema operativo en el servidor e instalarlo de nuevo.

Pero ¿Qué pasa si no tenemos ese servidor de respaldo? TAMPOCO SE REINICIA EL SERVIDOR. Menos aún, es en este caso donde tenemos que ser conscientes de nuestra falta de responsabilidad y seguir adelante y tratar de encontrar el error y empezar de nuevo en el menor tiempo posible. 

En caso de que no encontremos el fallo y tras ver todas las posibilidades, sí, tendríamos que reiniciar el servidor, pero teniendo en mente que lo más seguro es que empecemos una instalación de nuevo.

Ya otro día veremos cómo hacer frente a un fallo en un servidor, pero de momento tenemos que centrarnos en analizar y ver qué hacer para evitar que personas fuera del departamento de Sistemas reinicien el sistema. Vamos poco a poco.



Para la prueba me he ido a una máquina virtual y he creado un usuario cualquiera que se llame "user1". Este usuario estará fuera del grupo de sistemas, por lo que no debería poder reiniciar, pero, como hemos visto.

En visudo, lo que hemos hecho es añadir a este usuario a sudoers. Con todos los permisos. Esto no está del todo mal, pues puede que por circunstancias de infraestructura así lo necesitemos.


Lo que vamos a hacer es prohibir que este usuario (y a cualquier otro que no sea sysadmin) puede reiniciar ninguna máquina. Para eso le decimos que pueda ejecutar cualquier comando dentro de /usr/bin excepto shutdown. Así de simple.



Como vemos, desde root sí que nos aparece la opción shutdown pero no desde user1. Esto es porque necesitamos ejecutar este comando con sudo.


Tal y como observamos, sale el aviso que este usuario (user1) no puede ejecutar este comando. Así ya conseguimos que sólo los sysadmins puedan reiniciar el servidor. Sólo los sysadmins deberían poder ejecutar comandos como estos, si después se llega al mismo reusltado es algo que puede ocurrir, pero no es lo mismo, pues eso está dentro de nuestra responsabilidad, no de alguien de desarrollo. Permitir estas situaciones demuestra una gran irresponsabilidad por parte de la empresa que lo permita.

¿Hackeamos el Mundo?

No hay comentarios:

Publicar un comentario

Related Posts Plugin for WordPress, Blogger...

Entrada destacada

El server me sabe a poco.

Soy un fanático del Rock y de Debian . (Creo que voy a inventar Rockbian, que suena bien y todo xD) Llevaba tiempo queriendo unir estos 2 c...