Esiste un criterio per consentire o disabilitare l'esecuzione di script di bash come root con sudo?

1

Quali criteri potrei adottare per consentire o impedire l'esecuzione di script bash con sudo come root?

So che dovrei analizzare la sceneggiatura ma non ho abbastanza tempo e mi fido dei miei sviluppatori.

Oggi il mio criterio è di richiedere al proprietario dell'utente dello script, al proprietario del gruppo e alle autorizzazioni solo per essere sicuro che il proprietario e il gruppo siano root e le autorizzazioni non consentano all'utente di modificare lo script.

Ad esempio, c'è qualche strumento per estrarre i comandi eseguiti all'interno di uno script bash? Penso che con questo elenco di comandi sarei in grado di valutare se tutto il comando richiede o meno i privilegi di root .

    
posta Eloy Roldán Paredes 07.09.2016 - 16:34
fonte

4 risposte

2

Alcune opzioni:

  • Leggi una volta lo script, rendilo r-x, cambia proprietà e aggiungi lo script per la voce sudoers per gli sviluppatori
  • Richiedi che il gli sviluppatori usano sudo nello script, piuttosto che nell'eseguire il script e comandi whitelist nel file sudoers
  • Fidati dei tuoi sviluppatori e accetta il rischio

Per quanto riguarda l'estrazione di comandi, c'è solo un modo giusto per farlo: leggere lo script. È possibile attivare il controllo o leggere la cronologia dei comandi o qualcosa del genere, ma se è veramente dannoso, non ci si può fidare di questi.

    
risposta data 07.09.2016 - 19:23
fonte
1

Ho avuto lo stesso problema con lo script SQL lanciato con power-user (non esattamente root, ma chiuso). Quindi ho creato un elenco di comandi che avrebbero dovuto armare il mio database e mantenuto questo elenco nel tempo.

Puoi mantenere un elenco di comandi vietati - non possiamo dire cosa vuoi evitare, ma mi sembra difficile proibire rm .. potresti semplicemente segnalare un avviso quando esegui il controllo.

Quindi l'idea sarebbe avere un comando grep che faccia per te - qui usa un elenco di pattern in pattern_file e -r nel caso in cui tu abbia sottodirectory da cercare:

grep -f pattern_file.txt -r /sudo_shells_repo/* 

Fai eseguire questo script di verifica ogni volta che qualcuno viene e aggiungi uno script "eseguibile con sudo" nel repository.

    
risposta data 07.09.2016 - 16:48
fonte
1

is there any tool in order to extract the commands executed within a bash script

Sì - bash.

Ma leggermente meno faceto, no. Anche una versione strumentata l'interprete dei comandi ti mostrerà solo ciò che lo script ha fatto dopo averlo fatto. Considerare la sceneggiatura come una scatola nera significa che non si può mai essere sicuri di ciò che farà in futuro, anche supponendo di poter catturare accuratamente gli stati di esecuzione dello script prima e dopo.

 stuff='tmp/deletme'

 if [ ! -d "/home/disgruntled" ] ; then 
    unset stuff
 fi

 rm -rf "$stuff/"
    
risposta data 07.09.2016 - 16:59
fonte
1

extract the commands executed within a bash script?

Si sta tentando in modo efficace di abbinare il codice a un gruppo di firme non note conosciute, analogamente a ciò che fanno IDS e antivirus nel caso più semplice. Ma questo non funziona perché bash è un linguaggio molto capace in cui puoi creare dinamicamente i comandi ed eseguirli. Questo non può essere trovato con un semplice pattern matching.

Ad esempio quanto segue eseguirà bash -i , cioè una shell interattiva che fornisce all'utente malintenzionato una shell privilegiata quando viene eseguita con sudo.

foo=bas
bar='h -i'
$foo$bar

Anche se crei una firma per questo codice, può essere facilmente modificata in modo che non corrisponda più alla firma. O che la firma corrisponda anche al codice valido, cioè falso positivo. E se stai provando un'analisi dinamica più avanzata è anche possibile fare in modo che questo codice dipenda dal tempo o dai file o semplicemente dai nuovi comandi direttamente da un file o un socket ecc.

Conclusione : nessuno script deve essere autorizzato senza analisi manuale.

    
risposta data 07.09.2016 - 17:58
fonte

Leggi altre domande sui tag