¿Cómo deshabilita los comandos de terminal de miedo?
Estaba usando SSH para acceder a un servidor Ubuntu remoto sin acceso al servidor físico. Pensé que estaba escribiendo ' shutdown
' en el servidor NoSQL que se ejecuta en el sistema operativo Ubuntu, pero en realidad le dije al servidor Ubuntu que se apagara. Luego tuve que decirle al administrador del servidor lo que hice para que él pudiera iniciar el servidor físico por mí. ¡Eso fue embarazoso!
¿Cómo puedo evitar que esto vuelva a suceder?
rm
cuales tiene peores efectos secundarios queshutdown
. En pocas palabras: aquí no hay forma de evitar que sucedan cosas malas si sigue ejecutando comandos aleatorios como root.Respuestas:
La respuesta estándar es "no iniciar sesión como root". Todos los comandos ejecutados como root dan miedo. Si esa no es una opción, podría poner algunos comandos de alias en su
.bashrc
para deshabilitar los comandos que encuentre especialmente atemorizantes. Por ejemplo:Luego, si escribe shutdown, recibirá el siguiente mensaje:
( Asegúrese de que su
.bashrc
ha cargado en primer lugar, antes de probar esto en un servidor de producción)Salir de su
ssh
sesión actual e iniciar sesión nuevamente, o usar. ~/.bashrc
debería cargar / ejecutar .bashrc. Quizás intente ejecutarrm
sin ningún argumento para asegurarse de que su servidor no haya deshabilitado la carga automática.bashrc
en inicios de sesión o similares.Tenga en cuenta que si su principal preocupación es detener y apagar, podría considerar instalar molly-guard , lo que le hará escribir el nombre de host antes de apagar la máquina. Esto es más útil si apaga regularmente sistemas operativos completos en la línea de comandos, pero desea asegurarse de que está cerrando el correcto.
También puede probar probar esto con un comando menos aterrador como cerrar sesión o salir.
fuente
source
es un alias.
y no es compatible con todos los shells.~/.bash_profile
fuente predeterminada.bashrc
, que no es un comportamiento estándar y en la mayoría de los sistemas,.bashrc
no se lee al iniciar sesión a través de ssh, por lo que esto no hará una diferencia allí. Es mucho mejor agregar los alias~/.profile
o en su~/.bash_profile
lugar.sudo
existe por una razón: úsala. Cuando finaliza su comando (en este caso, una CLI interactiva), regresa a su shell de nivel de usuario, no a un shell raíz. Hay muy pocas razones valiosas para estar en un shell de raíz. (Me sorprende que esto ya no sea una respuesta ...)Habiendo dicho eso, no seas un muppet que usa
sudo
para todo . Comprenda lo que está haciendo y comprenda por qué requiere o no privilegios de root.Además, puede diferenciar su solicitud de shells raíz / usuario. Esto también hace que sea más obvio que está de vuelta en el indicador de comandos de shell y no " alguna otra CLI ". El mío es muy colorido y tiene mucha información útil (como el nombre de host), lo que hace que sea muy simple saber en qué host se ejecutará el comando, y también hace que sea más fácil mirar hacia atrás a través de tu historial y localizar indicaciones, una raíz Shell utiliza el indicador predeterminado.
Esto es más adecuado para usar en " su " cuenta, pero si se está tomando en serio la seguridad / administración de sistemas, entonces no compartirá contraseñas / cuentas, y no estará sentado en un shell de raíz sin ser completamente consciente.
Como la gente ha dicho una y otra y otra vez, " alias de comandos para crear un entorno seguro es una mala idea ". Te sentirás cómodo en tu entorno seguro, escribiendo esos comandos 'aterradores' donde no deberías. Entonces, un día cambiarás de trabajo, o iniciarás sesión en una nueva máquina, y luego boom " whoopsy, no quise hacerlo, lo siento " ...
fuente
sudo
es tu turno de tomar el café.sudo shutdown
? Si lo ejecuta en la máquina incorrecta, seguirá siendo un desastre.sudo
es un comando de shell, no tiene nada que ver con la base de datos.sudo shutdown
, ya que supongosudo
que no es un comando NoSQL. No estar en un shell de raíz habría resuelto totalmente ese problema y sería una muy buena idea. Así que miraría el aviso cuidadosamente antes de ejecutar comandos importantes.El paquete 'molly-guard' (al menos en los sistemas derivados de Debian) instalará un contenedor para apagar, detener, apagar y reiniciar. Si detecta que el terminal es remoto, solicitará el nombre del host. Si no coincide, el comando se cancela.
fuente
rm -rf /
?set -u
podría ayudar con eso en algunos casos, como al escribirrm -rf /$SOME_VARIABLE_WHICH_I_THOUGHT_EXISTS_BUT_DOESNT
.--no-preserve-root
que es poco probable que escriba por accidente.Acepté una respuesta que me gusta mucho, sin embargo, si alguien más está leyendo y quiere una respuesta más simple, aquí está la mía.
Encuentra el archivo .bashrc y ponlo como la última línea:
Luego, cuando escribes apagado, obtienes algo como
~bash: notforuse is not a command
Esto puede ser una tontería, pero es simple y funciona. Sin embargo, agradezco las respuestas con mejores formas de hacerlo.
fuente
rm
personas trolls ...alias rm='echo "You can't use rm!" #'
notforuse
en la ruta.~/.SaveMyReputation
y agreguemos como última línea de su.bashrc
línea[ -f ~/.SaveMyReputation ] && source ~/,SaveMyReputation
. Es posible que desee agregar una línea adicionalecho "#Scaring command protected shell, comment the last line of .bashrc and log again to have a full working shell"
dentro de ese archivo. Al menos puede traer este archivo de alias en otra máquina (debería serlo.bash_aliases
, pero en este caso "obsoleto" es mejor usar otro nombre).alias shutdown=shutdown-disabled-by-an-alias
. (Esto solo resuelve el tercer y más pequeño problema que señaló @DavidRicherby). Aunque probablemente solo le tomará 2 segundos a la siguiente persona pasar de vernotforuse is not a command
a corrertype -a shutdown
y encontrar el alias, luego escribirsudo \shutdown
para deshabilitar la expansión de alias. (Suponiendo que se hayansudo
alias parasudo='sudo '
que expanda los alias en su primer argumento).Para
shutdown
(reboot
,halt
y afines): Tengo una copia de preguntarme si estoy realmente seguro (y no hace nada de todos modos). Almaceno tales guiones en/usr/local/sbin
. En Debian, esto tiene otra prioridad/sbin
(es el primer directorio de PATH).Las secuencias de comandos del sistema usan la ruta completa, por lo que este truco me impide detener un servidor remoto en lugar de una máquina local (un mal comportamiento de Awesome WM), pero no tiene otro efecto indirecto, y todavía puedo usarlos como / sbin / shutdown cuando realmente lo necesito .
fuente
shutdown
en un sistema crítico que no tenga tu hack.El archivo Sudoers permite un nivel de granularidad mucho más fino que solo * 'puede usar sudo' *, en particular puede usar alias de comando para crear listas blancas de grupos de comandos a los que un usuario o grupo en particular está restringido. He trabajado con servidores remotos que estaban restringidos al acceso ssh y permitían sudo sin contraseña (requerimos claves ssh protegidas con contraseña). Hay algunas buenas razones para hacerlo, pero tiene peligros, por lo que utilizamos alias de comando para permitir el acceso sin restricciones a las cosas que tienen que hacer (reiniciar servidores, etc.) sin otorgarles privilegios por lo que no hicieron.
También hay una sintaxis para decir 'no se puede ejecutar este comando' . Se puede evitar, por lo que no se debe usar como una medida de seguridad real, pero funcionaría para el escenario que describió.
Man Sudoers tiene algunos buenos ejemplos sobre cómo configurar todo esto.
Por supuesto, esto requiere usar sudo, pero eso debería ser evidente.
fuente
Es posible que haya sido víctima de una nueva estupidez de Ubuntu.
Ubuntu solía tener el
shutdown
comando normal y clásico que requiere un argumento de tiempo obligatorio.Esto es lo que sucede en Ubuntu 12 si escribo
shutdown
, incluso como usuario habitual:Entonces
Ahora, aquí está Ubuntu 16.10. No soy root
Sin argumentos, programa un apagado para 60 segundos más tarde, e incluso si no es root, solo una cuenta hecha con privilegios de administrador.
La culpa canónica.
fuente
/sbin/shutdown
se proporciona porsystemd-sysv
paquete de manera predeterminada, por lo que no es estupidez de Ubuntu, essystemd
estupidez, y no proviene de Ubuntu, sino de Debian al menos, que, a su vez, parece tomar todo elsystemd
movimiento de Red Hat. Al culpar, culpe a la entidad correcta, no solo a la que no le gusta.Para el apagado hay molly-guard. Solo necesita instalarlo y cuando intenta cerrar a través de ssh, le pide que escriba el nombre de host.
Para eliminar archivos hay soluciones como libtrash, que emula una papelera a través de una
LD_PRELOAD
biblioteca.Y puede probar qué archivos está cambiando / eliminando / ... con el programa quizás . Eso es genial cuando se prueba algo.
fuente
maybe
parece estar roto por el diseño: tropezar algunas llamadas al sistema con no-ops bloqueará cualquier programa no trivial que se base en estas llamadas al sistema para tener éxito.Intente esto: cuando esté en un shell remoto, cada vez que esté a punto de escribir la tecla "retorno", pare durante 5 segundos, con el dedo sobre la tecla "retorno", y vuelva a leer el comando que está a punto de enviar. ¿Está bien? ¿Estás seguro?
Esto parece duro, pero, por otro lado, no deberíamos pasar mucho tiempo en proyectiles remotos. Deberíamos encontrar todas las formas de automatizar nuestro trabajo de mantenimiento para que raramente, si alguna vez, necesitamos iniciar sesión en un servidor remoto.
fuente
shutdown
, me detuve durante 5 segundos, volví a leer el comando (¡en voz alta!) Y estoy seguro de que era correcto. Luego presione enter y el comando se acaba de ejecutar. Así que eso no deshabilitó los comandos de miedo, me temo. Intentaré con esta cosa que pasa el dedo, tal vez la distancia era demasiado pequeña / grande.