LINUX.ORG.RU
ФорумAdmin

монтирование данных в rootless-контейнер с rootless-пользователем внутри

 


0

1

Ситуация первая: Я (пользователь с uid 1000) запускаю контейнер с root-пользователем внутри, примонтировав каталог из своего рабочего /home:

[me@~/test]$ ls -l data
total 0
-rw-rw-r--. 1 me me 0 Oct  3 15:17 example
[me@~/test]$ podman run -it -v $PWD/data:/data:z fedora:30
[root@139fb9d3a58d /]# touch /data/example-from-inside
[root@139fb9d3a58d /]# ls -l /data
total 0
-rw-rw-r--. 1 root root 0 Oct  3 13:17 example
-rw-r--r--. 1 root root 0 Oct  3 13:19 example-from-inside
[root@139fb9d3a58d /]# exit
[me@~/test]$ ls -l data
total 0
-rw-rw-r--. 1 me me 0 Oct  3 15:17 example
-rw-r--r--. 1 me me 0 Oct  3 15:19 example-from-inside

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

Ситуация вторая: Я (пользователь с uid 1000) запускаю контейнер с пользователем c id 1000 внутри, примонтировав каталог из своего рабочего /home:

[me@~/test]$ podman run -it -v $PWD/data:/data:z f30-user
[testuser@babbf8e949fa ~]$ ls -l /data
total 0
-rw-rw-r--. 1 root root 0 Oct  3 13:17 example
-rw-r--r--. 1 root root 0 Oct  3 13:19 example-from-inside
[testuser@babbf8e949fa ~]$ id
uid=1000(testuser) gid=1000(testuser) groups=1000(testuser)
[testuser@babbf8e949fa ~]$ touch /data/example-from-inside-with-uid
[testuser@babbf8e949fa ~]$ exit
[~/test]$ ls -l data
total 0
-rw-rw-r--. 1 me     me     0 Oct  3 15:17 example
-rw-r--r--. 1 me     me     0 Oct  3 15:19 example-from-inside
-rw-rw-r--. 1 100999 100999 0 Oct  3 15:37 example-from-inside-with-uid

Не прокатит, потому что юзер хоста всё равно мапится на рута. Соответственно доступ из контейнера к примонтированным данным ограничен, а файлы созданные внутри контейнера мапятся на высокие id на хосте.

Но у podman есть магическая опция --userns=keep-id

podman run -it -v $PWD/data:/data:z --userns=keep-id f30-user

При таком запуске пользователь с id 1000 на хосте замапится на пользователя с id 1000 внутри и всё снова красиво и работает.

Ситуация третья: Я (пользователь с uid 1000) запускаю контейнер с пользователем c id 1005 внутри, примонтировав каталог из своего рабочего /home.

--userns=keep-id не спасет потому что id внутри и снаружи разный, нужно использовать --uidmap

И в этот момент в доках podman-а происходит квантовый скачок и они перестают говорить человеческим языком, и либо ударяются в теорию user namespaces, либо посылают в toolbox.

Поэтому вопрос к тем кто понял: как должен выглядеть uidmap для описанного простейшего случая?

vrutkovs ?

★★★★★

Последнее исправление: alpha (всего исправлений: 1)

Ответ на: комментарий от vrutkovs

http://man7.org/linux/man-pages/man1/newuidmap.1.html

Спасибо, тут понятнее.

Соответственно `uid` = `1005`, `loweruid` = `1000` и рейндж - минимум 1

то есть "--uidmap 1005:1000:1"

А что будет с root в таком случае? если я например внутри контейнера через sudo что-нибудь с root-правами создам?

alpha ★★★★★
() автор топика
Ответ на: комментарий от alpha

Рут останется рутом - мы меняем id только у 1000 и 1005.

Но это все исключительно теория, махинации с uid я не проводил и сам плохо понимаю как на самом деле user namespaces работают

vrutkovs ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.