¿Cómo haces evidente que estás en un sistema de producción?

135

Algunos de nosotros en mi empresa tenemos acceso root en servidores de producción. Estamos buscando una buena manera de dejarlo muy claro cuando hayamos ingresado.

Algunas ideas que hemos tenido son:

  • Indicador rojo brillante
  • Responde un acertijo antes de obtener un caparazón
  • Escriba una palabra al azar antes de obtener un shell

¿Cuáles son algunas técnicas que ustedes usan para diferenciar los sistemas de producción?

Sionide21
fuente
11
¿Hay alguna forma de enseñarle a la gente a evitar pasar a los sistemas de producción? Si tiene todo registrado en Puppet, por ejemplo, solo necesitaría iniciar sesión en los sistemas de producción para solucionar problemas.
Alex Holst
37
¿Permites acceso root ssh en tus sistemas de producción ???? !!!!!
symcbean
77
@symcbean: eso no es lo que dijo Sionide. Podría haber querido decir después de SSH en su cuenta de usuario.
Zan Lynx
3
¿Esta pregunta se está convirtiendo en un candidato para la wiki comunitaria?
MadHatter
15
Puede dejar muy claro que es un sistema de producción deshabilitando SSH. No puede ser más claro que eso.
Franci Penov

Respuestas:

137

El indicador rojo es una buena idea, que también uso.

Otro truco es colocar una gran advertencia de arte ASCII en el /etc/motdarchivo.
Tener algo como esto te saluda cuando inicias sesión debería llamar tu atención:

 _______ _ _ _____ _____ _____ _____            
| __ __ | El | El | | _ _ | / ____ | | _ _ | / ____ | / \    
   El | El | El | | __ | El | El | El | El | (___ | | | (___ / \   
   El | El | El | __ | El | El | \ ___ \ | El | \ ___ \ / / \ \  
   El | El | El | El | El | | _ | | _ ____) | _ | | _ ____) | / ____ \
   | _ | | _ | | _ | _____ | _____ / | _____ | _____ / / _ / \ _ \


 _____ _____ ____ _____ _ _ _____ _______ _____ ____ _ _ 
El | __ \ | __ \ / __ \ | __ \ | El | El | | / ____ | __ __ | _ _ / __ \ | \ | El |
El | | __) | | __) | El | El | El | El | El | El | El | El | El | El | El | El | El | || El | El | El | \ | El |
El | ___ / | _ / | El | El | El | El | El | El | El | El | El | El | El | El | El | || El | El | El | . `|
El | El | El | El | \ \ | | __ | El | | __ | El | | __ | El | | ____ | El | _ | || | __ | El | | \ |
| _ | | _ | \ _ \\ ____ / | _____ / \ ____ / \ _____ | | _ | | _____ \ ____ / | _ | \ _ |


 __ __ _____ _ _ _____ _ _ ______ 
El | \ / | / \ / ____ | El | El | | _ _ | \ | El | ____ |
El | \ / | / \ | El | El | | __ | El | El | El | El | \ | El | | __   
El | | \ / | El | / / \ \ | El | El | __ | El | El | El | . `| __ |  
El | El | El | | / ____ \ | ____ | El | El | | _ | | _ | | \ | | ____
| _ | | _ / _ / \ _ \ _____ | _ | | _ | _____ | _ | \ _ | ______ |

Puede generar una advertencia de este tipo en este sitio web o puede usar el figlet comando.

figlet

Como lo sugirió Nicholas Smith en los comentarios, puedes darle vida a algunos dragones u otros animales usando el cowsaycomando.

dragon cowsay

En lugar de usar el archivo / etc / motd, también puede llamar cowsayo figleten el .profilearchivo.

Kenny Rasschaert
fuente
3
Ooh me gusta eso!
Sionide21
13
Si escribiste algún comando, ya no lo verás.
Nils
3
Es cierto, ahí es donde el indicador rojo resulta útil.
Kenny Rasschaert
41
En los servidores de Windows, utilizo un color de escritorio rosa brillante y barras de título / esquema de color amarillo brillante para que sea realmente obvio. Esta es nuestra versión de un símbolo del sistema de color
Mark Henderson
8
Me gustaría agregar dragones ASCII a la mezcla.
Nicholas Smith
80

