Привязать точку монтирования от хоста к непривилегированному контейнеру LXC
Чтобы пробросить HDD(SSD) в LXC контейнер, на самом деле папку на хосте, нужно выполнить команду:
pct set 102 -mp1 /mnt/mydisk,mp=/mnt/datapct - Proxmox Container Toolkit, утилита для управления контейнерами.
set - команда выбора контейнера.
102 - номер контейнера.
-mp1 - опция указывающая номер точки монтирования. Первая начинается с 0, потом 1, потом 2 и так далее, если хотите несколько дисков пробросить в контейнер.
/mnt/mydisk - путь, куда у вас примонтирован диск (ну либо вы просто папку с хоста хотите пробросить в контейнер).
mp=/mnt/data - путь внутри контейнера, куда будет отображаться диск. Эту директорию надо предварительно создать, если её нет.
Изменение сопоставления LXC UID/GID по умолчанию
Примечание
Если гостевая система будет скомпрометирована, пользователь/группа с идентификаторами, сопоставленными с гостевой системой на хосте, также будут скомпрометированы. Это может быть проблематично, если скомпрометированный пользователь/группа используется не только для доступа к точке монтирования на хосте.
Конфигурация на хосте
Создадим пользователя который будет владельцем нашей папки:
useradd -M -s /sbin/nologin -u 1000 usernameКлюч -M заводит пользователя без создания домашнего каталога, а -s /sbin/nologin исключает возможность входа такого пользователя в систему, -u устанавливает UID.
Меняем владельца нашей папки:
chown username:username /mnt/mydisk -RУстанавливаем права:
chmod u=rwx,g=rwx,o=rx,g+s /mnt/mydisku=rwx — владелец получает права на чтение, запись и выполнение.
g=rwx — группа получает права на чтение, запись и выполнение.
o=rx — остальные получают права на чтение и выполнение.
g+s — установка setgid бита.
Что делает setgid?
Для папок: Если setgid бит установлен на папку, все файлы и подкаталоги, созданные внутри этой папки, будут наследовать группу владельца папки, а не группу пользователя, который создал файл. Это полезно для совместного доступа к файлам в группе, прежде всего нужно для корректной работы Samba.
Далее мы добавляем root:1000:1 к /etc/subuid и /etc/subgid. Это позволит демону LXC использовать наш желаемый uid/gid на хосте:
echo "root:1000:1" >> /etc/subuid
echo "root:1000:1" >> /etc/subgidНаконец, нам нужно изменить конфигурацию контейнера, добавив пользовательское сопоставление.
По умолчанию конфигурация для контейнера с идентификатором 102 будет находиться по адресу /etc/pve/lxc/102.conf, открываем:
nano /etc/pve/lxc/102.confДобавляем пользовательскую информацию о сопоставлении LXC:
lxc.idmap: u 0 100000 1000
lxc.idmap: g 0 100000 1000
lxc.idmap: u 1000 1000 1
lxc.idmap: g 1000 1000 1
lxc.idmap: u 1001 101001 64535
lxc.idmap: g 1001 101001 64535Ниже приведено объяснение того, что делает каждая комбинация сопоставлений:
(u/g) 0 100000 1000- сопоставить 1000 идентификаторов, начинающихся с 0, с идентификаторами, начинающимися с 100000. Это означает, что ROOT UID/GID 0:0 на госте будет сопоставлен с 100000:100000 на хосте, 1:1 будет сопоставлен с 100001:1000001 и т. д.(u/g) 1000 1000 1- сопоставить пару UID/GID 1000:1000 с 1000:1000 на хосте. Номер 1 нужен для указания того, что мы сопоставляем только один ID, а не диапазон.(u/g) 1001 101001 64535- сопоставить 64535 идентификаторов, начинающихся с 1001, с идентификаторами, начинающимися с 101001. Это означает, что пара UID/GID 1001:1001 на гостевой системе будет сопоставлена с 101001:101001, 1002:1002 с 101002:101002 и так далее до 65535:65535 с 165535:165535.
Конфигурация в гостевой системе
Если пользователя 1000:1000 нет, то создадим аналогично хосту:
useradd -M -s /sbin/nologin -u 1000 usernameИ установим владельца и права:
chown username:username /mnt/data -R
chmod u=rwx,g=rwx,o=rx,g+s /mnt/dataПри такой настройке пользователь с идентификатором 1000 или любой пользователь, являющийся членом группы, теперь может иметь доступ к /mnt/data.