Como você torna óbvio que você está em um sistema de produção?


135

Alguns de nós da minha empresa têm acesso root nos servidores de produção. Estamos procurando uma boa maneira de deixar isso extremamente claro quando entrarmos no ssh.

Algumas idéias que tivemos foram:

  • Prompt vermelho brilhante
  • Responda a um enigma antes de obter uma concha
  • Digite uma palavra aleatória antes de obter um shell

Quais são algumas das técnicas que vocês usam para diferenciar os sistemas de produção?


11
Existe alguma maneira de ensinar as pessoas a evitar ataques aos sistemas de produção? Se você tiver verificado tudo no Puppet, por exemplo, você só precisará fazer login nos sistemas de produção para solucionar problemas.
Alex Holst

37
Você permite acesso root ssh em seus sistemas de produção ???? !!!!!
19411 symcbean

7
@symcbean: não foi isso que Sionide disse. Ele poderia ter pensado depois do SSH na sua conta de usuário.
Zan Lynx

3
Esta pergunta está se tornando uma candidata ao wiki da comunidade?
MadHatter

15
Você pode deixar extremamente claro que é um sistema de produção desativando o SSH. Não pode ser mais claro do que isso.
Franci Penov

Respostas:


137

O prompt vermelho é uma boa ideia, que eu também uso.

Outro truque é colocar um grande aviso de arte ASCII no /etc/motdarquivo.
Ter algo parecido com isto ao cumprimentá-lo ao fazer login deve chamar sua atenção:

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


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


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

Você pode gerar um aviso nesse site ou usar o figlet comando

figlet

Como Nicholas Smith sugeriu nos comentários, você pode apimentar as coisas com alguns dragões ou outros animais usando o cowsaycomando

dragão cowsay

Em vez de usar o arquivo / etc / motd, você também pode chamar cowsayou figletno .profilearquivo.


3
Ooh eu gosto disso!
Sionide21

13
Se você digitou algum comando, não o verá mais.
Nils

3
É verdade que é aí que o prompt vermelho é útil.
Kenny Rasschaert 19/10/11

41
Nos servidores Windows, eu uso uma cor de mesa rosa brilhante e barras de título / esquema de cores amarelos brilhantes, para que fique realmente óbvio. Esta é a nossa versão de um prompt de comandos colorido
Mark Henderson

8
Eu gostaria de adicionar dragões ASCII na mistura.
Nicholas Smith

80

Não é exatamente a mesma coisa, mas este site recomenda que seus desenvolvedores usem um sombrero rosa ao fazer alterações nos sistemas de produção. Você provavelmente poderia ter uma regra semelhante para jogar neles.

desenvolvedor vestindo um sombrero rosa


1
Haha! +1 porque eu ri. Mas, falando sério, as pessoas podem procurar seus óculos perdidos enquanto os usam, duvido que um chapéu sirva como um "lembrete constante". Além disso, isso não ajuda a lembrar qual janela é qual.
Felix Dombek

7
Sim, você teria que mudar seu processo para: 1) Declarar o desejo de editar a produção. 2) Pegue o sombrero e feche todas as outras janelas. 3) Faça coisas de produção enquanto todo mundo está assistindo. 4) Saia da sessão e remova o sombrero.
Aric TenEyck

1
"2) Pegue o sombrero e feche todas as outras janelas" Isso realmente não funcionará na minha empresa, pois é o passo 2 de todos os nossos POPs. O primeiro passo é "acender as luzes", porque, com as janelas fechadas, pode ficar bastante escuro neste escritório.
Parthian Shot

50

O maior que usei é um esquema de nomeação discreto, em que os sistemas prod são nomeados obviamente diferentes das instâncias test / dev. Isso torna o prompt de estilo "Nome de usuário @ Nome do host:" visivelmente diferente. E por óbvio quero dizer mais do que apenas palavras diferentes, formatos diferentes também:

exemplo: PRD-WEB001 vs DEVEL-BOB-WEB001

Isso tem várias coisas a seu favor:

  • O bloco extra hypenated torna um conjunto de três em vez de um conjunto de dois.
  • O primeiro do conjunto tem um comprimento diferente.
  • O comprimento total dos nomes é marcadamente diferente, o que torna o espaçamento da linha de comando diferente em relação ao outro e a outro texto na janela.

