Подключение внешнего SSD по USB и использование его в контейнерах.

Ломаю голову уже какой день.
Есть внешний SSD подключенный по USB к MiniPC
Я бы хотел его использовать в своих контейнерах.
Отформатировал SSD в exfat и закинул на него файлы.
Смонтировал его в local porxmox-a и там я могу редактировать файлы, но при монтирование его в контейнер, файлы я могу просматривать и копировать с SSD, а вот записывать или редактировать нет.
Смонтировал его командой:

pct set 100 -mp0 /dev/sda1,mp=/root/flash

Пытался выдать права на запись и тд. Но ну ни как.
Хотел бы иметь полный доступ к нему.

Попытки поиска не чего не дали. Использую Proxmox 9.0.3.
Был бы благодарен за помощь.

up. Даже редактировать через веб-файл браузер в самохостинге не могу, даже записать на него.

Посмотрите это видео, для начала

точно /dev/sda1, эта команда монтирует блочное устройство в ввиде блочного устройства внутри контейнера, но никак не в виде смонтированной ФС

  1. примерно так на хосте
mkdir /mnt/flash
mount -t exfat /dev/sda1 /mnt/flash
chmod a+rwX -R /mnt/flash
pct set 100 -mp0 /mnt/flash,mp=/root/flash
  1. exfat не лучшая ФС для линукса, а с правами везде туго в линуксе

  2. В интернетах нашел еще вот такой вариант для /etc/fstab

UUID=5E98-37EA /home/ftagliacarne/data/media exfat defaults,uid=1000,gid=1001,fmask=0113,dmask=0002,nofail 0 0

тут указывается владелец файлов и маска прав (вычитающая)

  1. Ну и надо учитывать, что непривилегированный lxc имеет свой маппинг UID/GID и root внутри контейнера будет иметь ID 10000 или типа того на хосте, поэтому, надо указывать uid в параметрах монтирования именно после этого преобразования (самый простой способ проверить это создать папку на хосте, пробросить и создать там файл из контейнера ну и посмотерть под какими uid/gid он создался)

  2. Если не хочется следить за маппингом, то можно включить привилегированный режим lxc, но это снижает безопасность

1 лайк

Первый пример помог только когда контейнер делаешь привилегированным, только тогда я могу редактировать файлы на usb sdd
2. Да в курсе, но мне нужно что бы она монтировалась в Windows когда мне нужно было это.
3. Можно по подробнее.
Мне нужно что бы только некоторые контейнеры имели право на запись, а другие только на чтение. И те контейнеры которые на запись, скорей всего придется ставить привилегированными.

В опциях монтирования указывается uid и gid владельца файлов, я так понимаю, что это некоторое сопоставление пользователя windows и пользователя linux. Сюда можно прописать

root@pve-02:~# mkdir  106
root@pve-02:~# chmod 777 106/
root@pve-02:~# pct set 106 -mp0 /root/106,mp=/root/flash
root@pve-02:~# pct start 106
root@pve-02:~# pct console 106
root@test:/root# cd flash/
root@test:/root/flash# touch file.txt
root@test:/root/flash# ls -ln
total 0
-rw-r--r-- 1 0 0 0 Sep  9 20:15 file.txt
root@test:/root/flash# 
exit
root@pve-02:~# ls -lh 106/
итого 0
-rw-r--r-- 1 100000 100000 0 сен  9 23:15 file.txt

а потом

root@test:/root/flash# chown krom:krom file.txt 
root@test:/root/flash# ls -ln
total 0
-rw-r--r-- 1 1000 1000 0 Sep  9 20:15 file.txt
exit
root@pve-02:~/106# ls -lh
итого 0
-rw-r--r-- 1 101000 101000 0 сен  9 23:15 file.txt
  • root внутри контейнера становится 100000 на хосте
  • пользователь с id 1000 становится id с 101000

Это такой финт безопасности чтобы в случае компрометации контейнера пользователь root внутри контейнера все еще оставался обычным пользователем на хосте (учитывайте, что lxc использует cgroups, а это значит, что процессы внутри контейнера являются процессами и на хосте, но root процесс внутри контейнера не равен root на хосте и не имеет никаких расширенных привилегий)

соответственно в /etc/fstab

/dev/sda1 /mnt/flash exfat defaults,uid=100000,gid=100000,nofail 0 0

Либо меняем 100000 на 101000 если хотим, чтобы к файлам имел доступ пользователь с id 1000 внтри контейнера

pct set 106 -mp0 /mnt/flash,mp=/root/flash

1 лайк