Какие части ядра не поддерживают пространство имен?

Строки заголовков, возвращаемые командами 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:');
1
28.09.2019, 19:05
2 ответа

Уязвимость, но не такого типа, как вы упомянули.

Пользователь, который может создать и запустить произвольный док-контейнер, может создать контейнер с сопоставленной частью файловой -хост-системы. Затем они могут в контейнере, работающем от имени пользователя root, создать корневую программу setuid на диске. Затем с хоста они могут запустить это, чтобы получить привилегии root.

1
27.01.2020, 23:30

Это хороший вопрос, но на него очень трудно ответить, потому что он очень открытый.

Сосредоточившись на части «код может выполняться в корневом пространстве имен», это зависит от того, что вы подразумеваете под «кодом»:

  • Часть пользовательского пространства должна быть изолирована даже без пространств имен. т.е. весь код, который вы пишете, выполняется отдельно от всего остального,независимо от пространств имен
  • Само ядро, когда оно вызывается через системные вызовы, всегда имеет доступ ко всему (, если только это не сама виртуальная машина ). Это означает, что части ядра никак не изолированы. [1]

То, что #2 выше, означает, что они осведомлены о пространстве имен -посредством абстракций процесса -. т.е. их запись в таблице процессов указывает на части пространства имен (, например. корневая файловая система ), прямо или косвенно. С этого момента, пока что-то на стороне ядра -работает, оно должно быть «изолировано», потому что оно всегда будет обращаться к правильному набору данных.

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

Если вы хотите запустить что-то в изолированной системе, вам понадобится полнофункциональная виртуальная машина или Linux в пользовательском пространстве. Контейнеры предназначены для изоляции процессов и того, что они видят и к чему могут получить доступ. Когда есть ошибка, они могут выйти за пределы своих ограничений, точно так же, как обычный процесс может в конечном итоге запустить код от имени пользователя root.

[1] Почти все, что связано с системой, делается с помощью системных вызовов. Например. открытие файла, запись в сокет, отправка сигнала и т. д.

1
27.01.2020, 23:30

Теги

Похожие вопросы