Виберіть скрипт і запустіть його


Відповіді:


51

Обережно

Перш ніж запустити сценарій, чи довіряєте ви людині, яка його написала?

Наприклад, ви очікували, що сценарій містить це?

echo "brain1" > /etc/hostname

Це спробує змінити ім'я хоста.


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

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

Але завантажте її окремо і прочитайте її перед першим запуском.

Також зауважте, що інтерактивні підказки всередині завантаженого сценарію можуть не працювати належним чином за допомогою цього методу.


9
+1, щоб вказати на (значні) проблеми щодо безпеки. Будьте абсолютно впевнені, що довіряєте джерелу. Це echo "brain1" > /etc/hostnameмогло бути так само легко rm -rf /.
Крістофер Кашелл

2
+1 Дякую, хлопці, цей сценарій від мене, це безпечно. Полюбив однолінійку, але в ньому є деякі інтерактивні лінії, які не запускалися. Не знаю чому?
Фабіано Соріані

1
Ваші apt-get installлінії? Якщо ви apt-getвстановите будь-які додаткові залежності, він попросить вас, а якщо не зможе, він просто вийде, щоб бути безпечним. Або додайте всі аргументи залежних пакетів до аргументів командного рядка, або розглянути можливість додавання -y, наприкладapt-get -y install...
Mikel

питання не пов'язане із залежностями, воно пов'язане з влучним промиванням 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оскільки використання <(...)створить віртуальний файл, і його дескриптор файлу не буде доступний з екземпляра bash root. Він повинен бути виконаний на тому самому користувачеві, якому потрібно прочитати віртуальний файл, тому його треба надіслати як власну команду всередині оболонки кореневих користувачів.


1
Це найкраща відповідь. Він охоплює важливі аспекти виконання інтерактивного проти неінтерактивного проти привілейованого виконання.
Леонід Макаров

5

Цей сценарій від мене, це безпечно. Полюбив однолінійку, але в ньому є кілька інтерактивних ліній, які не виконувались. Не знаю чому?

Коли dpkg працює, викликаний apt-get, він змиває stdin. Якщо ви використовуєте команду типуcurl blah | bash правило, ви надсилаєте вміст сторінки в bash через STDIN. Якщо одна з ваших команд apt-get, то запускається, все інше буде розмито.

Хитрість полягає у використанні такої команди apt-get install --yes denyhosts </dev/null . Це дає apt-get інший вклад, і він просто змиває / dev / null замість решти сценарію.

Якщо ви хочете побачити повний приклад встановлення чогось за допомогою віддаленого сценарію, ви можете переглянути цей сценарій налаштування відхилень

Для запису я вважаю за краще закручувати wget для цього, але wget також повинен бути добре.


Я спробував зафіксований сценарій з деякими інтерактивними, він працював чувак .. я не розумію 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

У всіх цих прикладах відсутній досить важливий момент. Якщо ви використовуєте URL http://dl.dropbox.com/u/11210438/flockonus-stack.sh, вам потрібно перевіряти скрипт щоразу, коли ви завантажуєте його, оскільки його може змінювати будь-хто на мережевому шляху між вами та папкою. Якщо перейти на http s : //dl.dropbox.com/u/11210438/flockonus-stack.sh , це джерело невпевненості у вас не буде.

(Dropbox намагається перенаправити URL-адресу http на https, але у випадку мережевої атаки wget ніколи не стане спілкуватися зі справжнім Drobox і ніколи не побачить переспрямування)


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

Як я можу сказати своїй системі насправді робити це під час запуску?
Metallkiller
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.