Смонтируйте набор данных ZFS в непривилегированных контейнерах

Сначала немного информации о моей конфигурации:

  • Ubuntu 15.10
  • Пул ZFS создается
  • Контейнеры LXC сохранены в pool/lxc
  • Набор данных, созданный в pool/mydataset принадлежавший user1

Теперь мне нужен один из контейнеров для доступа к файлам/папкам в pool/mydataset. Я попробовал следующее:

  • Созданный пользователь user1 в контейнере
  • Отредактированный pool/lxc/mycontainer/config и добавил:

    lxc.mount.entry = /pool/mydataset mnt/mydataset none rw,bind 0 0
    

Когда я запускаю контейнер, набор данных смонтирован, но ls -la /mnt/mydataset на контейнерных шоу nobody:nogroup вместо user1:user1, что означает, что все файлы только для чтения.

Какая-либо идея, как получить корректные полномочия в смонтированном каталоге?

4
задан 15 February 2016 в 16:14

1 ответ

Если действительно mycontainer непривилегированно, затем у его владельца не могло бы быть доступа к пути /pool/mydataset. У пользователей в непривилегированных контейнерах есть свое смещение uid на хосте контейнерным владельцем uid, таким образом, user1 в контейнере не то же как user1 на хосте.

  1. Можно проверить то, с чем пользователь на хосте владеет контейнером sudo ls -l /pool/lxc | grep mycontainer (sudo не мог бы требоваться, в зависимости от /pool/lxcполномочия, но ls должно быть достаточно безопасно работать как корень так или иначе. Продвижение, опустить sudo где желательный, если полномочия делают это возможным). Например, я добираюсь

    drwxr-xr-x 4 100000 100000    5 Apr 22 11:37 mycontainer
    

    показ, что uid и ценуроз владельца контейнера 100000 (мы видим uid вместо имени, так как пользователь не существует на хосте).

  2. Тест /pool/mydatasetполномочия с sudo ls -l /pool | grep mydataset (или sudo ls -l /pool/mydataset для его содержания).

    Если Вы хотите, чтобы файлы были перезаписываемы из контейнера, просто необходимо удостовериться какой бы ни пользователь внутри mycontainer Вы хотите смочь записать в /pool/mydataset имеет полномочия сделать так на хосте. Например, root на mycontainer имеет uid 100000 на хосте, и если user1 в mycontainer имеет uid 1001 (тест с id user1 из контейнера), затем на хосте его uid был бы 101001.


Вы могли бы сделать это, позволив всем на хосте записать в /pool/mydataset с

sudo chmod -R o+w /pool/mydataset

(примечание: это добавит полномочия рекурсивно внутри /pool/mydataset), или возможно лучше удостоверяться пользователи в группе user1 имейте полномочия записи (установите его рекурсивно с sudo chmod -R g+w /pool/mydataset если не), то добавьте владельца контейнера для группировки user1 с

sudo usermod -a -G user1 <username>

(В моем случае выше, мы видели, что никакой пользователь на хосте не владеет контейнером, таким образом, мы должны сначала создать пользователя с uid и ценурозом 100000 с

adduser --no-create-home --uid 100000 --disabled-password --disabled-login <username>

Конечно, Вы могли бы хотеть дать полномочия только user1 в контейнере поэтому создайте пользователя с его хостом uid и добавьте это для группировки user1 на хосте, например, 101001.)

Можно также пойти ядерные и дать владение /pool/mydataset кому: mycontainerкорень с

sudo chown -R 100000:100000 /pool/mydataset

но это могло смешать с другими пользователями на хосте, получающем доступ к данным.


После того как Вы сделали это, монтирование, которое Вы устанавливаете, должно позволить полномочия записи внутри mycontaier, как желаемый.

4
ответ дан 17 November 2019 в 04:42

Другие вопросы по тегам:

Похожие вопросы: