Измените права `/etc/passwd` в файле Dockerfile

#docker #kubernetes #openshift #podman #passwd

Вопрос:

Я создаю образ Podman для Openshift, и у меня проблема с разрешениями.

Следуя этому руководству, и поскольку Openshift назначает случайный UID и GID «0» при запуске контейнеров, я пытаюсь chmod /etc/passwd сделать его доступным для записи его группой и добавить в него моего пользователя Openshift во время выполнения; но, похоже, я не всегда chmod могу использовать этот /etc/passwd файл.

Минимальный Докер-файл:

 FROM ubuntu:20.04

USER root

RUN ls -l /etc/passwd
RUN chmod g w /etc/passwd
RUN ls -l /etc/passwd
 

При построении ( sudo podman build . -t test-image ) я вижу правильные права на /etc/passwd :

 STEP 1: FROM ubuntu:20.04
STEP 2: USER root
--> Using cache 2cb48e4f8eed907e057017011e20ddc47ec8f152bb7afe34ecf6be23413cd08b
STEP 3: RUN ls -l /etc/passwd
-rw-r--r--. 1 root root 926 Sep 21 16:48 /etc/passwd
     ^
     ^
     ^
79f60398d64ece1b413fd904681ad5fd0725bae4b283abce7b7a9ea017d4ebe7
STEP 4: RUN chmod g w /etc/passwd
6ed13401ab693dbc362ec90b9c3767c1cd2244074ca4e92bd1b31b72b3e80868
STEP 5: RUN ls -l /etc/passwd
-rw-rw-r--. 1 root root 926 Sep 21 16:48 /etc/passwd
     ^
     ^
     ^
STEP 6: COMMIT test
d667b2c05818b5af3c9db85a5e7179c8e7b1c21281e31c34a871e97268716f39
 

Когда я запускаю свой контейнер с root пользователем, никаких проблем:

 [user@server]$ sudo podman run -it test-image /bin/bash
root@295ab7b72a4d:/# ls -l /etc/passwd
-rw-rw-r--. 1 root root 926 Sep 21 16:48 /etc/passwd
     ^
     ^
     ^
 

Но когда я запускаюсь со случайным пользователем, /etc/passwd права больше не меняются…

 [user@server]$ sudo podman run -it -u 1000701200:0 test-image /bin/bash
1000701200@a63d9bf9f53a:/$ ls -l /etc/passwd
-rw-r--r--. 1 root root 977 Oct 19 08:51 /etc/passwd
     ^
     ^
     ^
 

Почему права /etc/passwd зависят от пользователя, который запускает контейнер?

Заранее спасибо.

ПРАВКА 1: Это не относится к случайному файлу, который я создаю, он работает так, как ожидалось. Так что в этом файле есть что-то особенное /etc/passwd .

Комментарии:

1. Просто попытался это сделать, и с моей настройкой у файла есть права на запись в группу — я использую 3.4.0

2. Podman, похоже, автоматически добавляет пользователя в файл /etc/passwd — интересно

3. Спасибо за вашу помощь. Я использую версию 1.4.4… Может быть, в этом и проблема. Тем временем я нашел это , которое говорит, что это плохая практика и что рекомендуемым способом было бы ее использовать nss_wrapper … Так что я попробую

4. Здравствуйте @MeanStreet. Есть какие-нибудь новости?

5. Привет, никаких новостей. Я видел, что Git, связанный с руководством, которое я изначально использовал, устарел, поэтому я думаю, что это больше не лучшая практика… Но у меня не было времени на дальнейшее расследование

Ответ №1:

Версия podman была обновлена по причине — обновление до версии 3.x решило проблему.