Pull to refresh

Comments 12

Да, вы правы.
Частично такую проблему можно решить с помощью PSP: kubernetes.io/docs/concepts/policy/pod-security-policy/#volumes-and-file-systems, а именно AllowedHostPaths. Однако это тоже не защита от симлинков. Мы добавим данный комментарий в статью.

Спасибо.

Вообще, я имел ввиду защиту от запуска под рутом :-)

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

Проблема только лишь в том, что не нужно разрешать HostPath.
Выпиливаем HostPath — и уязвимость исчезает.
Действительно же — контейнеру нефиг что-либо делать на файловой системе хоста.
А вот как при этом организовать локальный сторидж верно — вопрос, который остаётся за кадром.

Сейчас нет возможности проверить: а классический chroot имеет подобную багофичу?

Здесь дело не в chroot, а в том что мы одну и ту же символьную ссылку маунтим два раза: внутри контейнера мы переписываем ссылку на /etc/shadow, а читаем её уже с помощью kubectl logs. Выхода за пределы chroot jail не происходит.


Прочитать /etc/shadow хоста изнутри пода не получится.


Все дело в том, что не нужно позволять кому-попало маунтить что-угодно с хостов.


Нормальный подход в данной ситуации:


  • с помощью PodSecurityPolicy запрещаем запуск подов под рутом;
  • с помощью PodSecurityPolicy запрещаем все volume кроме ConfigMap, Secret, PersistentVolumeClaim + какие вам необходимы, но не HostPath/Local;
  • с помощью RBAC запрещаем пользователю создавать PersistentVolume, по требованию создаем для него.

Если уж заговорили про безопасность, то добавить к перечисленному еще и ResourceQuota и NetworkPolicy.

Или юзать опеншифт, в котором все это включено по дефолту
Если я правильно понял, само по себе монтирование /var/log через hostPath даже с правом записи не несет в себе описанной уязвимости (так работает, например, стандартный fluentd). Нужно запустить под именно привилегированным, а это достаточно редко нужно.

Если Вы имеете в виду priveleged, то этого не нужно. Нужно, чтобы пользователь внутри контейнера был root. А это происходит достаточно часто.

Я бы сказал, что по умолчанию.

Таковых 99% образов на докерхабе (вывод — докерхаб — помойка).

Sign up to leave a comment.