Как получить доступ к сертификатам в Podman без прав администратора
Работа с контейнерами может иметь свои сложности, особенно когда дело касается доступа к системным ресурсам, таким как сертификаты TLS. В данной статье мы рассмотрим, как получить доступ к общему ключу сертификата из безлетного контейнера Podman, запущенного от имени пользователя, не обладающего правами администратора.
Ситуация и предпосылки
Я запускал контейнер с помощью Podman под пользователем с идентификатором 4610. Этот пользователь входит в группу Certs (ID 1012), и его права на запись позволяют ему взаимодействовать с файлами в этой группе. Проблема заключалась в том, что ключ TLS, которому необходим был доступ, имел права на чтение только для группы, однако пользователем внутри контейнера также был 4610, который не имел прав на чтение файла, поскольку он принадлежал корню, а не пользователю, управляющему контейнером.
Настройка прав доступа
Согласно стандартным практикам, если вы хотите получить доступ к файлам, принадлежащим другому пользователю, необходимо, чтобы владелец файла или группа, к которой он принадлежит, предоставила такие права. В нашем случае на хосте ключ сертификата имел права RW-R-----
, и только группа Certs имела право на чтение. Однако при создании контейнера Podman эти права не были перенесены.
Решение проблем с доступом
Для успешного доступа к файлу сертификата можно воспользоваться одним из следующих подходов:
1. Запуск контейнера с сохранением групп
Первый вариант — использовать опцию --group_add keep-groups
при запуске контейнера с помощью podman run
. Это позволяет сохранить группы пользователя, под которым запускается контейнер.
Если вы используете Docker-Compose, внесите в конфигурацию следующую строку:
services:
service:
group_add:
- keep-groups
2. Настройка конфигурации Podman
Если вы работаете с Podman Compose, можно добавить настройки в файл конфигурации ~/.config/containers/containers.conf
:
[containers]
userns = "keep-id"
annotations=["run.oci.keep_original_groups=1"]
Этот метод будет влиять на все контейнеры пользователя и позволит сохранить оригинальные группы.
Проверка доступа к файлу ключа
Несмотря на изменения вешаемых разрешений и принадлежности, файл все равно отображался как принадлежащий группе nogroup
, однако я всё равно смог прочитать его содержимое. Это говорит о том, что есть дополнительные механизмы, которые могут позволять доступ к файлам, даже если соответствующая группа не отображается внутри контейнера.
Альтернативное решение с помощью Cron
Если предыдущие методы не дают нужного результата, можно рассмотреть создание задания Cron, которое будет проверять изменения в файлах сертификатов. Например, настройка задачи на копирование файлов сертификатов в каталог контейнера с правами доступа для пользователя 4610:
*/5 * * * * rsync /path/to/certs /path/to/podman/dir && systemctl restart podman-container.service
Заключение
Получить доступ к сертификату в безлетном контейнере Podman можно с помощью различных настроек и методик. Первым шагом стоит уделить внимание правильной конфигурации групп и прав доступа, а если это не срабатывает, использование Cron — это достаточно простое и эффективное решение. Рекомендуется тестировать каждое из решений, чтобы найти наиболее подходящее для вашей ситуации.