Делитесь группами с контейнерами Podman

Вопрос или проблема

У меня есть проблемы с предоставлением доступа к некоторым каталогам для конкретного контейнера, который доступен некоторым группам, управляемым извне (LDAP).

При использовании podman run я могу использовать опцию --groups-add keep-groups. Другой вариант, как объяснено здесь, — использовать --annotation run.oci.keep_original_groups=1.


Дело в том, что я хочу использовать podman compose up вместо этого из соображений удобства.

Поскольку некоторые группы являются внешними, я не могу смонтировать /etc/group.

Я пробовал разные варианты, изменяя docker-compose.yml с помощью group_adds (что позволяет мне добавить определенные группы к пользователю, но они не распознаются хостом, и если я создаю эту группу в Dockerfile с тем же GID группы хоста, она ведет себя как новая группа), а также используя podman compose --pod-args="...", что возвращает либо неизвестный флаг --group-add, либо --annotation.

Ответ или решение

При работе с контейнерами Podman и необходимостью предоставления доступа к определённым директориям для групп, управляемых извне (например, через LDAP), может возникнуть ряд сложностей, особенно при попытке использовать podman compose. В этом ответе мы рассмотрим основные аспекты, связанные с использованием групп в Podman, включая возможные решения и рекомендации для достижения вашей цели.

Проблемы с управлением доступом и группами

Ваша проблема заключается в том, что при использовании podman run вы можете с лёгкостью добавлять группы с помощью опции --groups-add keep-groups и аннотации --annotation run.oci.keep_original_groups=1. Однако при попытке использовать podman compose up вы сталкиваетесь с ограничениями, связанными с отсутствием аналогичных параметров.

Использование podman compose

К сожалению, команда podman compose не поддерживает прямое добавление групп через параметры, как это делается в podman run. Это значительно усложняет доступ к директориям, если ранее использовавшиеся методы не работают.

  1. Файл docker-compose.yml: Как вы заметили, использование group_adds в файле конфигурации не решает проблему, так как группы не распознаются, и создание группы в Dockerfile, даже с тем же GID, не позволяет её правильно идентифицировать.

  2. Использование аннотаций: Подобно тому, как это делается в podman run, добавление аннотаций для группы в podman compose может не поддерживаться, так как --pod-args может вернуть ошибку о неизвестном флаге. На данный момент, podman compose не имеет адекватных механизмов для передачи этих опций в контейнеры.

Возможные решения

1. Использование отдельного скрипта для запуска

Одним из рабочих решений может быть создание оболочки (wrapper script), которая будет сначала настраивать нужные группы, а затем запускать контейнеры через Podman. Например:

#!/bin/bash

# Добавление групп
podman run --groups-add your_group --annotation run.oci.keep_original_groups=1 your_image

Таким образом, вы можете обойтись без podman compose, но тем не менее обеспечить необходимые параметры.

2. Создание специального Dockerfile

Если это допустимо, вы можете создать Dockerfile, который настраивает окружение с необходимыми группами, хотя это не всегда возможно, особенно если группы управляются LDAP.

FROM your_base_image

RUN groupadd -g GID your_group_name

Однако, как вы уже заметили, это решение может не решить проблемы с доступом к внешним группам.

3. Настройка доступа к директориям

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

Заключение

Работа с группами и доступом в Podman и podman compose требует понимания ограничений, связанных с управлением идентификаторами пользователей и групп. К сожалению, текущие возможности podman compose не позволяют настроить все функции, доступные при использовании podman run. Несмотря на это, с учётом предложенных решений и обходных путей, вы сможете управлять доступом к нужным директориям, сохраняя при этом возможность удобно использовать podman compose в своей работе.

Если возникнут дополнительные вопросы или необходимость тщательной настройки, не стесняйтесь обращаться за консультацией.

Оцените материал
Добавить комментарий

Капча загружается...