No es exactamente lo mismo, pero este sitio web recomienda que sus desarrolladores usen un sombrero rosa cuando hagan cambios en los sistemas de producción. Probablemente podría tener una regla similar para meterse en ellos.

desarrollador con un sombrero rosa

Aric TenEyck
fuente
1
¡Jaja! +1 porque LOL'd. Pero en serio, la gente puede buscar sus anteojos faltantes mientras los usa, dudo que un sombrero sirva como un "recordatorio constante". Además, no hace nada para ayudarlo a recordar qué ventana es cuál.
Felix Dombek
77
Sí, tendrías que cambiar tu proceso para ser: 1) Declarar un deseo de editar la producción. 2) Saca el sombrero y cierra todas las demás ventanas. 3) Hacer cosas de producción mientras todos están mirando. 4) Salga de la sesión y quítese el sombrero.
Aric Teneyck
1
"2) Salga del sombrero y cierre todas las demás ventanas" Eso realmente no funcionará en mi empresa, ya que ese es el paso 2 de todos nuestros SOP. El paso 1 es, por supuesto, "encender las luces", porque, con las ventanas cerradas, puede oscurecer bastante en esta oficina.
Parthian Shot
50

El más grande que he usado es un esquema de nomenclatura discreto donde los sistemas prod se nombran obviamente diferentes a las instancias de prueba / desarrollo. Esto hace que el estilo de "Nombre de usuario @ Nombre de host:" sea visiblemente diferente. Y por obvio quiero decir algo más que palabras diferentes, formatos diferentes también:

ejemplo: PRD-WEB001 vs DEVEL-BOB-WEB001

Esto tiene varias cosas a su favor:

  • El bloqueo adicional de hipenatación lo convierte en un conjunto de tres en lugar de un conjunto de dos.
  • El primero del conjunto tiene una longitud diferente.
  • La longitud total de los nombres es marcadamente diferente, lo que hace que el espaciado de la línea de comandos sea diferente entre sí y con otro texto en la ventana.

Y lo mejor de todo, no requiere configuraciones especiales de terminal para la producción solo para evitar errores de Oops.

En mi experiencia, quieres algo que sea un recordatorio constante de dónde estás. Los métodos de inicio de sesión como acertijos son válidos durante unos 10 segundos, hasta que olvide qué ventana es cuál. Todo lo que se necesita es hacer un lsdirectorio incorrecto para desplazar el ominoso banner de inicio de sesión fuera de la vista, enterrar la ventana del terminal debajo de una ventana del navegador mientras buscas en Google, volver a presionar la pestaña alternativa a la ventana equivocada y se produce el caos. Es mejor tener alguna señal visual constante como un símbolo del sistema significativamente diferente.

sysadmin1138
fuente
Eso funciona muy bien para los sistemas básicos, pero tan pronto como cambias un dev- * a prod- * los desarrolladores gemir y gemir ya que la mitad de sus enlaces dejan de funcionar (no importa cuántas veces lo hayas hecho antes), y a veces el el sistema en sí cojea a medio trabajo hasta que arregle todas las numerosas referencias al nombre anterior en los archivos de configuración. Especialmente con el software propietario instalado, y los alias DNS solo ayudan mucho. Peor aún, es fácil olvidar el aviso por completo al cambiar de ventana.
SilverbackNet
Los desarrolladores deben crear configuraciones que funcionen en dev / test / staging / production (eso es lo que hago, pero es otra historia). Para un 'aviso rojo' que funcione para bash (más difícil de lo que parece), vea mi respuesta en serverfault.com/a/479718/79266
RichVel
39

Una cosa que debe tener en cuenta es que esto debe ser un recordatorio persistente, no solo un indicador en el momento del inicio de sesión. Muy a menudo, alguien tendrá varios shells ejecutándose al mismo tiempo en diferentes pestañas y se moverá entre ellos. Algunos serán dev, algunos de producción. Entonces, cuando está ejecutando un comando, debe tener un indicador en ese punto. Por lo tanto, tener un mensaje especial es el mejor método, en mi experiencia, con una barra de título / pestaña modificada que es un buen complemento para encontrar fácilmente la ventana / pestaña correcta.

Por lo tanto, recomendaría tener una solicitud de color (el rojo es la opción obvia) y todas las mayúsculas para el nombre de host, con un comportamiento similar para el usuario (privilegiado frente a no privilegiado) como su solicitud. Algunos ejemplos:

ejemplo de indicaciones de colores

Por lo general algo como

set prompt =  "%{\033[1;44m%}`whoami`@`hostname -s`#%{\033[0m%} "` 

en su archivo de inicio de shell. Este es para el azul. Reemplace 44con 41abeto rojo y 42verde. Otros colores y patrones salvajes disponibles también .

Tim
fuente
Para obtener un 'indicador rojo' de trabajo para bash (más difícil de lo que parece), vea mi respuesta en serverfault.com/a/479718/79266 - también muestra git branch, directorio actual truncado, etc.
RichVel
14

Estas son mis sugerencias:

1) Asegúrese de que la mayoría de los comandos (rm, chown, chmod, /etc/init.d/*) en el entorno de producción requieren acceso a sudo

2) Use PS1 / PS2 para indicar que el usuario está en un servidor Prod

bash-3.2$  export PS1="[\u@\h \W]\$ "

Esto mostrará el símbolo del sistema como

[sridhar@prodappserver901 conf]$

3) Si usa clientes Putty / SSH, siempre puede configurar un color / perfil de fondo único para que los servidores de producción se destaquen.

Sridhar Jayakumar
fuente
# 1 es una idea interesante, pero poco práctico debido a las secuencias de comandos se ejecutan como usuarios demonio que tenga que utilizar rm, chmod, etc.
Zan Lynx
13

Solo considere que su segunda y tercera ideas ayudan durante la conexión inicial, pero no tienen valor cuando tiene múltiples terminales abiertas y se mueven de una a otra. La idea de sysadmin1138 de usar nombres es buena cuando se puede aplicar, pero hay muchos casos en los que no se puede aplicar.

Lo único que he encontrado que realmente vale la pena es un aviso en color. Me gusta el verde para desarrollo / pruebas, rojo para producción y azul para máquinas en la DMZ. De esa manera, incluso si tengo dos máquinas con el mismo nombre (en redes diferentes), como cuando preparo una máquina de reemplazo, aún puedo decir fácilmente en cuál estoy.

John Gardeniers
fuente
11

El símbolo del sistema rojo / especial es bueno. Otra cosa podría ser un cierre de sesión automático más rápido en esas máquinas que usan la variable TMOUT. Si ha abierto muchas ventanas, las de producción desaparecerán más rápido.

Esto debería conducir a un comportamiento diferente:

  1. Desarrollar
  2. Prueba
  3. Realice sus cambios en un servidor provisional
  4. Solo entonces realice una carrera rápida hacia la producción e implemente allí (exactamente como lo hizo en el servidor de ensayo)
Nils
fuente
9

Trabajar en una máquina de producción con una cuenta raíz simple nunca es una buena idea.

Tener una cuenta con permisos completos de sudo. No permite guardar la sesión de sudo. Prohibir sudo su. Use una contraseña separada (no la que tiene para su máquina de desarrollo). Probablemente modifique sudo para notificar sobre la identidad de producción del shell antes de ejecutar el comando (a través de un alias).

Cometerá errores accidentales bastante difíciles. Y el indicador rojo nunca está de más.

Mihails Strasuns
fuente
y por "sudo su" te refieres a "sudo -i" o al menos "sudo su -", ¿verdad?
Sparr
Whoa! es Sparr! Pequeño mundo :)
Sionide21
1
Es imposible evitar que las personas tengan un shell de raíz. ( sudo bash) Puede obtener un shell raíz desde cualquier configuración de 'lista negra'. (Si tiene cuidado, puede detenerlo con una configuración de la lista blanca, pero generalmente no está garantizado)
User606723
1
No se supone que impida el acceso previsto al shell raíz, solo algunas formas comunes en que las personas están tan acostumbradas para que puedan hacerlo inconscientemente, sin prestar atención.
Mihails Strasuns
8

Fui con la idea del aviso rojo, y me pareció bastante tedioso encontrar un código de trabajo .bashrc.

Así que aquí está mi versión, lista para ser incluida en .bashrc: https://github.com/RichVel/nicer-bash-prompt . Está completamente impulsada por nombre de host, por lo que el tiempo que usted tiene una disposición apropiada para los nombres de host de producción (por ejemplo xyprod01, xyprod02, etc) va a funcionar bien, y se puede utilizar el mismo .bashrcen todos los ambientes.

Se parece a esto:

captura de pantalla del indicador rojo

Esto crea un indicador de bash más agradable, incluido el indicador rojo en los hosts de producción; también le muestra la rama git actual y los últimos 2 directorios en $ PWD. Se debe tener cuidado de no estropear la pantalla cuando se hace Ctrl / R (búsqueda inversa) en bash.

También incluye una función opcional para sincronizar su historial de bash en todas las ventanas de terminal, en la línea de esta respuesta . Esto es bueno, pero no todos lo quieren, por lo que está deshabilitado de forma predeterminada.

RichVel
fuente
5

Aunque no sé cómo es su configuración de TI, una solución que podría ser efectiva sería tener una sala especial a la que tenga que ir a SSH en los servidores de producción como root. Si tiene un centro de datos, esta podría ser la sala de servidores en sí, pero tener una ubicación física separada desde la que no se realiza el trabajo 'normal' serviría como un recordatorio constante de que está accediendo a las máquinas de producción.

Kyle Cronin
fuente
2
Si bien eso sin duda sería efectivo, para la mayoría de las situaciones también sería extremadamente contraproducente.
John Gardeniers
Estoy de acuerdo con John, pero esto es ciertamente algo en lo que pensar.
user606723
@JohnGardeniers: ¿contraproducente? ¿Quieres decir que dañaría la productividad?
LarsH
@LarsH, tener que ir innecesariamente a diferentes salas para realizar diferentes partes de su trabajo sin duda perjudica la productividad. Toda su red debe ser manejable desde una sola ubicación.
John Gardeniers
@JohnGardeniers: entendido. Cuando inicialmente dijo "contraproducente", pensé que quería decir que su efecto era contrario al propósito establecido, es decir, servir como un recordatorio constante de que está accediendo a las máquinas de producción.
LarsH
4

Solo un cambio en las sugerencias anteriores. Uso CDE como mi escritorio de Unix y todos los sistemas de producción a los que accedo a través de un menú en .dt / dtwmrc. En todos los sistemas de desarrollo y UAT mantengo mi esquema de color normal, pero en los sistemas de producción configuro el terminal para que tenga un fondo rojo. No me gusta el aspecto, pero ese es el punto.

eta - erró Karol sugiriendo básicamente lo mismo

Wudang
fuente
4

Cuando inicio sesión en una máquina de producción, recibo un párrafo que me advierte que es una máquina de producción, así como una breve lista de pautas. Hay un número al que puedo llamar para obtener asistencia de UNIX si no creo que pueda realizar mi tarea solo de forma segura, un recordatorio de que volar una máquina de producción me puede costar mi trabajo y un recordatorio de que todo lo que hago está registrado.

editar: Trabajo en la industria del transporte.

Albahaca
fuente
Ay. Si bien puedo entender la necesidad de esto, me alegro de no trabajar en ese tipo de entorno.
LarsH
1
Me alegro de hacerlo, trabajo en el transporte, y estos sistemas no solo cuestan dinero cuando se caen, sino que también cuestan vidas.
Basil
¡Me alegra que seas tan cuidadoso también!
LarsH
3

En PuTTY, puede cambiar el título de la ventana a otro que no sea el predeterminado para una sesión guardada específica. Esto siempre permanece en la ventana sin importar lo que hagas dentro de la ventana. Esto también aparece en la barra de tareas.

Expanda Ventana, haga clic en Comportamiento. Ingrese algo en el título de la ventana como:

  * * * * * * * * * * * * PRODUCTION  * * * * * * * * * * * * PRODUCTION  * * * * * * * * * * * *
sjbotha
fuente
3

Respuesta simple? Cambia el color de tu shell a rojo en la configuración del shell. Será obvio y simple de configurar. No solo eso, sino que, a diferencia de los encabezados del servidor, no desaparecerá después de escribir algunos comandos.

donatJ
fuente
3

Esto es lo que hice en mi Mac. Para cada servidor, agrego una entrada en mi archivo ~ / .ssh / config, p. Ej.

Host app13
    HostName server.example.com
    User tom
    PermitLocalCommand yes
    LocalCommand osascript %d/bin/change_terminal_colours.scpt 12 35 35

Este Applescript se activa una vez que se establece la sesión SSH. Establece el color de fondo del terminal a los valores RGB proporcionados (o vuelve al valor predeterminado si no se proporcionan valores de color). La parte potencialmente complicada es interceptar el final de la sesión SSH para restablecer los colores a los valores predeterminados. Para eso, creé el siguiente script de shell como ~ / bin / ssh para anular el comando ssh predeterminado. Esto esencialmente intercepta y envuelve cualquier llamada al comando SSH. Intenté usar alias y funciones, pero esta solución funcionó mejor:

#!/bin/bash
/usr/bin/ssh $@
osascript ~/bin/change_terminal_colours.scpt

Aquí está la fuente del script change_terminal_colours.scpt . Ponga esto en su directorio ~ / bin también:

on run argv
    tell application "Terminal"
        # NOTE: Color values range from 0 to 65535.
        if (count of argv) > 0 then
            set backgroundColor to {(item 1 of argv) * 256, (item 2 of argv) * 256, (item 3 of argv) * 256}
        else
            set backgroundColor to background color of default settings
        end if

        try
            set background color of (selected tab of front window) to backgroundColor
        end try
    end tell
end run

Escribí esta solución hace una semana y la he estado usando desde entonces. Espero que otros lo encuentren valioso. Creo que funciona mejor que cualquiera de las soluciones que encontré en Google.

TomWardrop
fuente
3

Mi grupo usa visionapp Remote Desktop (edición de 2017: parece que el producto fue renombrado pero creo que es el mismo) tanto para RDP en máquinas Windows como para SSH en Linux. Nuestras conexiones se agrupan en carpetas por nivel y se les asigna un color de pestaña.

Entonces, cada vez que abrimos una conexión de producción, ¡bam! - Tenemos algo de rojo brillante en nuestra cara:

ingrese la descripción de la imagen aquí

Definitivamente es una inversión que vale la pena si eres una gran tienda de Windows y confías mucho en RDP. Apuesto a que hay otras herramientas excelentes si todo lo que necesitas es SSH.

Nick Chammas
fuente
2

Además de un aviso único (que parece ser la solución más confiable), si está iniciando sesión desde la misma estación de trabajo, puede usar diferentes perfiles para sus sesiones SSH.

Por ejemplo, tengo fondos rojos para sistemas de producción, verdes para desarrollo, azules para infraestructura (enrutadores, etc.) y blancos para estaciones de trabajo locales.

Si usa GNOME, hay una manera fácil de iniciar una conexión SSH con su perfil deseado:

gnome-terminal --window-with-profile=production -e 'ssh [email protected]'

La principal desventaja: es del lado del cliente, por lo que un aviso especial sigue siendo su mejor opción si accede a servidores desde diferentes ubicaciones.

Karol J. Piczak
fuente
2

Otra forma de dejar en claro que está en un sistema de producción es configurar la función TMOUT (cierre automático) en el sistema de producción.

Peter K.
fuente
1
¿Cómo lo deja claro? También es potencialmente muy peligroso, ya que los comandos o procesos pueden estar ejecutándose y de repente se cancelarán al cerrar la sesión.
John Gardeniers
3
Acabo de probar TMOUT y parece que si se está ejecutando un comando de larga ejecución, no termina la sesión. Solo termina cuando está sentado en el símbolo del sistema. Nils también sugirió esto y tiene sentido para mí.
sjbotha
1
Eso es lo realmente bueno de TMOUT. Utilizamos autolog o incluso killerd antes de descubrir TMOUT. autolog y killerd NO son tan agradables. killerd también tiene errores y tiende a bloquear una CPU completa ...
Nils
2

Debido a los vastos requisitos reglamentarios mientras se trabaja en una industria en particular, aquí las actividades de todos están registradas para cualquier disputa futura. Debido a eso, el acceso también está restringido y tiene que saltar a través de algunos "menús" que le permiten acceder a una máquina como uno de los pocos usuarios de confianza. Al configurar este sistema, la persona debe elegir conscientemente el entorno de PRODUCCIÓN o QA y luego elegir el host al que desea acceder de la lista. Esto también tiene un período de tiempo de espera para que no se encuentre con la situación de iniciar sesión en un host de productos y olvidarse del entorno en el que se encuentra al día siguiente.

Alexandra
fuente
2

Yo uso los cambios rápidos como otros aquí. Es rápido y desagradable, pero funciona bien para mis propósitos. Le dará rojo como usuario normal en un sistema de producción y mayúscula roja como raíz en un sistema de producción.

Podría escribirse en menos líneas, pero lo hago así para poder ajustar los otros 2 casos (no root-no prod) si lo deseo.

Trabajamos asumiendo que un servidor de producción no usa DHCP, pero puede usar cualquier otro método para determinar si es un sistema de producción. Lo que funcione para ti.

productionSrv=1
grep -qi bootproto=dhcp /etc/sysconfig/network-scripts/ifcfg-*
if [ "$?" -eq 0 ]; then
    productionSrv=0
fi
hostName=`hostname`
userName=`whoami`
if [ $userName == "root" ]
then
    if [ "$productionSrv" == 1 ]
    then
        hostName=`echo $hostName | tr [:lower:] [:upper:]`
        PS1='[\e[0;31m]\u[\e[0m]@[\e[0;31m]$hostName[\e[0m][$?][\e[0;31m][\W][\e[0m][\e[0;31m]\$[\e[0m]: '
    else
        PS1='[\e[0;31m]\u[\e[0m]@[\e[0;35m]$hostName[\e[0m][$?][\e[0;31m][\W][\e[0m][\e[0;31m]\$[\e[0m]: '
    fi
    PATH=$PATH:/sbin/
else
    if [ "$productionSrv" == 1 ]
    then
        PS1='[\e[0;32m]\u[\e[0m]@[\e[0;31m]$hostName[\e[0m][$?][\e[0;31m][\W][\e[0m][\e[0;32m]\$[\e[0m]: '
    else
        PS1='[\e[0;32m]\u[\e[0m]@[\e[0;35m]$hostName[\e[0m][$?][\e[0;31m][\W][\e[0m][\e[0;32m]\$[\e[0m]: '
    fi
fi

Sirex
fuente
Si bien el script es interesante, la suposición de IP estáticas solo en sistemas de producción no es común. En la mayoría de los casos, todos los servidores tendrán IP estáticas, tanto de desarrollo como de producción.
Martijn Heemels
1
caballos para cursos de verdad. nuestros sistemas de desarrollo usan reservas dhcp. Puede usar cualquier sistema que funcione para usted, como comparar el nombre de host, subred, vlan, lo que sea.
Sirex
@Sirex, lo contrario también es posible. Por ejemplo, los VPS EC2 de Amazon utilizan arrendamientos DHCP estáticos en servidores de producción y se envían IP públicas. La instancia en sí no sabe directamente qué IP pública se está ejecutando, al menos no en el nivel de interfaz de red.
Matthew Scharley
1
Sip. Siempre puede tener un paquete rpm de rol que cree un archivo / etc / PRODUCTION y lo pruebe. Lo que te venga bien.
Sirex
1

Tener una contraseña de root diferente (quizás más larga) en las máquinas de producción.

Puede hacer un sudo especial (o contenedor de sudo), de modo que se envíe un mensaje especial para las máquinas de producción.

mdpc
fuente
.. ¿Una contraseña de root diferente en máquinas de producción? ¿Por qué no pensé en eso?
user606723
Además, sudo ya tiene muchas opciones de configuración. Me sorprendería si aún no puedes hacer esto. Un sudo personalizado es una idea terrible porque no se probará lo suficiente como para obtener el bit suid.
user606723
1

Aquí, tenemos configuraciones de masilla predeterminadas para hacer que el color de primer plano de toda la pantalla sea de color rosa brillante.

  • Producto: rosa brillante.
  • Regresión: verde pálido
  • Modelo: azul pálido
  • Dev: normal

Funciona bastante bien, pero me gustan algunas de las otras ideas aquí.

  • Pro: a menos que algo no use el color de primer plano ..., CADA pantalla de producto es de color rosa brillante.
  • Con: Obviamente, si pasa por algo diferente a la configuración de masilla predeterminada, esto no hace nada.
usuario606723
fuente
1

en el .bashrc / .bash_profile

echo " THIS IS THE PRODUCTION SYSTEM. BE RESPONSIBLE.. " .. 
Jay D
fuente