Come si fa a capire che ci si trova in un sistema di produzione?


135

Alcuni di noi nella mia azienda hanno accesso root sui server di produzione. Stiamo cercando un buon modo per renderlo estremamente chiaro quando abbiamo iniziato.

Alcune idee che abbiamo avuto sono:

  • Prompt rosso brillante
  • Rispondi a un indovinello prima di ottenere un guscio
  • Digitare una parola a caso prima di ottenere una shell

Quali sono alcune tecniche che voi ragazzi usate per differenziare i sistemi di produzione?


11
Esiste un modo per insegnare alle persone a evitare di diffondere nei sistemi di produzione? Se hai controllato tutto in Puppet, ad esempio, dovrai solo accedere ai sistemi di produzione per la risoluzione dei problemi.
Alex Holst,

37
Consenti l'accesso root ssh ai tuoi sistemi di produzione ???? !!!!!
symcbean,

7
@symcbean: non è quello che ha detto Sionide. Avrebbe potuto significare dopo che SSH nel tuo account utente.
Zan Lynx,

3
Questa domanda sta diventando un candidato per il wiki della comunità?
MadHatter,

15
Puoi rendere estremamente chiaro che si tratta di un sistema di produzione disabilitando SSH su di esso. Non può essere più chiaro di così.
Franci Penov,

Risposte:


137

Il prompt rosso è una buona idea, che uso anche io.

Un altro trucco è inserire un grande avviso di arte ASCII nel /etc/motdfile.
Avere qualcosa del genere che ti saluta quando accedi dovrebbe attirare la tua attenzione:

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


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


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

È possibile generare un avviso di questo tipo su questo sito Web o utilizzare il figlet comando.

figlet

Come suggerito da Nicholas Smith nei commenti, puoi ravvivare le cose con alcuni draghi o altri animali usando il cowsaycomando.

drago cowsay

Invece di usare il file / etc / motd, puoi anche chiamare cowsayo figletnel .profilefile.


3
Ooh mi piace!
Sionide21

13
Se hai digitato un comando, non lo vedrai più.
Nils,

3
È vero, è qui che è utile il prompt rosso.
Kenny Rasschaert,

41
Sui server Windows, utilizzo un colore desktop rosa brillante e barre del titolo / combinazione di colori giallo brillante in modo che sia molto, molto evidente. Questa è la nostra versione di un prompt dei comandi colorato
Mark Henderson

8
Vorrei aggiungere draghi ASCII nel mix.
Nicholas Smith,

80

Non è la stessa cosa, ma questo sito web consiglia ai tuoi sviluppatori di indossare un sombrero rosa quando apporta modifiche ai sistemi di produzione. Probabilmente potresti avere una regola simile per immergerti in loro.

sviluppatore che indossa un sombrero rosa


1
Haha! +1 perché ho LOL. Ma seriamente, le persone possono cercare gli occhiali mancanti mentre li indossano, dubito che un cappello servirà da "costante promemoria". Inoltre, non fa nulla per aiutarti a ricordare quale finestra è quale.
Felix Dombek,

7
Sì, dovresti modificare il processo in modo che sia: 1) Dichiara il desiderio di modificare la produzione. 2) Esci dal sombrero e chiudi tutte le altre finestre. 3) Fai cose di produzione mentre tutti stanno guardando. 4) Disconnettersi dalla sessione e rimuovere sombrero.
Aric TenEyck,

1
"2) Esci dal sombrero e spegni tutte le altre finestre" Questo non funzionerà davvero nella mia azienda, dato che è il passaggio 2 di tutti i nostri SOP. Il passaggio 1 è ovviamente "accendi le luci" perché, con le finestre chiuse, può diventare piuttosto buio in questo ufficio.
Parthian Shot

50

Il più grande che ho usato è uno schema di denominazione discreto in cui i sistemi prod sono chiamati ovviamente diversi dalle istanze test / dev. Ciò rende visibilmente diverso il prompt di stile "Nome utente @ nome host:". E per ovvio intendo più di parole diverse, formati diversi anche:

esempio: PRD-WEB001 vs DEVEL-BOB-WEB001