E o melhor de tudo, não requer configurações de terminal especiais para produção, apenas para evitar erros de Ops.

Na minha experiência, você quer algo que seja um lembrete constante de onde você está. Métodos de login como enigmas são bons por cerca de 10 segundos, até você esquecer qual janela é qual. Tudo o que precisamos é fazer um lsdiretório errado para rolar o sinistro banner de login fora de vista, enterrar a janela do terminal sob uma janela do navegador enquanto pesquisava algo, alternar a tecla Alt para a janela errada e causar o caos. É melhor ter alguma sugestão visual constante, como um prompt de comando significativamente diferente.


Isso funciona muito bem para sistemas básicos, mas assim que você altera um dev- * para produzir- *, os devs gemem e gemem quando metade dos links para de funcionar (não importa quantas vezes você tenha feito isso antes), e às vezes o o sistema em si não funciona até que você conserte todas as numerosas referências ao nome antigo nos arquivos de configuração. Especialmente com o software proprietário instalado, e os aliases de DNS ajudam muito. Pior ainda, é fácil esquecer completamente o prompt ao alternar entre janelas.
SilverbackNet

Os desenvolvedores precisam criar configurações que funcionem no desenvolvimento / teste / preparação / produção (é o que eu faço, mas é outra história). Para um 'prompt vermelho' funcional para o bash (mais difícil do que parece), consulte minha resposta em serverfault.com/a/479718/79266
RichVel

39

Uma coisa que você precisa ter em mente é que isso precisa ser um lembrete persistente, não apenas um indicador no momento do login. Muitas vezes, alguém terá várias conchas rodando ao mesmo tempo em abas diferentes e se moverá entre elas. Alguns serão dev, alguma produção. Portanto, quando você estiver executando um comando, precisará ter um indicador nesse ponto. Portanto, ter um prompt especial é o melhor método, na minha experiência, com uma barra de título / guia modificada, sendo um ótimo complemento para encontrar a janela / guia direita facilmente.

Portanto, eu recomendaria ter um prompt colorido (vermelho sendo a escolha óbvia) e todas as letras maiúsculas para o nome do host, com comportamento semelhante para o usuário (privilegiado versus não privilegiado) como seu prompt. Alguns exemplos:

exemplo de prompts coloridos

Geralmente algo como

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

no seu arquivo de inicialização do shell. Este é para o azul. Substitua 44por 41vermelho fir e 42por verde. Outras cores e padrões selvagens disponíveis também .


Para um 'prompt vermelho' funcional para o bash (mais difícil do que parece), veja minha resposta em serverfault.com/a/479718/79266 - também mostra git branch, diretório atual truncado, etc.
RichVel

14

Estas são as minhas sugestões:

