Строки заголовков, возвращаемые командами curl
, имеют ^M
перед новой строкой. Вы можете изменить if
, чтобы использовать регулярное выражение:
if [[ "$a" =~ "Server: cloudflare-nginx" ]]; then
echo "This connection is going via CloudFlare"
else
echo "This connection is NOT going via CloudFlare"
echo "$a"
fi
Вы также можете удалить \r
, изменив строку:
a=$(cat file1.txt | tr -d '\r' | grep '^Server:');
Уязвимость, но не такого типа, как вы упомянули.
Пользователь, который может создать и запустить произвольный док-контейнер, может создать контейнер с сопоставленной частью файловой -хост-системы. Затем они могут в контейнере, работающем от имени пользователя root, создать корневую программу setuid на диске. Затем с хоста они могут запустить это, чтобы получить привилегии root.
Это хороший вопрос, но на него очень трудно ответить, потому что он очень открытый.
Сосредоточившись на части «код может выполняться в корневом пространстве имен», это зависит от того, что вы подразумеваете под «кодом»:
То, что #2 выше, означает, что они осведомлены о пространстве имен -посредством абстракций процесса -. т.е. их запись в таблице процессов указывает на части пространства имен (, например. корневая файловая система ), прямо или косвенно. С этого момента, пока что-то на стороне ядра -работает, оно должно быть «изолировано», потому что оно всегда будет обращаться к правильному набору данных.
Однако это не означает, что ошибки не могут повлиять на все аспекты работающей системы, включая другие контейнеры.
Если вы хотите запустить что-то в изолированной системе, вам понадобится полнофункциональная виртуальная машина или Linux в пользовательском пространстве. Контейнеры предназначены для изоляции процессов и того, что они видят и к чему могут получить доступ. Когда есть ошибка, они могут выйти за пределы своих ограничений, точно так же, как обычный процесс может в конечном итоге запустить код от имени пользователя root.
[1] Почти все, что связано с системой, делается с помощью системных вызовов. Например. открытие файла, запись в сокет, отправка сигнала и т. д.