Docker --privileged
Що впливає
Коли ви запускаєте контейнер з привілеями, ви вимикаєте такі захисти:
Монтування /dev
У контейнері з привілеями всі пристрої можуть бути доступні в /dev/
. Тому ви можете втекти, монтувавши диск хоста.
Файлові системи ядра тільки для читання
Файлові системи ядра забезпечують механізм для процесу, щоб змінити поведінку ядра. Однак, коли мова йде про процеси контейнера, ми хочемо запобігти їх внесенню будь-яких змін до ядра. Тому ми монтуємо файлові системи ядра як тільки для читання всередині контейнера, що забезпечує неможливість модифікації ядра процесами контейнера.
Маскування над файловими системами ядра
Файлова система /proc вибірково записувана, але для безпеки певні частини захищені від запису та читання, накладаючи на них tmpfs, що забезпечує недоступність чутливих областей для процесів контейнера.
tmpfs — це файлова система, яка зберігає всі файли у віртуальній пам'яті. tmpfs не створює жодних файлів на вашому жорсткому диску. Тому, якщо ви демонтуєте файлову систему tmpfs, всі файли, що в ній знаходяться, втрачаються назавжди.
Linux можливості
Контейнерні движки запускають контейнери з обмеженою кількістю можливостей, щоб контролювати, що відбувається всередині контейнера за замовчуванням. Привілейовані контейнери мають всі можливості доступні. Щоб дізнатися про можливості, прочитайте:
Linux CapabilitiesВи можете маніпулювати можливостями, доступними контейнеру, не запускаючи в режимі --privileged
, використовуючи прапори --cap-add
та --cap-drop
.
Seccomp
Seccomp корисний для обмеження syscalls, які контейнер може викликати. За замовчуванням профіль seccomp увімкнено при запуску контейнерів docker, але в режимі привілейованого доступу він вимкнений. Дізнайтеся більше про Seccomp тут:
SeccompТакож зверніть увагу, що коли Docker (або інші CRI) використовуються в кластері Kubernetes, seccomp фільтр за замовчуванням вимкнений.
AppArmor
AppArmor - це покращення ядра для обмеження контейнерів до обмеженого набору ресурсів з профілями для кожної програми. Коли ви запускаєте з прапором --privileged
, ця захист вимкнена.
SELinux
Запуск контейнера з прапором --privileged
вимикає мітки SELinux, що призводить до успадкування мітки двигуна контейнера, зазвичай unconfined
, що надає повний доступ, подібний до двигуна контейнера. У безкореневому режимі використовується container_runtime_t
, тоді як у кореневому режимі застосовується spc_t
.
Що не впливає
Простори імен
Простори імен НЕ підлягають впливу прапора --privileged
. Навіть якщо у них не ввімкнені обмеження безпеки, вони не бачать усіх процесів на системі або хост-мережі, наприклад. Користувачі можуть вимкнути окремі простори імен, використовуючи прапори контейнерних движків --pid=host
, --net=host
, --ipc=host
, --uts=host
.
User namespace
За замовчуванням, контейнерні движки не використовують простори користувачів, за винятком контейнерів без кореня, які потребують їх для монтування файлової системи та використання кількох UID. Простори користувачів, які є невід'ємною частиною контейнерів без кореня, не можуть бути вимкнені і значно підвищують безпеку, обмежуючи привілеї.
References
Last updated