Невозможно получить доступ к файлу в контейнере lxd с хоста - PullRequest
0 голосов
/ 22 марта 2019

У меня есть контейнер lxd с именем master. Я узнал, что его root можно найти по адресу:

/var/lib/lxd/containers/master/rootfs/home/ubuntu/

Итак, я перенес свою папку tars на этот адрес. Обратите внимание, что tars имеет два файла.

Теперь я знаю, что идентификатор пользователя и идентификатор группы tars равен root. С другой стороны, идентификатор пользователя и идентификатор группы каждого другого файла в контейнере равен 166536.

Итак, для папки и файлов я сделал sudo chown 166536 <file/folder name>, чтобы изменить идентификатор пользователя, и sudo chown :166536 <file/folder name>, чтобы изменить идентификатор группы.

Однажды я сделал это, я ожидал, что tars будет доступен из контейнера master, но этого не произошло. Кто-нибудь может сказать мне, что мне не хватает?


Вот метод, который я нашел на reddit :

Да, это был ответ, вы работаете с непривилегированным контейнером. не может видеть разрешения на хосте LXD, поэтому он выглядит как Nobody: Никто. В некотором смысле глупо, потому что вы можете смонтировать папку в Контейнер и посмотреть файлы на нем ..

Для дальнейшего использования, для тех, кто имеет эту проблему, это шаги я сделал (это может быть не правильно, но это работает)

sudo mkdir /tmp/share
adduser subsonic --shell=/bin/false --no-create-home --system --group --uid 6000 (this is a "service account")
sudo chown -R subsonic: /tmp/share
lxc exec Test -- /bin/bash
mkdir /mnt/share
adduser subsonic --shell=/bin/false --no-create-home --system --group --uid 6000 (important that the uid is the same)
exit
lxc stop Test
lxc config edit Test (add the line security.privileged: "true" right bellow config: save and exit)
lxc start Test
lxc config device add MyMusic MyLibrary disk source=/tmp/share path=/mnt/share
lxc exec Test -- /bin/bash
ls /mnt/share/ (note that the subsonic user is there)
exit

Жаль, что я не смог найти способ отобразить пользователя внутри непривилегированный контейнер. если кто-нибудь знает, дайте мне знать.

По сути, для создания общего пользователя как для хоста, так и для контейнера. Есть ли что-нибудь лучше, чем этот метод?

1 Ответ

0 голосов
/ 22 марта 2019

Когда вы открываете контейнер и делаете

whoami

Вы получите результат:

root

Итак, текущий пользователь - root, а не ubuntu. При этом адрес, на который я отправлял папку, неверен. Текущий адрес var/lib/lxd/containers/master/root/. После отправки папки проверьте uid / gid (что-то вроде 165536). Измените UID:

sudo chmod 165536 <folder-name>

и gid by:

sudo chmod :165536 <folder-name>

Как только это будет сделано, мы уверены, что пользователь контейнера root сможет получить доступ к этим файлам.

или за один шаг sudo chmod 165536:165536 <folder-name>.

...