Wget uno script ed eseguirlo


Risposte:


51

attento

Prima di eseguire lo script, ti fidi della persona che l'ha scritto?

Ad esempio, ti aspettavi che lo script contenesse questo?

echo "brain1" > /etc/hostname

Ciò tenterà di modificare il nome host.


Per riferimento futuro, se, dopo aver verificato che lo script è corretto e non dannoso, è possibile eseguirlo in una riga come questa:

wget -O - http://dl.dropbox.com/u/11210438/flockonus-stack.sh | bash

Ma scaricalo separatamente e leggilo prima di eseguirlo la prima volta.

Si noti inoltre che i prompt interattivi all'interno dello script scaricato potrebbero non funzionare correttamente utilizzando questo metodo.


9
+1 per evidenziare i (significativi) problemi di sicurezza con questo. Sii assolutamente certo di fidarti della fonte. Questo echo "brain1" > /etc/hostnamepotrebbe essere solo la stessa facilità rm -rf /.
Christopher Cashell,

2
+1 Grazie ragazzi, quella sceneggiatura è da parte mia, è sicura .. Ho adorato il one-liner, ma ha alcune linee interattive che non sono state eseguite .. non so perché?
Fabiano Soriani,

1
Le tue apt-get installlinee? Se apt-getinstallasse dipendenze extra, te lo chiederà, e se non ci riuscirà uscirà per sicurezza. O aggiungi tutti i pacchetti dipendenti agli argomenti della riga di comando o considera l'aggiunta -y, ad esempioapt-get -y install...
Mikel

il problema non è legato alle dipendenze, ha a che fare con apt flushing stdin.
Zoredache,

1
In realtà non puoi fidarti della fonte anche se "fidati della fonte" a causa degli attacchi man in the middle. Detto questo, gli URL privati ​​casuali con script bash dovrebbero essere un vettore di attacco abbastanza stretto che nessuno con la capacità di estrarlo si preoccupa abbastanza per farlo.
SpamapS,

9

Script non interattivi

wget -O - http://website.com/my-script.sh | bash

Si noti che quando si utilizza questo metodo, gli script interattivi non funzioneranno.


Script interattivi

Per far funzionare gli script interattivi, puoi usare questo:

bash <(wget -qO- http://website.com/my-script.sh)

Script interattivi che devono essere eseguiti come root

Avvertenza: questo è estremamente pericoloso. Non consigliato.

sudo su -c "bash <(wget -qO- http://website.com/my-script.sh)" root

Si noti che non è possibile utilizzare semplicemente sudo bashpoiché l'utilizzo <(...)creerà un file virtuale e il suo descrittore di file non sarà accessibile dall'istanza di root bash. Deve essere eseguito sullo stesso utente che deve leggere il file virtuale, quindi deve essere inviato come proprio comando all'interno della shell degli utenti root.


1
Questa è la risposta migliore Copre gli aspetti importanti dell'esecuzione interattiva vs non interattiva vs privilegiata.
Leonid Makarov,

5

Quella sceneggiatura è da parte mia, è sicura .. Ho adorato il one-liner, ma ha alcune linee interattive che non sono state eseguite ... non so perché?

Quando dpkg viene eseguito, chiamato da apt-get, scarica lo stdin. Se stai usando un comando come curl blah | bash, allora stai sostanzialmente inviando contenuti della pagina a bash tramite STDIN. Se uno dei tuoi comandi è apt-get, quindi viene eseguito, tutto il resto verrà scaricato.

Il trucco è usare un comando come questo apt-get install --yes denyhosts </dev/null. Questo dà a apt-get un input diverso e semplicemente svuota / dev / null invece del resto del tuo script.

Se vuoi vedere un esempio completo di installazione di qualcosa tramite uno script remoto, puoi guardare questo script per impostare denyhosts

Per la cronaca, preferisco curl piuttosto che wget per questo, ma anche wget dovrebbe andare bene.


Ho provato con uno script fittizio con alcuni interattivi, ha funzionato amico .. Non capisco xD dl.dropbox.com/u/11210438/lala.sh
Fabiano Soriani,

4
#!/bin/sh
if [ ! -f "/tmp/flockonus-stack.sh" ]
then
    wget -O /tmp/flockonus-stack.sh http://dl.dropbox.com/u/11210438/flockonus-stack.sh
fi

sh /tmp/flockonus-stack.sh

4

A tutti questi esempi manca un punto abbastanza importante. Se usi l'URL http://dl.dropbox.com/u/11210438/flockonus-stack.sh, devi controllare lo script ogni volta che lo scarichi, perché può essere modificato da chiunque sul percorso di rete tra te e dropbox. Se passi a http s : //dl.dropbox.com/u/11210438/flockonus-stack.sh , non avrai quella fonte di insicurezza.

(Dropbox tenta di reindirizzare l'URL http su https, ma nel caso di un attacco di rete wget non riuscirà mai a parlare con il vero dropbox e non vedrebbe mai il reindirizzamento)


2
Probabilmente è meglio lasciarlo come un commento alla domanda, non come una risposta, in quanto non risponde esattamente alla domanda. Vale comunque la pena sottolineare di sicuro!
Bill Weiss,

2

Prova semplicemente a scaricarlo come specificato con wget e quindi eseguendolo direttamente. Puoi diventare fantasioso e usare le variabili per lo script che vuoi scaricare ecc., Ma questo farà il trucco

Per esempio:

!#/bin/bash

#Change to temp directory
cd /tmp

#Download file using wget
wget http://dl.dropbox.com/u/11210438/flockonus-stack.sh

#Execute the file

sh flockonus-stack.sh

Come direi al mio sistema di farlo effettivamente all'avvio?
Metallkiller,
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.