предотвратить изменение прав доступа в монтировании с контейнером без root
В корневых контейнерах решение этой проблемы запускается с помощью--user "$(id -u):$(id -g)"
однако это не работает для систем без root (rootless docker или в моем случае podman):
$ mkdir x
$ podman run --user "$(id -u):$(id -g)" -v "$PWD/x:/x:rw" ubuntu:focal bash -c 'echo hi >> /x/test'
bash: /x/test: Permission denied
поэтому для контейнерных систем без корней я должен удалить --user
поскольку пользователь root автоматически сопоставляется с вызывающим пользователем:
$ podman run -v "$PWD/x:/x:rw" ubuntu:focal bash -c 'echo hi >> /x/test'
$ ls -al x
total 12
drwxr-xr-x 2 asottile asottile 4096 Sep 3 10:02 .
drwxrwxrwt 18 root root 4096 Sep 3 10:01 ..
-rw-r--r-- 1 asottile asottile 3 Sep 3 10:02 test
но, поскольку теперь это пользователь root, они могут изменить владельца на пользователей, которых невозможно удалить вне контейнера:
$ podman run -v "$PWD/x:/x:rw" ubuntu:focal bash -c 'mkdir -p /x/1/2/3 && chown -R nobody /x/1'
$ ls -al x/
total 16
drwxr-xr-x 3 asottile asottile 4096 Sep 3 10:03 .
drwxrwxrwt 18 root root 4096 Sep 3 10:01 ..
drwxr-xr-x 3 165533 asottile 4096 Sep 3 10:03 1
-rw-r--r-- 1 asottile asottile 3 Sep 3 10:02 test
$ rm -rf x/
rm: cannot remove 'x/1/2/3': Permission denied
Итак, мой вопрос: как разрешить запись на монтирование, но предотвратить смену владельца для контейнеров без root?
0 ответов
Я думаю
--user $(id -u):$(id -g) --userns=keep-id
получите то, что хотите.
$ id -un
erik
$ id -gn
erik
$ mkdir x
$ podman run -v "$PWD/x:/x:Z" --user $(id -u):$(id -g) --userns=keep-id docker.io/library/ubuntu:focal bash -c 'mkdir -p /x/1/2/3 && chown -R nobody /x/1'
chown: changing ownership of '/x/1/2/3': Operation not permitted
chown: changing ownership of '/x/1/2': Operation not permitted
chown: changing ownership of '/x/1': Operation not permitted
$ ls x
1
$ ls -l x
total 0
drwxr-xr-x. 3 erik erik 15 Sep 6 19:34 1
$ ls -l x/1
total 0
drwxr-xr-x. 3 erik erik 15 Sep 6 19:34 2
$ ls -l x/1/2
total 0
drwxr-xr-x. 2 erik erik 6 Sep 6 19:34 3
$
Что касается удаления файлов и каталогов, которые не принадлежат вашим обычным UID и GID (но из дополнительных диапазонов в /etc/subuid и / etc / subgid), вы можете использовать
podman unshare rm filepath
и
podman unshare rm -rf directorypath