Как правильно запустить контейнер докеров nginx в OpenShift?

RedHat OpenShift запускает контейнеры докеров как случайные идентификаторы пользователей.

Это отлично работает для некоторых контейнеров, но контейнер NGINX требует, чтобы права доступа к файлам были установлены на чтение / запись / выполнение в мире, чтобы работать.

Есть ли более правильный способ создать / запустить контейнер для использования с OpenShift?

Например, предоставляет ли OpenShift какие-либо группы или правила владения процессами?

Вот образ nginx, который я извлекаю, и команда chmod, которую мы сейчас выполняем, чтобы заставить его работать в OpenShift.

registry-nginxinc.rhcloud.com/nginx/rhel7-nginx:1.9.2

RUN chmod -R 777 /var/log/nginx /var/cache/nginx/ \
&& chmod -R 777 /var/run \
&& chmod -R 777 /etc/nginx/*

Использованная литература:

http://mailman.nginx.org/pipermail/nginx-devel/2015-November/007511.html

https://github.com/fsimorbrian/openshift-secure-routes

Почему этот маршрут openshift оказался успешным в CDK, но не работает в RHEL7 Atomic?


person brian moriarty    schedule 03.08.2016    source источник


Ответы (1)


Лучше всего запускать контейнеры не от имени пользователя root. Многие образы Docker, даже некоторые официальные, игнорируют это и требуют, чтобы вы запускались с правами root. Совет обычно заключается в том, что вы должны настроить образ так, чтобы ваше приложение не требовало root и могло запускаться как пользователь без полномочий root, который вы установили в Dockerfile. Но даже этот совет не самый безопасный вариант по нескольким причинам.

Во-первых, они скажут использовать USER username, где username, очевидно, не root. Для платформы, на которой размещено это изображение, это на самом деле не гарантирует, что ваше приложение не будет работать как root. Это связано с тем, что именованный пользователь, такой как username, может быть сопоставлен с uid из 0 в контейнере и, таким образом, все еще работает с root привилегиями. Чтобы платформа могла правильно проверить, что ваш образ не настроен для работы с root, вы должны использовать uid вместо username. Это должно быть что угодно, кроме uid 0.

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

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

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

Вы можете уменьшить меры безопасности и переопределить это, если у вас есть соответствующие привилегии, но вам следует вносить изменения только в том случае, если вы уверены, что приложение, для которого вы это делаете, имеет профиль с низким уровнем риска. То есть вы не берете произвольный образ Docker из Интернета, о котором ничего не знаете, и не позволяете ему запускаться от имени пользователя root.

Чтобы узнать больше об изменении ограничений контекста безопасности для конкретного приложения, начните с чтения:

Вы можете переопределить значение по умолчанию и сказать, что изображение может запускаться от имени пользователя, указанного в Dockerfile, или даже запускать его как root, если необходимо.

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

Общие рекомендации, как это сделать:

  • Создайте новую учетную запись пользователя в контейнере для запуска приложения от имени. Сделайте основной группой этой учетной записи идентификатор группы 0. То есть его группа будет root, а пользователь - нет. Это должен быть идентификатор группы 0, так как это то, что UNIX будет использовать по умолчанию для группы, если она работает от имени пользователя, не имеющего записи в passwd файле UNIX.
  • Любые каталоги / файлы, к которым приложению требуется доступ для чтения, должны быть доступны для чтения / доступа другим пользователям или для чтения / доступа для группы root.
  • Любые каталоги / файлы, к которым приложению требуется доступ для записи, должны быть доступны для записи группе root.
  • Приложение не должно требовать возможности привязки привилегированных портов. Технически вы можете обойти это, используя возможности Linux, но некоторые системы сборки для образов Docker, такие как автоматизированные сборки Docker Hub, похоже, не поддерживают вас с использованием аспектов возможностей Linux, и поэтому вы не сможете создавать образы, используя их, если это необходимо. использовать setcap.

Наконец, вы обнаружите, что при использовании OpenShift Local (CDK) от Red Hat или универсальной виртуальной машины для OpenShift Origin ничего из этого не требуется. Это связано с тем, что эти образы виртуальных машин были специально настроены, чтобы разрешить в качестве политики по умолчанию возможность запускать любой образ, даже образы, которые хотят запускаться от имени пользователя root. Это чисто для того, чтобы было легче опробовать произвольные загружаемые вами изображения, но в производственной системе вы действительно хотите запускать изображения более безопасным способом, с возможностью запускать изображения с правами root по умолчанию.

Если вы хотите узнать больше о некоторых проблемах, связанных с запуском контейнеров от имени пользователя root, а также о проблемах, которые могут возникнуть, когда платформа запускает контейнеры с произвольным идентификатором пользователя, ознакомьтесь с серией сообщений в блоге по адресу:

person Graham Dumpleton    schedule 04.08.2016
comment
Если вам нужна дополнительная помощь, лучше всего использовать группу Google для OpenShift по адресу groups.google .com / forum / #! forum / openshift - person Graham Dumpleton; 05.08.2016