Подробный гайд: Пошаговая настройка прав, AppArmor и SELinux для libvirt в Linux

Гайд по решению ошибки доступа qemu при создании пула в virt-manager. Пошаговая настройка прав, AppArmor и SELinux для libvirt в Linux.

2026.07.25                  


Подробный гайд: Пошаговая настройка прав, AppArmor и SELinux для libvirt в LinuxПодробный гайд: Пошаговая настройка прав, AppArmor и SELinux для libvirt в Linux Ошибка «не удалось определить пул: доступ запрещён: доступ запрещён "qemu"» (или access denied "qemu") в virt-manager означает, что системный пользователь, от имени которого запускаются виртуальные машины (qemu в Fedora/RHEL или libvirt-qemu в Ubuntu/Debian), не имеет прав на запись в указанную директорию, либо этот доступ блокируется подсистемами безопасности ядра (AppArmor или SELinux).


Шаг 1. Проверка базовых прав UNIX (Для всех дистрибутивов)

Даже если вы настроили безопасность, базовые права файловой системы должны позволять пользователю qemu (или группе libvirt-qemu / kvm) читать, писать и выполнять (для прохождения по директориям) путь к пулу.

1. Проверьте права на всю цепочку директорий от корня до вашего пула:

   namei -om /путь/к/вашему/пулу

Обратите внимание:

У каждой родительской директории в списке должен быть флаг x (выполнение/проход) для всех, или пользователь qemu должен входить в группу, которой принадлежат эти директории.


2. Выдайте правильные права на саму папку пула. Замените libvirt-qemu на qemu, если вы используете Fedora/RHEL:

   sudo chown -R $USER:libvirt-qemu /путь/к/вашему/пулу
   sudo chmod -R 775 /путь/к/вашему/пулу

(Если пул находится в /home/ваш_пользователь/..., убедитесь, что у домашней папки есть права на проход, либо создайте пул в /mnt/ или /opt/, что настоятельно рекомендуется).


Шаг 2. Настройка AppArmor (Для Ubuntu, Debian, Linux Mint, Pop!_OS)

В дистрибутивах на базе Debian/Ubuntu AppArmor по умолчанию запрещает libvirtd и qemu обращаться к любым папкам, кроме стандартных (например, /var/lib/libvirt/images). Если вы создаете пул в другом месте, AppArmor его заблокирует.


Как добавить папку в белый список AppArmor:

1. Откройте файл локальных переопределений AppArmor для libvirt в текстовом редакторе (например, nano):

   sudo nano /etc/apparmor.d/local/usr.sbin.libvirtd

(Если файл пуст или не существует, это нормально, просто создайте его).


2. Добавьте в конец файла следующие две строки (замените путь на ваш):

   /путь/к/вашему/пулу/ r,
   /путь/к/вашему/пулу/** rwk,

Важно:

Первая строка разрешает чтение самой директории, вторая — рекурсивно чтение/запись/блокировку файлов внутри неё.


3. Сохраните файл (Ctrl+O, Enter, Ctrl+X в nano) и перезагрузите профиль AppArmor:

   sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.libvirtd

Альтернативно, можно просто перезагрузить службу: sudo systemctl reload apparmor.


4. Попробуйте создать пул в virt-manager снова.


Шаг 3. Настройка SELinux (Для Fedora, RHEL, CentOS, Rocky, Alma)

Если вы используете дистрибутив на базе Red Hat, то проблему создает SELinux, так как он не позволяет qemu писать в директории без специального контекста безопасности.


Как назначить правильный контекст SELinux:

1. Установите утилиты semanage, если их нет (для Fedora):

   sudo dnf install policycoreutils-python-utils

2. Добавьте правило для вашего пути (замените путь на ваш):

   sudo semanage fcontext -a -t virt_image_t "/путь/к/вашему/пулу(/.*)?"

3. Примените новый контекст к файлам и папкам:

   sudo restorecon -Rv /путь/к/вашему/пулу

4. Проверьте, что контекст изменился:

   ls -Z /путь/к/вашему/пулу

В выводе должно быть virt_image_t. После этого virt-manager должен заработать.


Шаг 4. «Ядерный» вариант (Отключение драйвера безопасности)

Если вам не хочется настраивать права и AppArmor/SELinux, и вы работаете на домашнем ПК (не на публичном сервере), можно отключить проверку безопасности для libvirt.


Внимание:

Это снижает уровень изоляции безопасности. Делайте это только если понимаете риски.

1. Откройте конфигурационный файл QEMU:

   sudo nano /etc/libvirt/qemu.conf

2. Найдите строку #security_driver = "apparmor" (или "selinux").


3. Раскомментируйте её (уберите #) и измените значение на none:

   security_driver = "none"

4. Перезапустите службу libvirt:

   sudo systemctl restart libvirtd

Альтернатива: Использование стандартного пути

Если вы не хотите возиться с настройкой прав для кастомных директорий, самый простой и беспроблемный путь — создать пул хранения в стандартной директории libvirt, которая уже имеет все нужные права и настройки безопасности

«из коробки»:

  • Путь: /var/lib/libvirt/images
  • В virt-manager при создании пула просто выберите этот путь.

Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.


Статью подготовил: Денис Аверко @Nymexis г. Омск

Комментарии

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