Ваша политика по умолчанию для таблицы фильтров должна быть DROP, а не ACCEPT, иначе вы пересылаете все пакеты по умолчанию.
iptables -P FORWARD DROP
Есть практическая разница.
curl -sSL https://get.docker.com/ | sh
запускает curl
и sh
одновременно, соединяя выход curl
с входом sh
. curl
выполнит загрузку (примерно) так же быстро, как sh
сможет запустить скрипт. Сервер может обнаруживать нарушения в синхронизации и вводить вредоносный код, невидимый при простой загрузке ресурса в файл или буфер или при просмотре его в браузере.
В sh -c "$ (curl -sSL https://get.docker.com/)"
, curl
запускается строго перед sh
] запускается. Все содержимое ресурса загружается и передается в вашу оболочку до запуска sh
. Ваша оболочка запускает sh
только после завершения работы curl
и передает ей текст ресурса. Сервер не может обнаружить вызов sh
; он запускается только после завершения соединения. Это похоже на загрузку сценария в файл.
(Это может не иметь отношения к случаю докера, но может быть проблемой в целом и подчеркивает практическую разницу между двумя командами.)
Я считаю, что они практически идентичны. Однако бывают редкие случаи, когда они разные.
$ (cmd)
заменяется результатами cmd
. Если длина этой результирующей команды превышает максимальное значение длины аргумента, возвращаемое getconf ARG_MAX
, она усекает результат, что может привести к непредсказуемым результатам.
У варианта трубы нет этого ограничения. Каждая строка вывода команды curl
будет выполняться bash
по мере поступления из конвейера.
Но ARG_MAX обычно находится в диапазоне 256 000 символов. Для установки докера я был бы уверен, что использовал бы любой метод. : -)
In curl -sSL https://get.docker. com/ | sh
:
Обе команды, curl
и sh
, будут запущены одновременно, в соответствующих подоболочках
STDOUT от curl
будет передан как STDIN в sh
(именно это делает pipe, |
)
Тогда как в sh -c "$(curl -sSL https: //get. docker. com/)"
:
Подстановка команды, $()
, будет выполнена первой, то есть. curl
будет запущен первым в подшивке
Подстановка команды, $()
, будет заменена STDOUT от curl
sh -c
(неинтерактивный, shell без логина) выполнит STDOUT из curl
Одно из различий между двумя (, взятыми из других ответов в Интернете ), заключается в том, что если вы не загрузите весь сценарий сразу, он может прерваться на половине пути сценария в неизвестном месте и измениться. смысл выполняемой команды. Таким образом, кажется, что лучше сначала загрузить весь файл, а затем оценить его.