Deshabilitar el comando de apagado para todos los usuarios, incluso la raíz: ¿consecuencias?

11

Me gustaría deshabilitar el shutdowncomando para todos los usuarios, incluso root, en una instalación de Ubuntu Server.

La razón por la que quiero hacer esto es para asegurarme de que no tengo el hábito de apagar la máquina de esta manera, ya que utilizo SSH en muchas máquinas de producción al mismo tiempo que esta, y no lo hago. desea apagar accidentalmente una de las otras máquinas escribiendo el comando en la ventana incorrecta.

El servidor en el que quiero desactivar el apagado solo se ejecuta dentro de VirtualBox en mi escritorio de Windows, y solo lo uso para pruebas locales, por lo que no es un problema si no puedo cerrarlo desde la línea de comandos.

Ya he mitigado un poco el problema asegurándome de que tengo una contraseña diferente en la imagen de VirtualBox, pero obviamente si estoy dentro de la sudo'ventana' en una de las máquinas de producción, todavía podría cerrarla accidentalmente.

Mis preguntas son:

  1. ¿Cómo desactivo el comando de apagado?
  2. Si deshabilito el comando de apagado, ¿hay alguna consecuencia que deba tener en cuenta? Más específicamente, ¿deshabilitará la compatibilidad con el apagado de ACPI que es equivalente a presionar el botón de encendido en una máquina física? ¿Podría afectar a otras aplicaciones genéricas?

Para información, solo uso esta imagen de VirtualBox para probar scripts de shell, ejecutar Tomcat y Java, y ese tipo de cosas.

Rico
fuente
2
En mi opinión, cambiar el comportamiento central del sistema para evitar errores humanos es una mala idea. Es probable que traiga más problemas a largo plazo de los que resuelve. Si mantiene una contraseña de usuario diferente para cada sistema, minimiza el riesgo (ya que requiere sudo). Debería desarrollar buenos hábitos que no dependan de un cambio particular del sistema, los desastres mucho más serios se producen con frecuencia con rm / cp / chmod, que se usan con mucha más frecuencia, y supongo que no los deshabilitará.
João Pinto
Si bien estoy de acuerdo con eso, y definitivamente es la forma correcta de hacer las cosas, esto es solo para evitar esa pequeña situación con una imagen de Ubuntu no oficial que tengo en mi escritorio para permitirme probar cosas sin el riesgo de robar las máquinas de mi empleador :)
Rich

Respuestas:

3

Si normalmente ejecuta el comando como sudo shutdown, en lugar de hacerlo sudo /sbin/shutdown, puede configurar un alias de shell global para "apagado" para que solo repita un mensaje en el terminal. El ejecutable real seguirá estando allí para todos los demás fines.

Dave Jennings
fuente
Esto suena como la mejor manera de hacerlo si solo estás tratando de interrumpir un hábito.
ændrük
2
Pero tenga en cuenta que la forma obvia de configurar un alias de shell ( alias shutdown=sl) no tendrá ningún efecto en los argumentos para sudo. En zsh puedes definir alias que coincidan con argumentos, pero creo que no en bash. Puede alias sudoa un script de shell que se niega a hacer cualquier cosa si el primer argumento es shutdown.
Poolie
2
En otras palabras, esto realmente no funcionará.
Poolie 05 de
14

Un mejor enfoque mucho a este problema es instalar el molly-guardia de programa en las cajas que no desea apagar, en lugar de tratar de entrenarse para Nunca se quede apagado.

Molly-Guard intenta evitar que accidentalmente apague o reinicie las máquinas. Para ello, inyecta un par de comprobaciones antes de los comandos existentes: detener, reiniciar, apagar y apagar.

La configuración típica es que le pide que escriba el nombre de host de la máquina para confirmar que realmente está en el correcto.

