Привязать точку монтирования от хоста к непривилегированному контейнеру LXC
Чтобы пробросить HDD(SSD) в LXC контейнер, на самом деле папку на хосте, нужно выполнить команду:
pct set 102 -mp1 /mnt/mydisk,mp=/mnt/data
pct
- 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/mydisk
u=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
.