Linux: haga que el apagado no sea ejecutable por seguridad

9

Hoy he apagado una máquina de producción por error porque pensé que estaba en mi máquina local. Lo sé, error de novato :-(

Como solución para que no vuelva a ocurrir, estaba pensando en eliminar el permiso de ejecución para el comando de apagado ya que esa máquina debería estar siempre encendida.

¿Es eso una buena idea? ¿Puedes ver algún efecto secundario no deseado al hacer eso?

Saludos, Dan

Daniele
fuente
1
La mayoría de los administradores de sistemas hacen algo como esto en algún momento (¿qué ventana fue otra vez? Vaya ...)
Bart Silverstrim
3
Alégrate de que solo haya sido un cierre. Otras personas aprendieron esa lección con la herramienta dd (AKA: destructor de discos);)
pehrs
1
La mayoría de las tareas y herramientas del administrador de sistemas pueden ser fatales y mortales. Gran poder viene con gran responsabilidad. Puede cambiar su comando de apagado en 000, pero la próxima vez puede estropearlo con rm, dd, fsck, mv o alguna otra herramienta potencialmente peligrosa. Todos cometeremos errores tarde o temprano. Lo mejor que puede hacer es prepararse para lo peor y asegurarse de tener copias de seguridad, etc. :-)
Janne Pikkarainen

Respuestas:

21

Completamente otro enfoque de cómo ser advertido de que trabaja en una máquina de producción es marcar el terminal. Por ejemplo, el user@machine:~#texto podría ser rojo en las máquinas de producción, verde en el desarrollo, etc. Aquí hay un buen tutorial sobre cómo hacer esto: Color Bash Prompt

mkudlacek
fuente
+1, codifico en color todas mis máquinas: Texto blanco sobre un fondo coloreado, Naranja = Infraestructura; Azul = Producción; Púrpura = Prueba / Dev. La estación de trabajo normal mantiene el fondo negro estándar.
Chris S
Otro tutorial para casi todos los shell: understudy.net/custom.html
Chris S
+1 por un consejo brillante, nunca habría pensado en eso.
Kenny Rasschaert
7

El mejor consejo que puedo darle es que no inicie sesión como usuario root a menos que necesite acceso root, y asegúrese de tener una contraseña root / sudo diferente en cada máquina.

Hacer que el apagado sea inaccesible es una opción, pero no es una buena. De cualquier alias shutdowna shutdown -ay touch /etc/shutdown.allowochmod a-x /sbin/shutdown

Además, ¿dónde termina? ¿También vas a rechazar detener, reiniciar e iniciar?

James L
fuente
44
Nunca termina Siempre hay algo más, una y otra vez, más y más, simplemente nunca se detiene <golpea la cabeza contra la pared repetidamente ...>
Bart Silverstrim
No te olvides de "matar". Después de todo, "kill -9 1" es una forma bastante efectiva (o, bueno, solía ser, en los días) de cerrar una caja de Unix.
Vatine
Algunas paradas no tienen -a. Además, confiar en un alias como ese es lo mismo que confiar alias rm='rm -i': algún día no estará allí cuando realmente lo necesite. Además, shutdown -asolo tiene una utilidad limitada de todos modos.
Pausado hasta nuevo aviso.
3

Algunos puntos a considerar:

  1. ¿Qué estabas haciendo como root en un sistema de producción durante el tiempo de producción? Configure sus sistemas para que no tenga que ser root en ellos para el trabajo diario. Nunca debe ser root en un sistema de producción sin una muy buena razón.
  2. Aprende la importante lección. Cuando es root, debe verificar dos veces antes de presionar enter. SUDO no es una protección si solo escribe su contraseña para continuar, sin pensar. La coloración rápida, como lo menciona mkudlacek, es una herramienta muy útil para ayudar a garantizar que no esté en el sistema incorrecto.
  3. No te metas con las herramientas integradas. Es probable que rompa las actualizaciones y vuelva loco a las nuevas contrataciones. Si desea cambiar algo, use su propio archivo de alias.
pehrs
fuente
2
No estoy necesariamente de acuerdo con esta publicación. Mientras trabajo como administrador de sistemas, es muy común que mis accesos a máquinas de producción requieran root. Bloqueas usuarios, no administradores. Tenga en cuenta que no hay votos negativos, porque es un punto de vista legítimo, incluso si difiere del mío.
PP.
1
En ese caso, no tiene requisitos de nivel de servicio muy estrictos en las máquinas. Instalación de software, parches, omisión de emergencia de ACL y cambios en la configuración de la red son las únicas cosas para las que necesita root. Ninguna de estas actividades debe realizarse con frecuencia en una máquina en producción ... Y todo lo demás debería ser posible desde una cuenta de superusuario. Si utiliza la raíz en lugar de superusuarios en sus sistemas de producción que normalmente tiene un problema ...
pehrs
3

