Получаем доступ из машины KVM к файлам на хосте

⏱ 3 мин. на чтение

Пояснение: Хост это просто наш рабочий компьютер на котором я славно поставил Debian 13 (testing). Из ВМ (виртуальной машины) на KVM надо получить доступ к этим файлам. Как установить и оптимально настроить ВМ на KVM это отдельная тема. Пусть это уже есть. И так, имеем ВМ на KVM, где установлено всё нужное для доступа к государственным сайтам, шифрование Криптофит, электронный документооборот и отчётность Saby, «православный браузер Chromium-GOST», необходимые плагины и драйвера и электронные подписи.

Внутри ВМ всё готово, всё работает и подписывает документы. Надо получать доступ к документам на хосте, чтобы их отправлять по каналам ЭДО (электронного документо-оборота).

Правим права, если директория на хосте с документами в домашнем каталоге пользователя:

# 1. Установите утилиту ACL (если ещё нет)
sudo apt install acl

# 2. Дайте право на "проход" (x) через вашу домашнюю папку
# Без этого QEMU не сможет добраться до вложенных папок
sudo setfacl -m u:libvirt-qemu:rx /home/username

# 3. Дайте права на папку Sync
sudo setfacl -m u:libvirt-qemu:rwx /home/username/Sync

# 4. Дайте права на ВСЁ содержимое папки Sync (рекурсивно)

# тут флаг -R даёт рекурсию 
sudo setfacl -R -m u:libvirt-qemu:rwx /home/username/Sync/

# а теперь применим флаг -d и это правило по дефолту применяется к новым объектам.
sudo setfacl -R -d -m u:libvirt-qemu:rwx /home/username/Sync/

Вместо ACL можно добавить пользователя libvirt-qemu в группу username, но это менее безопасно, так как откроет доступ ко всем вашим файлам. ACL — точечное и правильное решение. Или как говориться — вам решать. Или выполните две команды с -R и -d, и проблема с правами будет решена навсегда — и для текущих, и для будущих файлов!

Перед запуском ВМ создайте точку монтирования ресурса. Дам пояснения к форме ниже на скриншоте:

  • Путь на хосте: это путь к директории, которую предоставляете для доступа из ВМ, выше мы давали на неё права для KVM.
  • Путь в гостевой ОС: это совсем не путь, а название этой шары, и поэтому названию будем монтировать, просто придумайте лаконичное имя латинскими буквами.
  • Режим чтения не даст изменять, что либо на хосте, только читать.

Внутри виртуальной машины монтируем ресурс:

# Создайте точку монтирования (именно сюда и примонтируем директорию из хоста)
mkdir -p /home/username/Sync

# Смонтируйте (используя метку, которую вы задали в настройках, например 'sync_share')
sudo mount -t 9p -o trans=virtio,version=9p2000.L,uid=1000,gid=1000 sync_share /home/username/Sync

Это монтирование будет действовать на текущий сеанс работы ВМ. Но порой надо всегда иметь доступ к хосту. Это делается внутри ВМ через fstab, что будет монтировать при каждом старте ВМ.

# Отредактируем fstab:
sudo nano /etc/fstab

# В конец файла добавим строку:
sync_share /home/username/Sync 9p trans=virtio,version=9p2000.L,uid=1000,gid=1000,nofail 0 0

# Напомню: Сохраните: Ctrl+O → Enter → Ctrl+X 

пояснение:

  • sync_share — так называли эту шару в настройках ВМ
  • username — имя пользователя на хосте, где ваши директории, к которым предоставляет доступ

Проверьте синтаксис путём монтирования (ошибок быть не должно):

sudo mount -a

Если команда выполнилась молча и без вывода — всё готово. Теперь при каждом запуске ВМ папка будет подключаться сама.

Пожалуй всё.

Для заметки на память мне тут достаточно.
Если кому надо уточнения — спросите в комментариях.
Бай!