Questo ha diverse cose da fare:

  • Il blocco ipenato aggiuntivo lo rende un set di tre anziché un set di due.
  • Il primo del set ha una lunghezza diversa.
  • La lunghezza complessiva dei nomi è notevolmente diversa, il che rende la spaziatura della riga di comando diversa l'una rispetto all'altra e al testo nella finestra.

E soprattutto, non richiede configurazioni speciali per la produzione solo per evitare errori Oops.

Nella mia esperienza, vuoi qualcosa che sia un promemoria costante di dove sei. I metodi di accesso come gli enigmi sono validi per circa 10 secondi, fino a quando non dimentichi quale finestra è quale. Tutto ciò che serve è fare un lsnella directory sbagliata per far scorrere il minaccioso banner-login fuori dalla vista, seppellire la finestra del terminale sotto una finestra del browser mentre si cerca su Google qualcosa, alt-tab indietro alla finestra sbagliata e ne deriva il caos. Meglio avere un segnale visivo costante come un prompt dei comandi significativamente diverso.


Funziona davvero bene per i sistemi di base, ma non appena si cambia un dev- * in prod- * gli sviluppatori gemono e gemono mentre metà dei loro collegamenti smettono di funzionare (non importa quante volte l'hai fatto prima), e talvolta il il sistema stesso si limita a lavorare a metà fino a quando non si correggono tutti i numerosi riferimenti al vecchio nome nei file di configurazione. Soprattutto con il software proprietario installato e gli alias DNS aiutano solo così tanto. Ancora peggio, è facile dimenticare completamente il prompt mentre si cambia finestra.
SilverbackNet,

Gli sviluppatori devono creare impostazioni che funzionino su dev / test / staging / production (è quello che faccio, ma è un'altra storia). Per un "prompt rosso" funzionante per bash (più difficile di quanto sembri), vedere la mia risposta su serverfault.com/a/479718/79266
RichVel

39

Una cosa che devi tenere a mente è che questo deve essere un promemoria persistente, non solo un indicatore al momento dell'accesso. Molto spesso, qualcuno avrà diverse shell in esecuzione contemporaneamente in diverse schede e si sposta tra di loro. Alcuni saranno dev, un po 'di produzione. Quindi, quando si esegue un comando, è necessario disporre di un indicatore a quel punto. Quindi avere un prompt speciale è il metodo migliore, nella mia esperienza, con una barra del titolo / tab modificata che è un buon complemento a questo per trovare facilmente la finestra / tab giusta.

Quindi consiglierei di avere un prompt colorato (il rosso è la scelta ovvia) e tutte le maiuscole per il nome host, con un comportamento simile per l'utente (privilegiato o non privilegiato) come il tuo prompt. Qualche esempio:

esempio di prompt colorati

Di solito qualcosa del genere

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

nel file di avvio della shell. Questo è per il blu. Sostituire 44con 41rosso abete e 42verde. Disponibili anche altri colori e motivi selvaggi .


Per un 'prompt rosso' funzionante per bash (più difficile di quanto sembri), vedi la mia risposta su serverfault.com/a/479718/79266 - mostra anche il ramo git, la directory corrente troncata, ecc.
RichVel

14

Questi sono i miei suggerimenti:

1) Assicurati che la maggior parte dei comandi (rm, chown, chmod, /etc/init.d/*) nell'ambiente di produzione richiedono l'accesso sudo

2) Usa PS1 / PS2 per indicare che l'utente si trova in un server Prod

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

Questo mostrerà il prompt dei comandi come

[sridhar@prodappserver901 conf]$

3) Se si utilizzano client Putty / SSH, è sempre possibile impostare un colore / profilo di sfondo univoci per mettere in risalto i server di produzione.


La prima è un'idea interessante ma poco pratica perché gli script eseguiti come utenti demone potrebbero aver bisogno di usare rm, chmod, ecc.
Zan Lynx,

13

Considera solo che la tua seconda e terza idea aiutano durante la connessione iniziale ma non hanno alcun valore quando hai più terminali aperti e ti muovi da uno all'altro. L'idea di sysadmin1138 di usare i nomi è buona quando può essere applicata ma ci sono molti casi in cui non può essere.

L'unica cosa che ho trovato davvero utile è un prompt colorato. Mi piace il verde per gli sviluppatori / test, il rosso per la produzione e il blu per le macchine nella DMZ. In questo modo, anche se ho due macchine con lo stesso nome (in reti diverse), come quando preparo una macchina sostitutiva, posso ancora facilmente dire su quale sono.


11

Il prompt dei comandi rosso / speciale è buono. Un'altra cosa potrebbe essere un logout automatico più veloce su quei computer che usano la variabile TMOUT. Se hai aperto molte finestre, quelle di produzione spariranno più velocemente.

Ciò dovrebbe comportare un comportamento diverso:

  1. Sviluppare
  2. Test
  3. Apporta le modifiche a un server di gestione temporanea
  4. Solo allora fai un rapido giro alla produzione e distribuisci lì (esattamente come hai fatto sul server di gestione temporanea)

9

Lavorare su una macchina di produzione con un semplice account root non è mai una buona idea.

Avere un account con autorizzazioni sudo complete. Non consente il salvataggio della sessione sudo. Proibisci sudo su. Usa una password separata (non quella che hai per la tua macchina sviluppatore). Probabilmente modificare sudo per notificare l'identità di produzione della shell prima di eseguire il comando (tramite alias).

Farà errori accidentali piuttosto difficili. E il prompt rosso non fa mai male.


e per "sudo su" intendi "sudo -i" o almeno "sudo su -", giusto?
Sparr,

Whoa! è Sparr! Piccolo mondo :)
Sionide21

1
È impossibile impedire alle persone di avere un root shell. ( sudo bash). È possibile ottenere una shell di root da qualsiasi configurazione di "lista nera". (Se stai attento, puoi interromperlo con una configurazione della whitelist, ma in genere non è garantita.)
user606723

1
Non dovrebbe impedire l'accesso previsto alla shell di root - solo alcuni modi comuni in cui le persone sono così abituate da poterlo fare inconsciamente, senza prestare attenzione.
Mihails Strasuns,

8

Sono andato con l'idea rapida rossa e ho trovato abbastanza noioso trovare il codice di lavoro per .bashrc.

Quindi ecco la mia versione, pronta per essere inclusa in .bashrc- https://github.com/RichVel/nicer-bash-prompt . E 'completamente guidata da hostname, così finché si dispone di un modello idoneo a nomi di host di produzione (ad esempio xyprod01, xyprod02e così via) che funzionerà bene, ed è possibile utilizzare lo stesso .bashrcin tutti gli ambienti.

Sembra così:

screenshot del prompt rosso

Questo crea un prompt bash più bello che include il prompt rosso sugli host di produzione - mostra anche il ramo git corrente e le ultime 2 directory in $ PWD. Si cura di evitare di incasinare la visualizzazione del prompt quando si esegue Ctrl / R (ricerca inversa) in bash.

Include anche una funzione opzionale per sincronizzare la cronologia di bash in tutte le finestre del terminale, seguendo le linee di questa risposta . Questo è carino ma non tutti lo vogliono, quindi è disabilitato per impostazione predefinita.


5

Anche se non so come sia la tua configurazione IT, una soluzione che potrebbe essere efficace sarebbe quella di avere una stanza speciale su cui devi andare a SSH nei server di produzione come root. Se si dispone di un datacenter, questa potrebbe essere la sala server stessa, ma avere una posizione fisica separata dalla quale non viene eseguito il lavoro "normale" servirebbe in modo efficace a ricordare costantemente che si sta accedendo alle macchine di produzione.


2
Sebbene ciò sarebbe certamente efficace, per la maggior parte delle situazioni sarebbe anche estremamente controproducente.
John Gardeniers,

Sono d'accordo con John, ma questo è certamente qualcosa a cui pensare.
user606723

@JohnGardeniers: controproducente? Vuoi dire che danneggerebbe la produttività?
LarsH,

@LarsH, dover andare inutilmente in stanze diverse per svolgere diverse parti del tuo lavoro, sicuramente danneggia la produttività. L'intera rete dovrebbe essere gestibile da un'unica posizione.
John Gardeniers,

@JohnGardeniers: capito. Quando inizialmente dicevi "controproducente", pensavo che intendevi dire che il suo effetto era contrario allo scopo dichiarato, vale a dire servire da promemoria costante dell'accesso alle macchine di produzione.
LarsH,

4

Solo una modifica ai suggerimenti sopra. Uso CDE come desktop unix e tutti i sistemi di produzione a cui accedo tramite un menu in .dt / dtwmrc. Su tutti i sistemi dev e UAT mantengo la mia normale combinazione di colori, ma sui sistemi di prod ho impostato il terminale su uno sfondo rosso. Non mi piace l'aspetto, ma è questo il punto.

eta - mancava Karol suggerendo sostanzialmente la stessa cosa


4

Quando accedo a una macchina di produzione, ricevo un paragrafo che mi avverte che si tratta di una macchina di produzione, nonché un breve elenco di linee guida. C'è un numero che posso chiamare per il supporto UNIX se non penso di poter svolgere il mio compito da solo in sicurezza, un promemoria che far esplodere una macchina di produzione può costarmi il mio lavoro e un promemoria che tutto ciò che faccio è registrato.

modifica: lavoro nel settore dei trasporti.


Ahia. Sebbene io possa capire la necessità di questo, sono contento di non lavorare in quel tipo di ambiente.
LarsH,

1
Sono contento di farlo, lavoro nei trasporti e questi sistemi non costano solo denaro quando vanno in rovina, ma costano la vita.
Basilio

Sono contento che anche tu sia così attento!
LarsH,

3

In PuTTY puoi cambiare il titolo della finestra in qualcosa di diverso da quello predefinito per una sessione salvata specifica. Questo rimane sempre sulla finestra, indipendentemente da ciò che fai all'interno della finestra. Questo appare anche nella barra delle attività.

Espandi finestra, fai clic su Comportamento. Inserisci qualcosa nel titolo della finestra come:

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

3

Semplice risposta? Cambia il colore della tua shell in rosso nella configurazione della shell. Sarà ovvio e semplice da configurare. Non solo, ma a differenza delle intestazioni del server, non scomparirà dopo aver digitato alcuni comandi.


3

Ecco cosa ho fatto sul mio Mac. Per ogni server, aggiungo una voce per esso nel mio file ~ / .ssh / config, ad es

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

Questo Applescript viene attivato una volta stabilita la sessione SSH. Imposta il colore di sfondo del terminale sui valori RGB forniti (o torna ai valori predefiniti se non viene fornito alcun valore di colore). La parte potenzialmente complicata è intercettare la fine della sessione SSH per riportare i colori ai valori predefiniti. Per questo, ho creato il seguente script di shell come ~ / bin / ssh per sovrascrivere il comando predefinito ssh. Questo essenzialmente intercetta e avvolge qualsiasi chiamata al comando SSH. Ho provato ad usare aliasing e funzioni, ma questa soluzione ha funzionato al meglio:

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

Ecco la fonte per lo script change_terminal_colours.scpt . Mettilo anche nella tua directory ~ / bin:

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

Ho scritto questa soluzione una settimana fa e la utilizzo da allora. Spero che altri lo trovino di valore. Trovo che funzioni meglio di qualsiasi delle soluzioni che ho trovato su Google.


3

Il mio gruppo usa visionapp Remote Desktop (modifica del 2017: sembra che il prodotto sia stato rinominato ma penso che sia lo stesso) sia per RDP in macchine Windows sia per SSH in Linux. Le nostre connessioni sono raggruppate in cartelle per livello e assegnate un colore di scheda.

Quindi ogni volta che apriamo una connessione di produzione - bam! - abbiamo del rosso vivo in faccia:

inserisci qui la descrizione dell'immagine

È sicuramente un investimento utile se sei un grande negozio di Windows e fai molto affidamento su RDP. Scommetto che ci sono altri grandi strumenti se tutto ciò di cui hai bisogno è SSH.


2

Oltre a un prompt univoco (che sembra essere la soluzione più affidabile), se si accede dalla stessa workstation, è possibile utilizzare profili diversi per le sessioni SSH.

Ad esempio, ho sfondi rossi per i sistemi di produzione, verde per lo sviluppo, blu per le infrastrutture (router ecc.) E bianco per le workstation locali.

Se usi GNOME, c'è un modo semplice per avviare una connessione SSH con il tuo profilo desiderato:

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

Il principale svantaggio: è lato client, quindi un suggerimento speciale è ancora la soluzione migliore se si accede a server da posizioni diverse.


2

Un altro modo per chiarire che ci si trova in un sistema di produzione è impostare la funzione TMOUT (autologout) sul sistema di produzione.


1
Come lo chiarisce? È anche potenzialmente molto pericoloso, poiché comandi o processi potrebbero essere in esecuzione e verranno improvvisamente interrotti dopo aver disconnesso la sessione.
John Gardeniers,

3
Ho appena testato TMOUT e sembra che se è in esecuzione un comando di lunga durata che non termina la sessione. Lo termina solo quando sei seduto al prompt dei comandi. Anche Nils ha suggerito questo e ha senso per me.
sjbotha,

1
Questa è la cosa davvero bella di TMOUT. Abbiamo usato autolog o perfino killerd prima di scoprire TMOUT. autolog e killerd NON sono così carini. killerd è anche difettoso e tende a bloccare una CPU completa ...
Nils

2

A causa dei grandi requisiti normativi mentre si lavora in un determinato settore, qui le attività di tutti vengono registrate per qualsiasi controversia futura. A causa di ciò, anche l'accesso è limitato e devi passare attraverso alcuni "menu" che ti consentono di accedere a una macchina come uno dei pochi utenti fidati. Configurando questo sistema, la persona deve selezionare in modo consapevole l'ambiente PRODUCTION o QA e quindi selezionare l'host a cui desidera accedere dall'elenco. Anche questo ha un periodo di timeout, quindi non ti imbatti in una situazione di accesso a un host prod e di dimenticare l'ambiente in cui ti trovi il giorno successivo.


2

io uso i cambiamenti rapidi come gli altri qui. È veloce e sgradevole ma funziona bene per i miei scopi. Ti darà rosso come un normale utente su un sistema di produzione e rosso maiuscolo come root su un sistema prod.

Potrebbe essere scritto in meno righe, ma lo faccio in questo modo in modo da poter modificare gli altri 2 casi (non root-non prod) se voglio.

Lavoriamo sul presupposto che un server di produzione non utilizza DHCP, ma è possibile utilizzare qualsiasi altro metodo per capire se si tratta di un sistema prod. Qualunque cosa funzioni per te.

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


Sebbene lo script sia interessante, l'assunzione dell'IP statico solo sui sistemi di produzione non è comune. Nella maggior parte dei casi, tutti i server avranno IP statici, sia di sviluppo che di produzione.
Martijn Heemels,

1
cavalli per corsi davvero. i nostri sistemi di sviluppo utilizzano le prenotazioni dhcp. Puoi usare qualsiasi sistema che funzioni per te, come confrontare il nome host, la sottorete, il vlan, qualunque cosa.
Sirex,

@Sirex, è anche possibile il contrario. Ad esempio, i VPS EC2 di Amazon utilizzano i lease DHCP statici sui server di produzione e gli IP pubblici vengono inoltrati. L'istanza stessa non conosce direttamente quale IP pubblico è in esecuzione, almeno non a livello di interfaccia di rete.
Matthew Scharley,

1
Sì. Potresti sempre avere un pacchetto rpm di ruolo che crea un file / etc / PRODUCTION e prova questo. Qualsiasi cosa faccia galleggiare la tua barca.
Sirex,

1

Avere una password di root diversa (forse più lunga) sui computer di produzione.

È possibile creare uno speciale sudo (o wrapper sudo), in modo che venga emesso un messaggio speciale per le macchine di produzione.


.. Una password di root diversa su macchine prod? perché non ci ho pensato !?
user606723

Inoltre, sudo ha già molte opzioni di configurazione. Sarei sorpreso se non puoi già farlo. Un sudo personalizzato è un'idea terribile perché non verrebbe testato abbastanza per ottenere il bit di suid.
user606723

1

Qui, abbiamo configurazioni di stucco predefinite per rendere il colore di primo piano dell'intero schermo come rosa brillante.

  • Prod: rosa brillante.
  • Regressione: verde pallido
  • Modello: blu pallido
  • Dev: normale

Funziona abbastanza bene, ma mi piacciono alcune delle altre idee qui.

  • Pro: a meno che qualcosa non usi il colore di primo piano ..., OGNI schermo del prod è rosa brillante.
  • Contro: Ovviamente se si passa attraverso qualcosa di diverso dalla configurazione predefinita del mastice, questo non fa nulla.

1

nel .bashrc / .bash_profile

echo " THIS IS THE PRODUCTION SYSTEM. BE RESPONSIBLE.. " .. 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.