Запустите скрипт и запустите его

Ответы:

51

Осторожный

Перед запуском сценария доверяете ли вы тому, кто его написал?

Например, вы ожидали, что скрипт будет содержать это?

echo "brain1" > /etc/hostname

Это попытается изменить ваше имя хоста.


Для дальнейшего использования, если после проверки, что скрипт корректен и не является вредоносным, вы можете запустить его в одну строку следующим образом:

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

Но загрузите его отдельно и прочитайте перед первым запуском.

Также обратите внимание, что интерактивные подсказки внутри загруженного скрипта могут работать неправильно при использовании этого метода.

Mikel
источник
9
+1 за указание (значительных) проблем безопасности с этим. Будьте абсолютно уверены, что доверяете источнику. Это echo "brain1" > /etc/hostnameможет быть так же легко rm -rf /.
Кристофер Кашелл
2
+1 Спасибо, ребята, этот сценарий от меня, он безопасен .. Мне понравился однострочник, но у него есть некоторые интерактивные строки, которые не запускались ... Не знаю, почему?
Фабиано Сориани
1
Твои apt-get installлинии? Если apt-getбы установить какие-либо дополнительные зависимости, он спросит вас, и если он не может, он просто выйдет, чтобы быть в безопасности. Либо добавьте все зависимые пакеты к аргументам командной строки, либо рассмотрите возможность добавления -y, напримерapt-get -y install...
Mikel
проблема не связана с зависимостями, это связано с apt flushing stdin.
Зоредаче
1
Вы на самом деле не можете доверять источнику, даже если вы действительно «доверяете источнику», потому что человек находится в середине атаки. Тем не менее, случайные частные URL-адреса с bash-скриптами должны быть достаточно узким вектором атаки, чтобы никто, способный осуществить его, не заботился об этом достаточно.
SpamapS
9

Неинтерактивные скрипты

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

Обратите внимание, что при использовании этого метода интерактивные сценарии не будут работать.


Интерактивные скрипты

Чтобы заставить работать интерактивные сценарии, вы можете использовать это:

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

Интерактивные скрипты, которые нужно запускать с правами root

Предупреждение: это чрезвычайно опасно. Не рекомендуется.

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

Обратите внимание, что вы не можете использовать просто, sudo bashтак как использование <(...)создаст виртуальный файл, и его файловый дескриптор не будет доступен из экземпляра root bash. Он должен выполняться для того же пользователя, которому необходимо прочитать виртуальный файл, поэтому он должен быть отправлен как его собственная команда внутри оболочки корневых пользователей.

Натан Ф.
источник
1
Это лучший ответ. Он охватывает важные аспекты интерактивного, неинтерактивного и привилегированного исполнения.
Леонид Макаров
5

Этот сценарий от меня, он безопасен. Мне понравился однострочный текст, но у него есть некоторые интерактивные строки, которые не запускались ... Не знаю, почему?

Когда dpkg запускается, вызывается apt-get, он сбрасывает stdin. Если вы используете команду вроде curl blah | bash, то вы в основном отправляете содержимое страницы в bash через STDIN. Если одна из ваших команд - apt-get, то выполняется, все остальное будет сброшено.

Хитрость в том, чтобы использовать такую ​​команду apt-get install --yes denyhosts </dev/null. Это дает apt-get другой ввод и просто сбрасывает / dev / null вместо остальной части вашего скрипта.

Если вы хотите увидеть полный пример установки чего-либо с помощью удаленного скрипта, вы можете посмотреть на этот скрипт для настройки denyhosts.

Для записи, я предпочитаю curl, а не wget, но с wget тоже все должно быть в порядке

Zoredache
источник
Я попробовал с фиктивным сценарием с некоторым интерактивом, он работал чувак .. Я не понимаю xD dl.dropbox.com/u/11210438/lala.sh
Фабиано Сориани
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
источник
4

Во всех этих примерах отсутствует достаточно важный момент. Если вы используете URL http://dl.dropbox.com/u/11210438/flockonus-stack.sh, вам нужно проверять скрипт каждый раз, когда вы его загружаете, потому что он может быть изменен любым пользователем в сетевом пути между вами и dropbox. Если вы переключитесь на HTTP s : //dl.dropbox.com/u/11210438/flockonus-stack.sh , вы не будете иметь , что источником нестабильности.

(Dropbox пытается перенаправить URL-адрес http на https, но в случае сетевой атаки wget никогда не сможет общаться с настоящим dropbox и никогда не увидит перенаправление)

PDE
источник
2
Это, вероятно, лучше оставить как комментарий к вопросу, а не как ответ, так как он не совсем отвечает на вопрос. Все еще стоит указать точно!
Билл Вайс
2

Попробуйте просто загрузить его, как вы указали с помощью wget, а затем выполнить его напрямую. Вы можете придумать и использовать переменные для скрипта, который вы хотите загрузить и т. Д., Но это поможет

Например:

!#/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
источник
Как бы я сказал моей системе на самом деле сделать это при запуске?
Metallkiller