No creo que jugar con los permisos shutdownsea ​​la forma de manejar la situación. Básicamente acabas de aprender una lección. Ánimo.

He hecho el mismo tipo de cosas: obtener largas cadenas de sesiones de SSH, luego jugar con las rutas en una de las máquinas por las que me hicieron pasar, interrumpiéndome. He estropeado una solicitud rsync, lo que lleva a la destrucción sistemática de un sistema en el otro lado del mundo. Me he ejecutado rm -rf / pathen un servidor de producción. (Esa vez aprendí cómo funcionaban las restauraciones).

Entonces, mucho más viejo y con suerte un poco más sabio, ahora tengo reglas estrictas que me impongo.

  • Todos los mensajes raíz terminan con un #, sin importar qué otra información contenga.
  • Cada vez que estoy en el indicador #, literalmente me siento en mis manos antes de presionar la tecla Intro.
  • Si tengo alguna duda sobre lo que estoy a punto de hacer o dónde estoy realmente o cómo llegué allí, lo cancelo y lo reconstruyo nuevamente desde una condición de inicio conocida.
  • Cuando cometo un error (y todavía los cometo, aunque cada vez son menos frecuentes y más oscuros a medida que pasa el tiempo), averigua inmediatamente lo que he hecho, a quién he impactado y confiesa mis pecados. . Luego suelte todo lo demás y deshaga el daño lo más rápido y mejor que pueda.

La naturaleza de mi trabajo requiere que pase mucho tiempo en muchas indicaciones de raíz variadas, pero gracias a mis errores en el pasado mantengo una conciencia situacional mucho mejor que cuando comencé.

David Mackintosh
fuente
1

Depende, de verdad. Podría intentar simplemente envolver el comando, pero significa que si realiza actualizaciones o mejoras que afectan a ese ejecutable, puede olvidarse de él y hacer que arruine una actualización. Jugar con los comandos de apagado del sistema puede ser un PITA, especialmente si tiene nuevas contrataciones o un reemplazo que termina sin saber que estaba jugando con los archivos binarios del sistema.

Personalmente, consideraría envolver el comando en una secuencia de comandos que identifique el sistema por nombre y te haga confirmar que eso es lo que realmente quieres hacer antes de ejecutar el binario real, o que tienes que escribir una cierta secuencia de letras para confirmar el apagado antes de que se ejecute el binario. Eso debería hacer una pausa.

Bart Silverstrim
fuente
1

Puede considerar configurar el símbolo del sistema para incluir el nombre de la máquina, al menos en los servidores. Simplemente podría ayudar a evitar que otros comandos se ejecuten en la máquina incorrecta en el futuro. Es más efectivo si los nombres de las máquinas están coloreados para que se destaquen e incluso podría codificar con colores para identificar los roles del servidor.

John Gardeniers
fuente
0

Una forma es no usar suy / o iniciar sesión directamente en root. Es mejor iniciar sesión directamente en la cuenta Y tener una contraseña diferente para rootla máquina local y la clave ssh.

Por supuesto, es además de estar atento al indicador rojo '#'.

Maciej Piechotka
fuente
0

Sí, eliminar el bit de ejecución en el comando de apagado es la forma más sencilla y segura de prevenir apagados accidentales, especialmente si tiene un entorno de escritorio como KDE en la máquina y desea evitar apagados accidentales al cerrar la sesión.

En cuanto a que las personas nuevas se confundan, creo que lo primero que harán será ls -l /sbin/shutdownaveriguar por qué no funciona (especialmente si tienen el buen hábito de completar nombres ejecutables de tabulación). Obviamente, debe informarles sobre cualquier cambio que haya realizado.

Para mayor seguridad, puede agregar una línea para /etc/rc.localeliminar el bit de ejecución del comando de apagado para que no olvide restablecerlo después de un reinicio.

timmy
fuente
0

simplemente puede eliminar / sbin / de la ruta de la raíz. de esa manera, debe escribir la ruta completa para ejecutarlo, y generalmente soluciona los accidentes.

Sirex
fuente