Stwórz skrypt i uruchom go

Odpowiedzi:

51

Ostrożny

Czy przed uruchomieniem skryptu ufasz osobie, która go napisała?

Na przykład, czy spodziewałeś się, że skrypt to zawiera?

echo "brain1" > /etc/hostname

Spróbuje to zmienić twoją nazwę hosta.


Na przyszłość, jeśli po sprawdzeniu, czy skrypt jest poprawny i nie jest złośliwy, możesz uruchomić go w jednym wierszu:

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

Ale pobierz go osobno i przeczytaj przed pierwszym uruchomieniem.

Należy również pamiętać, że interaktywne monity w pobranym skrypcie mogą nie działać poprawnie przy użyciu tej metody.

Mikel
źródło
9
+1 za zwrócenie uwagi na (znaczące) obawy związane z bezpieczeństwem. Bądź absolutnie pewien, że ufasz źródłu. Tak echo "brain1" > /etc/hostnamesamo łatwo może być rm -rf /.
Christopher Cashell
2
+1 Dzięki chłopaki, ten skrypt jest ode mnie, jest bezpieczny .. Podobał mi się jeden wiersz, ale ma kilka interaktywnych linii, które nie działały .. nie wiem dlaczego?
Fabiano Soriani
1
Twoje apt-get installlinie? Jeśli apt-getzainstaluje jakieś dodatkowe zależności, zapyta cię, a jeśli nie, po prostu wyjdzie, aby być bezpiecznym. Dodaj wszystkie zależne pakiety do argumentów wiersza poleceń lub rozważ dodanie -y, np.apt-get -y install...
Mikel
problem nie jest związany z zależnościami, ma związek z apt flushing stdin.
Zoredache
1
Tak naprawdę nie możesz ufać źródłu, nawet jeśli „ufasz źródłu” z powodu ataków człowieka w środku. To powiedziawszy, losowe prywatne adresy URL ze skryptami bash powinny być wystarczająco wąskim wektorem ataku, aby nikt nie był w stanie tego zrobić.
SpamapS
9

Skrypty nieinteraktywne

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

Pamiętaj, że podczas korzystania z tej metody interaktywne skrypty nie będą działać.


Interaktywne skrypty

Aby uruchomić interaktywne skrypty, możesz użyć tego:

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

Interaktywne skrypty, które należy uruchomić jako root

Ostrzeżenie: jest to bardzo niebezpieczne. Niepolecane.

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

Zauważ, że nie możesz go łatwo użyć, sudo bashponieważ użycie <(...)spowoduje utworzenie pliku wirtualnego, a jego deskryptor pliku nie będzie dostępny z instancji root bash. Musi zostać wykonany na tym samym użytkowniku, który musi odczytać plik wirtualny, więc musi zostać wysłany jako własne polecenie w powłoce użytkowników root.

Nathan F.
źródło
1
To najlepsza odpowiedź. Obejmuje on ważne aspekty wykonywania interaktywnego i nieinteraktywnego oraz uprzywilejowanego.
Leonid Makarov
5

Ten skrypt jest ode mnie, jest bezpieczny .. Uwielbiałem ten jeden wiersz, ale ma kilka interaktywnych linii, które nie działały .. nie wiem dlaczego?

Kiedy dpkg działa, wywoływany przez apt-get, opróżnia stdin. Jeśli używasz polecenia podobnego curl blah | bash, to w zasadzie wysyłasz zawartość strony do bash poprzez STDIN. Jeśli jedno z twoich poleceń jest apt-get, a następnie uruchamia się, wszystko inne zostanie wyczyszczone.

Sztuką jest użycie takiego polecenia apt-get install --yes denyhosts </dev/null. Daje to apt-get inne dane wejściowe i po prostu opróżnia / dev / null zamiast reszty skryptu.

Jeśli chcesz zobaczyć pełny przykład instalacji czegoś za pomocą zdalnego skryptu, możesz zajrzeć do tego skryptu, aby skonfigurować denyhosts

Dla przypomnienia wolę w tym celu curl niż wget, ale wget też powinien być w porządku.

Zoredache
źródło
Próbowałem ze sztucznym skryptem z jakimś interaktywnym, zadziałało koleś. Nie rozumiem 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
Lynxman
źródło
4

We wszystkich tych przykładach brakuje dość ważnego punktu. Jeśli używasz adresu URL http://dl.dropbox.com/u/11210438/flockonus-stack.sh, musisz kontrolować skrypt za każdym razem, gdy go pobierasz, ponieważ może on być modyfikowany przez każdego na ścieżce sieciowej między tobą a dropboxem. Jeśli przejdziesz na http s : //dl.dropbox.com/u/11210438/flockonus-stack.sh , nie będziesz mieć tego źródła niepewności.

(Dropbox próbuje przekierować adres URL http na https, ale w przypadku ataku sieciowego wget nigdy nie będzie mógł rozmawiać z prawdziwym dropboxem i nigdy nie zobaczy przekierowania)

pde
źródło
2
Prawdopodobnie lepiej zostawić to jako komentarz do pytania, a nie odpowiedź, ponieważ nie odpowiada ono dokładnie na pytanie. Nadal warto na pewno zwrócić uwagę!
Bill Weiss
2

Spróbuj pobrać go tak, jak określiłeś wget, a następnie uruchom go bezpośrednio. Możesz uzyskać fantazję i użyć zmiennych dla skryptu, który chcesz pobrać itp., Ale to załatwi sprawę

Na przykład:

!#/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
Brett
źródło
Jak mam powiedzieć mojemu systemowi, aby zrobił to podczas uruchamiania?
Metallkiller