1) Verifique se a maioria dos comandos (rm, chown, chmod, /etc/init.d/*) no ambiente de produção exige acesso ao sudo

2) Use PS1 / PS2 para indicar que o usuário está em um servidor Prod

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

Isso mostrará o prompt de comando como

[sridhar@prodappserver901 conf]$

3) Se estiver usando clientes Putty / SSH, você sempre poderá configurar uma cor / perfil de fundo exclusivo para destacar os servidores de produção.


# 1 é uma idéia interessante, mas impraticável porque os scripts em execução como usuários daemon pode precisar usar rm, chmod, etc.
Zan Lynx

13

Apenas considere que suas segunda e terceira idéias ajudam durante a conexão inicial, mas não têm valor quando você tem vários terminais abertos e se deslocam de um para outro. A idéia de sysadmin1138 de usar a nomeação é boa quando pode ser aplicada, mas há muitos casos em que não pode ser.

A única coisa que achei realmente útil é um prompt colorido. Eu gosto de verde para desenvolvimento / teste, vermelho para produção e azul para máquinas na DMZ. Dessa forma, mesmo se eu tiver duas máquinas com o mesmo nome (em redes diferentes), como ao preparar uma máquina de substituição, ainda assim posso dizer com facilidade em qual delas estou.


11

O prompt de comando vermelho / especial é bom. Outra coisa pode ser um logoff automático mais rápido nessas máquinas usando a variável TMOUT. Se você abriu muitas janelas, as de produção desaparecem mais rapidamente.

Isso deve levar a um comportamento diferente:

  1. desenvolve
  2. Teste
  3. Faça suas alterações em um servidor intermediário
  4. Somente então faça um rápido rastreio para produção e implantação lá (exatamente como você fez no servidor intermediário)

9

Trabalhar em uma máquina de produção com uma conta root simples nunca é uma boa ideia.

Tenha uma conta com permissões completas de sudo. Não permite salvar a sessão sudo. Proibir sudo su. Use uma senha separada para ela (não a que você possui para sua máquina de desenvolvimento). Provavelmente, ajuste o sudo para notificar sobre a identidade de produção do shell antes de executar o comando (via alias).

Cometerá erros acidentais bastante difíceis. E alerta vermelho nunca dói.


e por "sudo su" você quer dizer "sudo -i" ou pelo menos "sudo su -", certo?
Sparr

Uau! é Sparr! O mundo pequeno :))
Sionide21

1
É impossível impedir que as pessoas tenham um shell raiz. ( sudo bash) Você pode obter um shell raiz em qualquer configuração de 'lista negra'. (Se o seu cuidado, você pode pará-lo com uma configuração de whitelist, mas normalmente não é garantido.)
user606723

1
Não se deve impedir o acesso pretendido ao shell raiz - apenas algumas maneiras comuns pelas quais as pessoas estão acostumadas a fazê-lo inconscientemente, sem prestar atenção.
Mihails Strasuns

8

Eu segui a ideia do prompt vermelho e achei bastante tedioso encontrar um código de trabalho .bashrc.

Então, aqui está minha versão, pronta para ser incluída em .bashrc- https://github.com/RichVel/nicer-bash-prompt . É completamente impulsionado por hostname, por isso, enquanto você tem um padrão adequado para nomes de host de produção (por exemplo xyprod01, xyprod02, etc) que vai funcionar bem, e você pode usar a mesma .bashrcem todos os ambientes.

Se parece com isso:

captura de tela do prompt vermelho

Isso cria um prompt melhor do bash, incluindo o prompt vermelho nos hosts de produção - também mostra a ramificação git atual e os últimos 2 diretórios em $ PWD. Tome cuidado para não atrapalhar a exibição do prompt ao fazer Ctrl / R (pesquisa reversa) no bash.

Também inclui um recurso opcional para sincronizar seu histórico do bash em todas as janelas do terminal, seguindo as linhas desta resposta . Isso é legal, mas nem todo mundo quer, então está desativado por padrão.


5

Embora eu não saiba como é a sua configuração de TI, uma solução que pode ser eficaz seria ter uma sala especial para a qual você precisa acessar o SSH nos servidores de produção como raiz. Se você possui um datacenter, pode ser a própria sala do servidor, mas ter um local físico separado do qual o trabalho 'normal' não seja realizado seria um eficaz lembrete constante de que você está acessando máquinas de produção.


2
Embora isso certamente fosse eficaz, para a maioria das situações também seria extremamente contraproducente.
John Gardeniers 20/10

Eu concordo com John, mas isso certamente é algo para se pensar.
user606723

@JohnGardeniers: contraproducente? Você quer dizer que isso prejudicaria a produtividade?
LarsH 20/10

@LarsH, ter que entrar desnecessariamente em salas diferentes para fazer diferentes partes do seu trabalho certamente prejudica a produtividade. Toda a sua rede deve ser gerenciável a partir de um único local.
John Gardeniers 20/10

@ JohnGardeniers: entendido. Quando você disse inicialmente "contraproducente", pensei que você quisesse dizer que o efeito era contrário ao objetivo declarado, ou seja, servir como um lembrete constante de que você está acessando máquinas de produção.
Larsh

4

Apenas um ajuste nas sugestões acima. Uso o CDE como minha área de trabalho unix e todos os sistemas de produção que acesso através de um menu em .dt / dtwmrc. Em todos os sistemas dev e UAT, mantenho meu esquema de cores normal, mas nos sistemas prod defino o terminal para ter um fundo vermelho. Não gosto do visual, mas esse é o ponto.

eta - perdeu Karol sugerindo basicamente a mesma coisa


4

Quando entro em uma máquina de produção, recebo um parágrafo me avisando que é uma máquina de produção, bem como uma pequena lista de diretrizes. Há um número para o qual posso ligar para o suporte ao UNIX, se não acho que posso executar minha tarefa sozinho com segurança, um lembrete de que explodir uma máquina de produção pode me custar meu trabalho e um lembrete de que tudo o que faço é registrado.

editar: Eu trabalho na indústria de transporte.


Ai. Embora eu possa entender a necessidade disso, fico feliz por não trabalhar nesse tipo de ambiente.
Larsh

1
Fico feliz que sim - trabalho no transporte e esses sistemas não custam apenas dinheiro quando caem, custam vidas.
Basil

Estou feliz que você é tão cuidadoso também!
LarsH 20/10

3

No PuTTY, você pode alterar o título da janela para algo diferente do padrão para uma sessão salva específica. Isso sempre permanece na janela, não importa o que você faça dentro da janela. Isso também aparece na barra de tarefas.

Expanda Janela, clique em Comportamento. Digite algo no título da janela, como:

  * * * * * * * * * * * * PRODUCTION  * * * * * * * * * * * * PRODUCTION  * * * * * * * * * * * *

3

Resposta simples? Mude a cor do seu shell para vermelho na configuração do shell. Será absolutamente óbvio e simples de configurar. Não apenas isso, mas diferentemente dos cabeçalhos do servidor, ele não desaparece depois que você digita alguns comandos.


3

Aqui está o que eu fiz no meu Mac. Para cada servidor, adiciono uma entrada no meu arquivo ~ / .ssh / config, por exemplo

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

Este Applescript é acionado assim que a sessão SSH é estabelecida. Ele define a cor de fundo do terminal com os valores RGB fornecidos (ou volta ao padrão se nenhum valor de cor for fornecido). A parte potencialmente complicada é interceptar o final da sessão SSH para definir as cores de volta aos padrões. Para isso, criei o seguinte script de shell como ~ / bin / ssh para substituir o comando ssh padrão. Isso basicamente intercepta e encerra todas as chamadas para o comando SSH. Tentei usar alias e funções, mas esta solução funcionou melhor:

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

Aqui está a fonte do script change_terminal_colours.scpt . Coloque isso no seu diretório ~ / bin também:

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

Eu escrevi essa solução há uma semana e a uso desde então. Espero que outros achem isso valioso. Acho que funciona melhor do que qualquer uma das soluções encontradas pelo Google.


3

Meu grupo usa o Visionapp Remote Desktop (edição de 2017: parece que o produto foi renomeado, mas acho que é o mesmo) para o RDP em máquinas Windows e o SSH para Linux. Nossas conexões são agrupadas em pastas por camada e atribuídas a uma cor de guia.

Portanto, sempre que abrirmos uma conexão de produção - bam! - temos um pouco de vermelho brilhante na nossa cara:

insira a descrição da imagem aqui

Definitivamente, é um investimento que vale a pena se você é uma grande loja do Windows e depende muito do RDP. Aposto que existem outras ótimas ferramentas se tudo que você precisa é SSH.


2

Além de um prompt exclusivo (que parece ser a solução mais confiável), se você estiver efetuando login na mesma estação de trabalho, poderá usar perfis diferentes para suas sessões SSH.

Por exemplo, tenho fundos vermelhos para sistemas de produção, verde para desenvolvimento, azul para infraestrutura (roteadores etc.) e branco para estação de trabalho local.

Se você usa o GNOME, existe uma maneira fácil de iniciar uma conexão SSH com o perfil desejado:

gnome-terminal --window-with-profile=production -e 'ssh root@production.example.com'

A principal desvantagem - é do lado do cliente, portanto, um prompt especial ainda é sua melhor aposta se você estiver acessando servidores de locais diferentes.


2

Outra maneira de deixar claro que você está em um sistema de produção é definir o recurso TMOUT (saída automática) no sistema de produção.


1
Como isso deixa claro? Também é potencialmente muito perigoso, pois comandos ou processos podem estar em execução e de repente serão abortados com o encerramento da sessão.
John Gardeniers

3
Acabei de testar o TMOUT e parece que, se um comando de longa execução estiver sendo executado, ele não encerrará a sessão. Ele só termina quando você está sentado no prompt de comando. Nils também sugeriu isso e faz sentido para mim.
precisa

1
Essa é a coisa realmente legal do TMOUT. Usamos autolog ou mesmo killerd antes de descobrirmos o TMOUT. autolog e killerd NÃO são tão legais. killerd também é buggy e tende a bloquear uma CPU completa ...
Nils

2

Devido aos vastos requisitos regulatórios durante o trabalho em um setor específico, aqui as atividades de todos são registradas com chave para quaisquer disputas futuras. Por isso, o acesso também é restrito e você precisa pular alguns "menus" que permitem acessar uma máquina como um dos poucos usuários confiáveis. Ao configurar esse sistema, a pessoa deve escolher conscientemente o ambiente de PRODUÇÃO ou QA e, em seguida, escolher o host que deseja acessar da lista. Isso também tem um período de tempo limite, para que você não tenha que se conectar a um host de produtos e esquecer o ambiente em que está no dia seguinte.


2

Eu uso as mudanças rápidas como outras aqui. É rápido e desagradável, mas funciona bem para os meus propósitos. Ele fornecerá vermelho como usuário normal em um sistema de produção e maiúsculas vermelhas como raiz em um sistema de produção.

Poderia ser escrito em menos linhas, mas eu faço assim para que eu possa ajustar os outros 2 casos (não root-non prod), se eu quiser.

Trabalhamos no pressuposto de que um servidor de produção não usa DHCP, mas você pode usar qualquer outro método para descobrir se é um sistema prod. Tudo o que funciona para você.

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


Embora o script seja interessante, a suposição de IP estático apenas em sistemas de produção não é comum. Na maioria dos casos, todos os servidores terão IPs estáticos, tanto de desenvolvimento quanto de produção.
Martijn Heemels

1
cavalos para cursos realmente. nossos sistemas de desenvolvimento usam reservas dhcp. Você pode usar qualquer sistema que funcione para você, como comparar o nome do host, sub-rede, vlan, qualquer que seja.
Sirex 21/10

@ Sirex, o oposto também é possível. Por exemplo, os VPS EC2 da Amazon usam concessões DHCP estáticas em servidores de produção e IPs públicos são encaminhados. A instância em si não sabe diretamente qual IP público está sendo executado, pelo menos não no nível da interface de rede.
Matthew Scharley 22/10

1
Sim. Você sempre pode ter apenas um pacote de funções rpm que cria um arquivo / etc / PRODUCTION e faz testes para isso. Faça como quiser.
Sirex 25/10

1

Tenha uma senha root diferente (talvez mais longa) nas máquinas de produção.

Você pode criar um sudo especial (ou empacotador de sudo), de forma que uma mensagem especial seja emitida para as máquinas de produção.


.. Uma senha root diferente em máquinas prod? por que eu não pensei nisso !?
user606723

Além disso, o sudo já possui muitas opções de configuração. Eu ficaria surpreso se você já não puder fazer isso. Um sudo personalizado é uma péssima idéia, pois não seria testado o suficiente para obter o bit suid.
user606723

1

Aqui, temos configurações padrão de massa para tornar a cor de primeiro plano de toda a tela em rosa brilhante.

  • Prod: rosa brilhante.
  • Regressão: verde pálido
  • Modelo: azul pálido
  • Dev: normal

Funciona muito bem, mas eu gosto de algumas das outras idéias aqui.

  • Pro: a menos que algo não use a cor de primeiro plano .., TODAS as telas de prod são rosa brilhante.
  • Con: Obviamente, se você ssh através de algo diferente da configuração padrão da massa, isso não faz nada.

1

no .bashrc / .bash_profile

echo " THIS IS THE PRODUCTION SYSTEM. BE RESPONSIBLE.. " .. 
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.