2016-04-28 2 views
0
if [ "$(id -u)" != "0" ]; then 
     echo "Sorry, you are not root." 
     exit 1 
fi 

echo "You are root" 

while true 
do 
    read -s -p "Password of root for mysql, : " pass 
    echo 
    read -s -p "Password (again): " cpass 
    echo 
    [ "$pass" = "$cpass" ] && break 
    echo "Please try again" 
done 

Когда я запустить его с помощью sudo wget -qO- http://server-ip/install | shПользователь не корень, если вы получаете доступ к удаленному Баш скрипт с помощью Wget

Результат является Sorry you are not root.

Если я загружаю скрипт и запускаю его, цикл while не запускается. В чем проблема?

+1

Зачем вам нужен '| sh ', когда вы уже работаете как' sudo'. Можете ли вы попробовать без этого? – Inian

+5

Как насчет 'wget -qO- http: // server-ip/install | sudo sh'? Но позвольте мне сказать вам, что ['curl | bash' или 'wget -O- | bash' - рискованный бизнес] (https://www.google.com/search?q=curl+bash+risk). Особенно, когда sh работает под sudo. – anishsane

+0

С какой проблемой вы хотите сосредоточиться? Я бы предположил, что вы не root, когда wget на другой сервер, даже если используется sudo. Я не вижу ничего, что могло бы остановить цикл while из-за того, что вы получаете какой-либо результат при загрузке и запуске? – SaintHax

ответ

4

Ваш трубопровод состоит из двух команд: sudo и sh. Только команда, указанная в аргументах sudo, запускается с повышенными привилегиями. (sudo - это не ключевое слово оболочки, которое применяется ко всему конвейеру.)

Выполнение кода, полученного из внешнего ресурса, такого как , а не безопасно. Сначала сохраните код в файле и проверьте его, чтобы убедиться, что это код, который вы ожидаете выполнить перед его запуском.

wget -qO- http://server-ip/install > script 
less script 
sudo sh script 

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

+2

И особенно с людьми, которые делают такие вещи, как [Обнаружение использования стороны «curl | bash»] (https://www.idontplaydarts.com/2016/04/detecting-curl-pipe-bash-server-side/) it умнее никогда этого не делать (это никогда не было умным, но сейчас оно еще менее умное). –

Смежные вопросы