Назад | Перейти на главную страницу

Запустите initdb с пользователем, имеющим права на запись, но не владельцем каталога pgdata

Я запускаю initdb в образе докера (официальное изображение Postgres) в среде Openshift с установленной строгой политикой безопасности пользователь, который будет запускать контейнер, будет иметь случайный UID, но GID будет равен 0, поэтому я могу утверждать, что у процесса есть все необходимые права.

Я протестировал свой контейнер с пользователем postgres с GID, измененным на 0, и все работает нормально. Последний тест с политикой ANYUID привел к сбою образа:

initdb: не удалось изменить права доступа к каталогу

что ясно: пользователь имеет полные права на запись в каталог, но не является ни владельцем, ни root. Однако я не понимаю, ПОЧЕМУ initdb нужно менять владельца каталога, прав записи должно быть достаточно.

В initdb должен вызываться после запуска контейнера, потому что pgdata может находиться на томе, а политика anyuid утверждает общую безопасность кластера, поэтому я не хочу ее отключать. Я знаю, что обычно можно запускать образы докеров Postgres с этой политикой, потому что RedHat предоставляет для этого модифицированные образы, но их можно использовать только в OpenShift Enterprise.

Как разрешить initdb запускать процесс от имени любого пользователя с необходимыми правами записи, но не являющегося ни владельцем, ни root? Нужно ли перекомпилировать исходники со специальными флагами? Я узнал, что RedHat использует пользовательскую упакованную версию Postgres, но я не узнал, изменили ли они исходники ...