Подробный гайд: «Доступ запрещён» к QEMU в Astra Linux
1. Диагностика — определяем, что именно блокирует
Сначала выясним источник ошибки.
# Попытка запуска и точный текст ошибки
qemu-system-x86_64 --version
# Проверка прав на /dev/kvm
ls -la /dev/kvm
# Проверка групп текущего пользователя
id
# Проверка статуса службы МРД (мандатного разграничения доступа)
sudo systemctl status mcsc
# или
sudo /usr/sbin/pdpl --status 2>/dev/null
Типичные варианты ошибок и их причины:
| Ошибка | Вероятная причина |
|---|---|
Could not access KVM kernel module: Permission denied |
Нет в группе kvm или МРД |
qemu: could not open /dev/kvm: Operation not permitted |
Мандатная метка / политика безопасности |
failed to initialize KVM: Permission denied |
AppArmor / политики ядра |
Недостаточно прав для доступа к... |
Уровень защищённости ОС (МРД) |
2. Базовое исправление — группы и права
Добавление пользователя в группы
sudo usermod -aG kvm $USER
sudo usermod -aG libvirt $USER
sudo usermod -aG disk $USER # только если используется прямой доступ к дискам
Важно: после добавления в группы нужно выйти и заново войти в сессию (или перезагрузиться), либо временно применить:
newgrp kvm
Проверка прав на /dev/kvm
ls -la /dev/kvm
# Ожидается: crw-rw---- 1 root kvm 10, 232 ... /dev/kvm
Если группа не kvm:
sudo chown root:kvm /dev/kvm
sudo chmod 660 /dev/kvm
Для постоянного применения — создаём правило udev:
sudo tee /etc/udev/rules.d/99-kvm.rules <<'EOF'
KERNEL=="kvm", GROUP="kvm", MODE="0660"
EOF
3. Мандатный доступ (МРД) — специфика Astra Linux SE
В Astra Linux Special Edition (уровни «Смоленск», «Орёл», «Брест» и выше) действует МРД (мандатное разграничение доступа). Даже при наличии групп доступ может блокироваться.
Проверка текущего уровня и меток
# Текущий уровень конфиденциальности сессии
cat /proc/self/attr/current
# Метка файла /dev/kvm
ls -Z /dev/kvm 2>/dev/null
# Просмотр политик
sudo mcsc --list 2>/dev/null || sudo pdpl --list 2>/dev/null
Типовые решения МРД
Вариант А: запуск в сессии с нужным уровнем
Если рабочий стол запущен на уровне 0 (неклассифицированный), а устройство имеет метку выше — доступ будет запрещён.
Переключите уровень сессии при входе или:
# Запуск терминала с повышенным уровнем (пример)
sudo -E su -
Вариант Б: изменение мандатных меток устройства
# Установка метки для /dev/kvm (синтаксис зависит от версии МРД)
sudo /usr/sbin/setflabel /dev/kvm 0 2>/dev/null
# или
sudo chcon system_u:object_r:kvm_device_t:s0 /dev/kvm 2>/dev/null
Вариант В: добавление исключения в политику МРД
# Просмотр текущего правила
sudo grep -r kvm /etc/mcsc/ 2>/dev/null
sudo grep -r kvm /etc/pdpl/ 2>/dev/null
# Добавление разрешения (пример, синтаксис зависит от версии)
sudo mcsc --add-rule "allow * qemu* : file { read write execute }" 2>/dev/null
sudo systemctl restart mcsc
Вариант Г: временное отключение МРД для теста (только для диагностики!)
sudo systemctl stop mcsc
# Проверяем, заработал ли QEMU
sudo systemctl start mcsc
В промышленной среде отключать МРД нельзя. Только для локализации проблемы.
4. Настройка libvirt / virt-manager
Если проблема проявляется через virt-manager или virsh:
Добавление в группу и настройка сокета
sudo usermod -aG libvirt $USER
sudo usermod -aG kvm $USER
# Проверка сокета
ls -la /var/run/libvirt/libvirt-sock
# Должен быть доступен группе libvirt
Конфигурация libvirt для доступа без root
sudo tee -a /etc/libvirt/libvirtd.conf <<'EOF'
unix_sock_group = "libvirt"
unix_sock_rw_perms = "0770"
auth_unix_ro = "none"
auth_unix_rw = "none"
EOF
sudo systemctl restart libvirtd
Проверка через virsh
virsh list --all
virsh uri # должно показать что-то вроде qemu:///system
Если virsh просит пароль или выдаёт Permission denied, проверьте:
sudo systemctl status libvirtd
journalctl -u libvirtd --since "5 minutes ago" | tail -50
5. Проверка и настройка политик безопасности ядра
AppArmor (если используется)
# Проверка статуса
sudo aa-status
# Поиск блокировок
dmesg | grep -i apparmor | grep -i qemu | tail -20
journalctl | grep -i apparmor | grep -i qemu | tail -20
Если найдены блокировки:
# Перевод профиля в режим жалоб
sudo aa-complain /usr/bin/qemu-system-x86_64 2>/dev/null
sudo aa-complain /usr/libexec/qemu-kvm 2>/dev/null
# Или создание собственного профиля
sudo aa-genprof qemu-system-x86_64
Проверка модулей ядра
lsmod | grep kvm
# Должно быть: kvm_intel или kvm_amd, и kvm
# Если нет — загрузка вручную
sudo modprobe kvm
sudo modprobe kvm_intel # для Intel
sudo modprobe kvm_amd # для AMD
Проверка виртуализации в BIOS/UEFI
# Intel
sudo grep -E 'vmx' /proc/cpuinfo
# AMD
sudo grep -E 'svm' /proc/cpuinfo
# Если вывод пуст — виртуализация отключена в BIOS/UEFI
6. Проверка через dmesg и системные журналы
dmesg | grep -iE 'kvm|qemu|denied' | tail -30
journalctl -xe | grep -iE 'qemu|kvm|denied' | tail -30
ausearch -m avc -ts recent 2>/dev/null # если есть SELinux-аудит
Типичные записи и их значение:
audit: type=1400 ... denied { read write } for ... scontext=... tcontext=...— блокировка МРД/мандатной политикойkvm: disabled by bios— виртуализация выключена в BIOSkvm: no hardware support— нет поддержки или отключена
7. Комплексный чек-лист устранения
Выполните по порядку:
# 1. Виртуализация включена?
egrep -c '(vmx|svm)' /proc/cpuinfo # > 0 — есть поддержка
# 2. Модули загружены?
lsmod | grep kvm
# 3. Права на устройство
ls -la /dev/kvm
# 4. Пользователь в группах
id | grep -oE 'kvm|libvirt'
# 5. МРД активен?
sudo systemctl is-active mcsc 2>/dev/null
# 6. Перезапуск служб
sudo systemctl restart libvirtd
sudo udevadm control --reload-rules && sudo udevadm trigger
# 7. Перелогиниться и проверить
virsh list
qemu-system-x86_64 -enable-kvm -cpu host -m 2048 -nographic
8. Если ничего не помогло
1. Проверьте версию Astra Linux:
cat /etc/os-release
astra-version 2>/dev/null
В разных версиях (1.7, 1.8, 2.0) механизмы МРД могут отличаться.
2. Соберите диагностический пакет:
dmesg > /tmp/dmesg.log
journalctl -b > /tmp/journal.log
ls -laZ /dev/kvm > /tmp/kvm_perms.log
id > /tmp/user_groups.log
3. Проверьте, нет ли конфликтующих гипервизоров:
sudo systemctl list-units --type=service | grep -iE 'virtualbox|vmware|xen'
4. Обратитесь к документации:
/usr/share/doc/astra-doc/— локальная документация- Официальная вики Астра Линукс:
wiki.astralinux.ru - Раздел «Настройка МРД» и «Работа с QEMU/KVM»
Главный принцип:
В 90% случаев проблема в одном из трёх пунктов — нет группы kvm, блокировка МРД, или выключена виртуализация в BIOS. Начните с них.
Информация предоставлена в ознакомительных целях. Применение описанных настроек в системах, должно осуществляться только после согласования с ответственными за информационную безопасность и в соответствии с требованиями ФСТЭК, ФСБ и иных уполномоченных органов.