Es posible agregar nuevos scripts a /etc/molly-guard/run.d(como se documenta en la página de manual , los archivos de script deben seguir los nombres esperados por run-parts.

Si realmente desea deshabilitar shutdown(y esta es una idea tan extraña), simplemente haga

chmod 0 /sbin/shutdown

entonces, si necesita usarlo, vuelva a cambiarlo a 0755.

billar
fuente
Una gran idea, pero lamentablemente no es posible ya que no tengo suficiente control sobre los sistemas para poder instalar mi propio software. Lamentablemente, tengo suficiente control para poder apagarlos.
Rico
44
¿En serio? Eso es muy extraño Si solo tiene acceso a sudo para ejecutar el apagado, tal vez podría persuadir a las personas a cambiar sudo para que emitan un mensaje grande o para que siempre requieran una contraseña. Si existe el riesgo de que los cierre accidentalmente, sería de interés para los administradores instalar molly-guard.
poolie
1

Para deshabilitar el comando de apagado, simplemente haga que el binario no sea ejecutable, es decir, sudo chmod a-x /sbin/shutdown tampoco creo que afecte a ningún otro método de apagado porque, como dice la entrada de hombre para el apagado

shutdown envía una solicitud al demonio init para que el sistema baje al nivel de ejecución apropiado

entonces cualquier otro comando / script puede hacer esto incluso después de deshabilitar el comando de apagado, por ejemplo, todavía puedo apagar mi sistema usando el apagado desde el menú GNOME. También puede reiniciar su computadora desde la línea de comandos usando el comando reiniciar

binW
fuente
1

El shutdowncomando está adentro /sbin/shutdown. Puede deshabilitarlo haciendo esto:

sudo mv /sbin/shutdown /sbin/really-do-shutdown

Pero : esto significa que casi ninguno de los métodos habituales para apagar el sistema funcionará por más tiempo. Cerrar la sesión de gnome en mi máquina de prueba para obtener esta respuesta hace que simplemente cierre sesión y lo devuelva a GDM.

Si después quiere apagar su sistema, debe hacerlo

sudo init 0

El apagado "deshabilitante" afectará a todas las aplicaciones que usan el comando para cualquier cosa. Como init 0no es la forma recomendada de apagar un sistema, todos los programas que tienen que apagar el sistema lo utilizan shutdown, lo que ya no funcionará.

  • Las aplicaciones también pueden generar excepciones debido a que el archivo que falta o el archivo no es ejecutable , lo que puede provocar que se bloquee aunque no sea necesario cerrarlo. Este es un caso extremo que puede solucionar moviendo algún archivo binario, idealmente ejecutable (no un script de shell, que no funcionará) en su lugar. Por ejemplo:

    sudo cp /bin/ps /sbin/shutdown
    

    Esto es después de que haya movido el original del camino de forma segura.

Ahora, todo esto es bastante hacky, y recomiendo no hacerlo , por las razones descritas en el comentario de João Pinto. Pero no voy a evitar que lo hagas. :-)

No solo haga una copia de seguridad de / sbin / shutdown, también tenga un plan de recuperación en caso de que cause algún problema. No haga esto en un servidor al que no pueda acceder, por ejemplo. Y poner a prueba su plan de recuperación de antemano, si se asume que el sistema no arranque en absoluto (se iniciará por supuesto - Lo he probado - pero por favor, estar en el lado seguro).

Stefano Palazzo
fuente
0

Creo que debería tomar otra solución, los servidores deben tener una política ssh para deshabilitar el apagado e init 0 sobre ssh, o debe aparecer un cuadro de diálogo especial en la consola como en Windows para ingresar el "por qué" y la "contraseña de apagado" especial . Para esto, el botón de encendido debe estar protegido con contraseña en el uso del servidor.

Por el momento utilizamos un "interruptor de llave física = 4 euros" en lugar de un botón pulsador.


fuente
0

Quiero deshabilitar el shutdowncomando.

cp / sbin / shutdown / sbin / shutdown-backup

rm / sbin / shutdown

Esto se debe a que si alguien intenta forzar el uso de este comando, entonces tampoco puede

ahora nadie podrá usar el comando de apagado.

mostrará un mensaje de comando no encontrado, instálelo.

vim /etc/bash.bashrc

Agregue una línea al final de bash.bashrc

alias shutdown = "echo 'No tienes permiso para usar este comando'"

si lo quieres de vuelta (habilitado). solo copialo

cp / sbin / shutdown-backup / sbin / shutdown

Dishank Jindal
fuente