Продолжаем разбирать самые популярные вопросы с собеседований на DevOps. Именно этот стоит в нашем рейтинге на 5 месте, и скорее всего на интервью у вас его спросят поэтому давайте разбираться!
От кого по умолчанию запускается контейнер?
По умолчанию Docker-контейнеры запускаются от пользователя с правами суперпользователя (root) внутри контейнера. Это может быть проблемой по нескольким причинам.
1.Безопасность.
Если контейнер скомпрометирован (например, из-за уязвимости в приложении), злоумышленник может получить доступ к контейнеру с привилегиями root внутри контейнера. Хотя контейнеры изолированы от основной системы, это не полноценная изоляция как в виртуальных машинах. Если существуют уязвимости в Docker, ядре или других компонентах системы, атакующий может попытаться выйти за пределы контейнера и получить привилегии root на хосте.
2. Ошибки конфигурации.
Иногда контейнеры запускаются с флагом `--privileged`, что дает им доступ ко многим ресурсам хоста. В таком случае root внутри контейнера может выполнять опасные действия с системой хоста, такие как изменение сетевых настроек или монтирование файловых систем.
3. Принцип наименьших привилегий.
Запуск приложений с правами root нарушает этот принцип. Обычно приложениям не требуется доступ к системным ресурсам на уровне суперпользователя, и работа от имени root может привести к случайным ошибкам или злоупотреблениям.
4. Права на хосте при монтировании файловых систем.
Если контейнер монтирует директории с хостовой файловой системы, пользователи внутри контейнера с правами root могут модифицировать файлы с правами суперпользователя на хосте, что также является угрозой безопасности.
Если ты готовишься к собеседованию на devops junior или middle, то мы собрали для тебя топ из 100 вопросов с реальных интервью, которые спрашивают "железно". Для удобства каждый вопрос имеет рейтинг от 1 до 10 баллов, начиная с самых популярный переходи по этой ссылке 100 вопросов.
Выучи их и у тебя обязательно получиться успешно пройти собеседование на девопса и получить крутую работу!
Как решить эту проблему с контейнерами в Docker.
Для повышения безопасности рекомендуется использовать флаг `--user`, чтобы запускать процессы внутри контейнера от имени непривилегированного пользователя. Также можно настроить Dockerfile, используя команду `USER`, чтобы изменить пользователя по умолчанию для контейнера.