Ситуация первая: Я (пользователь с 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 ?