Ошибка создания пула не удалось определить пул access denied qemu denied access

Содержание

  1. Создание виртуальной машины kvm в директории home
  2. Спасибо за ответ.
  3. Спасибо за ответ.
  4. Virt-Manager не может подключиться к графической консоли
  5. 4 ответа
  6. Thread: KVM — Error connecting to graphical console (SpiceClientGtk)
  7. KVM — Error connecting to graphical console (SpiceClientGtk)
  8. Re: KVM — Error connecting to graphical console (SpiceClientGtk)
  9. Arch Linux
  10. #1 2009-04-09 00:44:42
  11. [SOLVED] Qemu with KVM fails, permission denied
  12. #2 2009-04-09 01:48:52
  13. Re: [SOLVED] Qemu with KVM fails, permission denied
  14. #3 2009-04-09 04:37:25
  15. Re: [SOLVED] Qemu with KVM fails, permission denied
  16. #4 2009-04-09 20:08:06
  17. Re: [SOLVED] Qemu with KVM fails, permission denied
  18. #5 2009-04-10 08:48:58
  19. Re: [SOLVED] Qemu with KVM fails, permission denied
  20. #6 2009-04-22 18:54:13
  21. Re: [SOLVED] Qemu with KVM fails, permission denied
  22. #7 2009-04-23 06:11:24
  23. Re: [SOLVED] Qemu with KVM fails, permission denied
  24. #8 2009-04-23 14:37:22
  25. Re: [SOLVED] Qemu with KVM fails, permission denied
  26. #9 2009-04-24 16:51:06
  27. Re: [SOLVED] Qemu with KVM fails, permission denied
  28. #10 2009-04-24 19:28:16
  29. Re: [SOLVED] Qemu with KVM fails, permission denied
  30. #11 2009-04-24 20:59:43
  31. Re: [SOLVED] Qemu with KVM fails, permission denied
  32. Виртуализация средствами AstraLinux 1.6 SE
  33. РоманМ

Создание виртуальной машины kvm в директории home

Здравствуйте, уважаемые эксперты.

Осваиваю KVM, возник вопрос.

Есть пользователь user, добавлен в sudoers. Действия выполняю через sudo, подключаюсь к консоли управления через ssh X11, в консоли запускаю virt-manager.

Начинаю установку виртуальной машины (в графическом режиме). При выборе места создания виртуальной машины есть несколько вариантов: /, /var/lib/libvirt/images, /root.

Мне нужно разместить создаваемую виртуальную машину в /home/user.

Выбираю в ручную директорию /home/user — выдает «ошибка создания пула: Не удалось определить пул: Ошибка XML: name /home/user cannot contain ‘/’

Почему нужно виртуалку разместить в /home:

Вопрос: можно разместить создаваемую виртуалку в директории /home/user. Если да, то как это сделать.

Судя по сообщению об ошибке ты куда-то не в то поле пишешь /home/user/.

Есть имя, а есть путь куда это имя указывает

У тебя скорее всего SELinux не даёт этого сделать. Для пущей уверенности я бы запустил virsh и попробовал бы пул ручками создать через pool-define-as

Не, конечно в любой непонятной ситуации обвинять SELinux — это общий принцип системного администрирования, но когда в сообщении упоминается синтаксическая ошибка..

Не верю я в эти ошибки. Ты бы видел какие мне ошибки libvirt писал когда ему apparmor мешал. Нерелевантные от слова вообще.

только это будет пул хранения дисков ВМ. Конф. файлы ВМ будут хранится /var/lib/libvirt/ .

Запускаю сам virt-manager от user — запускается, открывает графическую оболочку, но пишет ошибку подключения.

а в каких группах пользователь? И что вот здесь?

Спасибо за ответ.

Selinux отключен. Не он.

Спасибо за ответ.

[code]virsh pool-define-as storage dir —target $HOME[/code]

Пул storage определён. Теперь на этапе создания виртуальной машины «Настроить пространство хранения данных», выбираю «Выбрать или создать дополнительное пространство данных» — Выбираю «Настроить»

Появился новый пункт storage, указано его расположение /home/user, в нем несколько файлов и директория VM — выбираю ее, нажимаю Выбор тома — В строке пути отображается /home/user/vm — Далее — ошибка «Ошибка в параметрах пространства хранения. Путь »/home/user/vm» может вести к файлу или устройству, но не каталогу». Эта ошибка не возникает, если выбрать директорию /root/home.

Источник

Virt-Manager не может подключиться к графической консоли

Со вчерашнего дня я не могу просматривать запущенные виртуальные машины (QEMU/KVM) с моей virt-manager GUI больше нет. Когда я пытаюсь просмотреть экран виртуальной машины во встроенном средстве просмотра, вместо этого появляется следующее сообщение об ошибке:

Ошибка подключения к графической консоли:
внутренняя ошибка: невозможно выполнить команду QEMU ‘getfd’:
Не указан дескриптор файла через SCM_RIGHTS

Это относится ко всем моим виртуальным машинам.

Я все еще могу правильно просматривать и взаимодействовать с моими виртуальными машинами в virt-viewer хотя, только virt-manager встроенный зритель мертв.

Что здесь не так и как я могу это исправить?

Изменить: я только что узнал, что я использую virt-manager версия 1:1.4.0-1

getdeb1 из архива.getdeb.net репо.

4 ответа

Работая над попыткой слить последнюю версию virt-manager 1.4.0 с Ubuntu, я столкнулся с этой же проблемой. Похоже, это не ошибка в virt-manager, а просто изменение способа отправки отображаемых данных на виртуальные машины.

Я открыл ошибку, чтобы добавить необходимые разрешения для libvirt, где определяются профили apparmor — https://bugs.launchpad.net/ubuntu/+source/libvirt/+bug/1668681

Чтобы устранить эту проблему, не отключая функцию безопасности, добавьте:

в файл /etc/apparmor.d/abstractions/libvirt-qemu но не в разделе qemu-bridge-helper. (Так сразу после «owner @/0-9*/fd/ r,»)

Затем перезагрузите профили с sudo systemctl reload apparmor ,

Сказав все это, я всегда рекомендую использовать пакеты из нашего архива для лучшей поддержки.

Источник

Thread: KVM — Error connecting to graphical console (SpiceClientGtk)

Thread Tools
Display

KVM — Error connecting to graphical console (SpiceClientGtk)

I have a new install of Ubuntu Server 20.04.2 LTS setup and running KVM.

Everything *seems* to be fine with the server.

I have then installed ‘virt-manager’ on my Ubuntu 18.04 LTS Desktop machine, and successfully connected to the KVM Server.

I have tried to create a new VM (Debian Stretch) from the Virtual Machine Manager (virt-manager), but each time I am getting the same issue which is that I cannot see the VM Console.

The error I am getting is:

I have checked that ‘SpiceClientGtk’ is installed on the Ubuntu Server by entering:

so I believe that is correctly installed. For what it was worth, I also installed it on my Desktop, but that made no difference either.

I also tried connecting using ‘virt-viewer’.

I entered this on my desktop:

I don’t have keys setup (yet) so I am expecting to get asked for the password, which I am (a number of times, but apparently that is expected). The ‘virt-viewer’ application opens, and sits with the message:

The VM is definitely running (at least according to the host):

Any suggestions on what to try or do next?

Last edited by Alan5127; March 9th, 2021 at 11:56 AM . Reason: Tidy up formatting

Re: KVM — Error connecting to graphical console (SpiceClientGtk)

On the client system:

Verify the keys are working:

On the client machine, you must have virt-manager and spice-client-. (really long package name) installed and your userid should be in the libvirtd group on the KVM server.
There are other settings inside the VM that are needed, but I think the defaults are for SPICE to be used since 18.04. You can change that to VNC or VMVGA, if you like in the VM settings. On a non-desktop, SPICE isn’t exactly useful. Heck, on a non-desktop, just use ssh directly. That is much more efficient.
Until today, I never tried to connect to a server using spice. It never made any sense to try.

Источник

Arch Linux

You are not logged in.

#1 2009-04-09 00:44:42

[SOLVED] Qemu with KVM fails, permission denied

I’ve had qemu installed for a while now, and I’ve been able to use KVM with it fine as my normal user. After this new update, there was a post-install message that I need to use the —enable-kvm option instead of the qemu-kvm command. Well I get this wonderfull message:

Could not access KVM kernel module: Permission denied
failed to initialize KVM

I’ve removed/added myself from/to the kvm group to no avail. Sigh.

Last edited by Odysseus (2009-04-13 18:36:27)

I’m the type to fling myself headlong through the magical wardrobe, and then incinerate the ornate mahogany portal behind me with a Molotov cocktail.

#2 2009-04-09 01:48:52

Re: [SOLVED] Qemu with KVM fails, permission denied

I had a similar problem. In the end /dev/kvm was not accessible to the kvm group. This fixed it for me:

Give it a try and see what happens.

#3 2009-04-09 04:37:25

Re: [SOLVED] Qemu with KVM fails, permission denied

Thanks, you’re a god. At any rate, I guess that would be considered a bug, easily fixed though.

I’m the type to fling myself headlong through the magical wardrobe, and then incinerate the ornate mahogany portal behind me with a Molotov cocktail.

#4 2009-04-09 20:08:06

Re: [SOLVED] Qemu with KVM fails, permission denied

The cause is that the file /etc/udev/rules.d/65-kvm.rules is missing — I don’t know whether it should belong to qemu, udev or the kernel package. Definitely a bug.

EDIT: if you want to have it back, here’s the contents:

EDIT2: it belongs to the qemu package.

Last edited by bender02 (2009-04-09 20:16:28)

#5 2009-04-10 08:48:58

Re: [SOLVED] Qemu with KVM fails, permission denied

Fixed in qemu-0.10.2-2.

#6 2009-04-22 18:54:13

Re: [SOLVED] Qemu with KVM fails, permission denied

same problem with:

group kvm has no permissions for /dev/kvm

#7 2009-04-23 06:11:24

Re: [SOLVED] Qemu with KVM fails, permission denied

Check your settings, please. kvm-85-1 package does contain /lib/udev/rules.d/65-kvm.rules, which sets the correct group permissions. I tried and it works fine here.

#8 2009-04-23 14:37:22

Re: [SOLVED] Qemu with KVM fails, permission denied

Sorry, must have been my mistake

pacman —nosave -R kvm
pacman -S kvm
‘a reboot’
modprobe kvm-intel

and permissions are now set to
crw-rw—- 1 root kvm 10, 232 2009-04-23 16:24 /dev/kvm

#9 2009-04-24 16:51:06

Re: [SOLVED] Qemu with KVM fails, permission denied

Fixed in qemu-0.10.2-2.

But it’s broken in qemu-0.10.2-3. The file /etc/udev/rules.d/65-kvm.rules is missing again.

Oh and I’m not in kvm group even when I do: gpasswd -a pawel kvm (as root).

It’s strange, because ‘groups’ shows only dbus hal video audio optical storage pawel

but KDE users managers shows I’m also in kvm group

Last edited by pawels64 (2009-04-24 17:01:42)

#10 2009-04-24 19:28:16

Re: [SOLVED] Qemu with KVM fails, permission denied

So the places to look at if you are having group issues is the file ‘/etc/group’. It contains the list of groups and also users that belong to each group. EDIT: I should also say that it’s THE file for groups, ie what any manager (like gpasswd or kde group manager) does is just change that file.

Also, if you just want to use qemu-kvm, you’re better off using the ‘kvm’ package in extra (which contains qemu-kvm). It’s because qemu with 0.10.2 release sort of ‘half-way’ merged the kvm code, with the result that the kvm part of qemu doesn’t work properly.

Last edited by bender02 (2009-04-24 19:29:12)

#11 2009-04-24 20:59:43

Re: [SOLVED] Qemu with KVM fails, permission denied

So the places to look at if you are having group issues is the file ‘/etc/group’. It contains the list of groups and also users that belong to each group. EDIT: I should also say that it’s THE file for groups, ie what any manager (like gpasswd or kde group manager) does is just change that file.

Also, if you just want to use qemu-kvm, you’re better off using the ‘kvm’ package in extra (which contains qemu-kvm). It’s because qemu with 0.10.2 release sort of ‘half-way’ merged the kvm code, with the result that the kvm part of qemu doesn’t work properly.

Thanks for your response. It seems groups are all right now. I copied missing file from abs tree, added myself to kvm group and then restarted system. Qemu with kvm is working now, but there are some problems, so I will try kvm as you suggest. Btw. are there some wiki pages how to use ‘clean’ kvm without qemu? Something like this, but describing kvm way:

Last edited by pawels64 (2009-04-24 21:04:31)

Источник

Виртуализация средствами AstraLinux 1.6 SE

РоманМ

New member

В руководстве администратора к AstraLinux 1.6 SE присутствует лишь описание пакетов и параметров.
Согласно данной статье на АстраВики https://wiki.astralinux.ru/pages/viewpage.action?pageId=27363213 — сделать не получается:
1) Пока не выполнил пункт 2 по включению пользователя в группы (даже для пользователя root !) при регистрации ВМ выпадает ошибка.
2) Упомянутый в статье пакет gvncviewer отсутствует в AstraLinux 1.6 SE.
3) После успешной регистрации ВМ — при запуска выдает ошибку «unable to set PDP label ‘0:63:0 on ‘/kvm/123.qcow2’: Отказано в доступе‘»
в /var/log/libvirt/qemu/123.log содержится следующее
«warning : virExec:744 : Setting child security label to 0:63:0
warning : virExec:752 : CAPS on start: PARSEC capabilities eip(80c,80c,80c) euid 0
libvirt: error : libvirtd quit during handshake: Ошибка ввода/вывода «

Подскажите пожалуйста, имеется ли возможность создавать и управлять виртуальными машинами (не покупая средства виртуализации Брест) имея только AstraLinux1.6 SE?
И если да — то как?

New member

Что логично. Для этого данный пункт и был добавлен сразу после установки необходимых пакетов.

Вообще, если нужен условный гипервизор без поддержки режима «Мандатного контроля целостности», то делается все довольно просто:

1. Ставим Astra Linux в обычном варианте без выбора каких-либо доп.флагов (затирание, киоск, ALD и проч.) и без графики. Затирание не рекомендуется по причине его бессмысленности — вся защищаемая информация будет крутиться в qcow2-образе. Киоск и ALD по понятным причинам. Но рекомендуется отключить вывод загрузчика и использовать ядро hardened по умолчанию.

2. Заводим пользователя-администратора. Все действия будет совершать от его лица. При входе в консоли всегда выбираем Integrity level: 0

3. Отключаем нафиг мандатный контроль целостности:
sudo astra-mic-control disable

4. Отключаем NetworkManager:
sudo systemctl stop NetworkManager
sudo systemctl disable NetworkManager

5. Правим конфиг-файл сетевых интерфейсов с целью создания сетевого моста для виртуальных машин и нашей сети:
(в примере только 1 сетевая карта — eth0) и создаем сетевой мост (к примеру, с ip-адресом 192.168.12.110 из подсети 192.168.12.0/24, где шлюз по умолчанию и DNS — роутер выхода вовне — 192.168.12.1)
sudo nano /etc/network/interfaces
auto lo
iface lo inet loopback
auto br0
iface br0 inet static
address 192.168.12.110
netmask 255.255.255.0
gateway 192.168.12.1
dns-nameservers 192.168.12.1
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0

6. Ставим пакеты поддержки KVM:
sudo apt install libvirt-daemon-system libvirt0 qemu-kvm bridge-utils virt*

7. Добавляем нашего пользователя-администратора в группы поддержки kvm:
sudo adduser libvirt-admin
sudo adduser kvm
sudo adduser libvirt-qemu

8. Механизм мандатных меток (даже отключенный) запрещает создание вирт.машин в любом каталоге кроме /var/lib/libvirt/images (или я пока не
нашел, как его обойти), поэтому размечаем пространство в формате QCOW2 (можно и в RAW, но он более «сырой», ага) для файл-образа вирт.машины
нужного объема (в пример, 20 Гигабайт):
sudo qemu-img create -f qcow2 /var/lib/libvirt/images/ИМЯ-МАШИНЫ.img 20G

9. Создаем виртуальную машину (в примере ниже Windows, для Linux будут иные параметр os-type и кое-что еще):
sudo virt-install —connect qemu:///system -n win8 -r 2048 —cdrom «/mnt/Win81_64.iso» —arch=x86_64 —vcpus 2 —os-type windows —network=bridge:br0,model=e1000 —hvm —accelerate —graphics vnc,password=password,listen=0.0.0.0,port=5903 —disk «/var/lib/libvirt/images/ИМЯ-МАШИНЫ.img»,size=20,bus=sata,format=qcow2,cache=none
Если команда как бы подвисла, завершаем ее сочетанием Ctrl+C.
Проверяем командой sudo netstat -tpl, что *:5903 порт прослушивается — виртуальная машина создана и готова к работе.

10. Подключаемся к виртуальной машине через любой VNC-viewer на ip-адрес нашего сетевого моста, порт 5903. Вводим пароль (в примере
конфигурации, password). Инсталлируем гостевую ОС из выбранного ранее источника (в примере, /mnt/Win81_64.iso). Дожидаемся окончания установки

11. Средствами самой виртуальной машины смотрим MAC-адрес. При необходимости, выставляем статический IP либо на самой виртуальной машине, либо на DHCP-сервере, обслуживающем сеть нашего гипервизора.

12. Проверяем устойчивость работы виртуальной машины и радуемся жизни! Конфигурационный файл виртуальной машины лежит по адресу:
/etc/libvirt/qemu/ИМЯ_МАШИНЫ.xml (редактируется тем же sudo nano).

13. Добавляем виртуальную машину в автозапуск:
sudo ln -s /etc/libvirt/qemu/ИМЯ-МАШИНЫ.xml /etc/libvirt/qemu/autostart/ИМЯ-МАШИНЫ.xml

14. Завершить работу вирт.машины (в Астре по умолчанию не работает, ошибка PolKit, поэтому либо машину тушим изнутри, либо убиваем процесс командой sudo kill -9 номер_процесса. Поиск номера процесса — в качестве домашнего задания). Аналогично с system reboot — перезагрузка
вирт.машины:
virsh -c qemu:///system shutdown ИМЯ_МАШИНЫ

15. Редактировать конфигурацию, чтобы не лазить в файл постоянно
virsh -c qemu://system edit ИМЯ_МАШИНЫ

По вкусу настраиваем /etc/libvirt/libvirtd.conf — основные настройки гипервизора в части подключения администраторов, аудита и проч.

Доп.настройку хостовой ОС гипервизора проводим согласно Red Book или же без нее (в зависимости от требуемого уровня защищенности).

Источник


2

2

Здравствуйте, уважаемые эксперты.

Осваиваю KVM, возник вопрос.

Есть пользователь user, добавлен в sudoers. Действия выполняю через sudo, подключаюсь к консоли управления через ssh X11, в консоли запускаю virt-manager.

Начинаю установку виртуальной машины (в графическом режиме). При выборе места создания виртуальной машины есть несколько вариантов: /, /var/lib/libvirt/images, /root.

Мне нужно разместить создаваемую виртуальную машину в /home/user.

Выбираю в ручную директорию /home/user — выдает «ошибка создания пула: Не удалось определить пул: Ошибка XML: name /home/user cannot contain ‘/’

Почему нужно виртуалку разместить в /home:

df -h
Файловая система              Размер Использовано  Дост Использовано% Cмонтировано в
/dev/mapper/centos-root     50G         7,9G   43G           16% /
/dev/mapper/centos-home   400G          33M  400G            1% /home

Запускаю сам virt-manager от user — запускается, открывает графическую оболочку, но пишет ошибку подключения.

Вопрос: можно разместить создаваемую виртуалку в директории /home/user. Если да, то как это сделать.

07.09.2018

Добрый день.

Пробую создать ВМ через virt-manager, при запуске ВМ в логах ошибка:
3627: error : virDomainOpenConsoleEnsureACL:4270 : access denied
3627: error : virDomainOpenConsoleEnsureACL:4270 : access denied
3630: error : virDomainOpenConsoleEnsureACL:4270 : access denied
3626: error : virDomainSuspendEnsureACL:5658 : access denied

Astra Linux SE 1.6 (smolensk) установлена базовая версия с графикой, мандатные права полностью отключены.
Установлены пакеты:
apt-get install virt-manager libvirt-daemon-system libvirt0
пользователь запускающий virt-manager входит в группы:
adminuser cdrom floppy audio dip video plugdev netdev lpadmin scanner kvm libvirt libvirt-qemu libvirt-admin astra-admin astra-console

07.09.2018

Добрый день.

Пробую создать ВМ через virt-manager, при запуске ВМ в логах ошибка:
3627: error : virDomainOpenConsoleEnsureACL:4270 : access denied
3627: error : virDomainOpenConsoleEnsureACL:4270 : access denied
3630: error : virDomainOpenConsoleEnsureACL:4270 : access denied
3626: error : virDomainSuspendEnsureACL:5658 : access denied

Astra Linux SE 1.6 (smolensk) установлена базовая версия с графикой, мандатные права полностью отключены.
Установлены пакеты:
apt-get install virt-manager libvirt-daemon-system libvirt0
пользователь запускающий virt-manager входит в группы:
adminuser cdrom floppy audio dip video plugdev netdev lpadmin scanner kvm libvirt libvirt-qemu libvirt-admin astra-admin astra-console

Попробуйте через sudo зпустить

10.09.2018

Проблема решилась включением подсистемы мандатного контроля целостности.

10.12.2018

Друг, скажи, где этот волшебный тумблер?!? ) Как включить эту чудесную подсистему?

10.12.2018

Друг, скажи, где этот волшебный тумблер?!? ) Как включить эту чудесную подсистему?

Отвечу сам себе:
В ОССН мандатный контроль целостности по умолчанию отключён — всем сущностям ОССН назначается низкий уровень целостности. Для включения мандатного контроля целостности необходимо отредактировать скрипт инициализации файловой системы /usr/sbin/pdp-init-fs.

Для использования мандатного контроля целостности необходимо модифицировать сценарий pdp-init-fs, установив в 1 значение переменной sysmaxilev и флаг ccnri для контейнеров с флагом ccnr, и выполнить сценарий или перезагрузку ОС.
from: http://yztm.ru/lekc/l10/


Description


Juan Orti



2021-03-11 11:58:35 UTC

Description of problem:
If libvirtd.conf is configured with polkit:

    access_drivers = [ "polkit" ]

cockpit-machines cannot manage the VMs even if connecting as root. I get these messages in the journal:

mar 11 12:50:48 libvirtd[1740]: authentication failed: access denied by policy
mar 11 12:50:48 libvirtd[1740]: access denied: 'QEMU' denied access

Version-Release number of selected component (if applicable):
cockpit-224.2-1.el8.x86_64
cockpit-machines-224.2-1.el8.noarch
polkit-0.115-11.el8.x86_64
libvirt-6.0.0-28.module+el8.3.0+7827+5e65edd7.x86_64

How reproducible:
Always

Steps to Reproduce:
1. Enable polkit in /etc/libvirt/libvirtd.conf

access_drivers = [ "polkit" ]

2. systemctl restart libvirtd.service
3. Connect to the virtual machines manager in Cockpit as root.
4. Try to start a VM

Actual results:
These errors in the journal:

    authentication failed: access denied by policy
    access denied: 'QEMU' denied access

If I connect with virt-manager, I can manage the VMs.

Expected results:
The root user should be allowed to manage everything.

Additional info:


Comment 4


Martin Pitt



2021-04-21 16:02:50 UTC

This works as root with access_drivers = [ "polkit" ]:

# busctl call org.libvirt /org/libvirt/QEMU org.libvirt.Connect ListDomains u 0

As user that works with neither the default access_drivers nor with polkit. However, cockpit-machines usually connects to qemu:///system as root (superuser: try), so calling it as root should reflect this more.

So this needs more in-depth debugging.


Comment 5


Martin Pitt



2021-04-28 06:35:12 UTC

Copy&pasteable setup in a fresh VM, with a tiny pre-defined VM:

  sed -i '/access_drivers/ s/^#//' /etc/libvirt/libvirtd.conf; systemctl restart libvirtd
  virt-install --memory 50 --pxe --virt-type qemu --os-variant alpinelinux3.8 --disk none --wait 0 --name test1

I tested this with current cockpit-machines from upstream master (mostly 243.1) on RHEL 8.4, 8.5, RHEL 9.0, and Fedora 34. In all these cases the Machines page lists the existing VMs, and I can create a new VM (Alpine with PXE boot). Deleting a VM fails with "'QEMU' denied access" on all three OSes.

I also see a lot of these in the journal, but they don't break the UI:

  libvirtd[1909]: access denied: 'QEMU' denied access
  libvirtd[1909]: authentication failed: access denied by policy

Then I downgraded to the respective distro versions: 238.2-1.el8 (RHEL 8.4), 242-1.el8 (RHEL 8.5), 243.1-2.el9, and 243-1.fc34. The latter two are basically the same as current upstream master, the RHEL 8.4/5 versions are older (still from cockpit.git), but I see exactly the same behaviour there (not quite surprisingly, as API wise things didn't change since 242).

Doing VM deletion via the API directly reproduces the issue:

# virsh list --all
 Id   Name    State
-----------------------
 1    test1   running
 2    test2   running

# busctl call org.libvirt /org/libvirt/QEMU org.libvirt.Connect ListDomains u 0
ao 2 "/org/libvirt/QEMU/domain/_b5a8b543_ed63_453c_8b58_8318eb63f0d0" "/org/libvirt/QEMU/domain/_69007a04_04ba_4970_80ac_5dc30f6d6250"

# busctl call org.libvirt /org/libvirt/QEMU/domain/_69007a04_04ba_4970_80ac_5dc30f6d6250 org.libvirt.Domain Destroy u 0
Call failed: access denied: 'QEMU' denied access

@Juan, @Yunming, so I cannot reproduce the rejection on creating the VM, but supposedly it's the same root cause.

Reassigning to libvirtd as there is now a CLI reproducer entirely outside of cockpit. This possibly belongs to libvirt-dbus, please reassign if appropriate.


Comment 6


yafu



2021-05-25 08:03:41 UTC

(In reply to Martin Pitt from comment #5)
> Copy&pasteable setup in a fresh VM, with a tiny pre-defined VM:
> 
>   sed -i '/access_drivers/ s/^#//' /etc/libvirt/libvirtd.conf; systemctl
> restart libvirtd
>   virt-install --memory 50 --pxe --virt-type qemu --os-variant
> alpinelinux3.8 --disk none --wait 0 --name test1
> 
> I tested this with current cockpit-machines from upstream master (mostly
> 243.1) on RHEL 8.4, 8.5, RHEL 9.0, and Fedora 34. In all these cases the
> Machines page lists the existing VMs, and I can create a new VM (Alpine with
> PXE boot). Deleting a VM fails with "'QEMU' denied access" on all three OSes.
> 
> I also see a lot of these in the journal, but they don't break the UI:
> 
>   libvirtd[1909]: access denied: 'QEMU' denied access
>   libvirtd[1909]: authentication failed: access denied by policy
> 
> Then I downgraded to the respective distro versions: 238.2-1.el8 (RHEL 8.4),
> 242-1.el8 (RHEL 8.5), 243.1-2.el9, and 243-1.fc34. The latter two are
> basically the same as current upstream master, the RHEL 8.4/5 versions are
> older (still from cockpit.git), but I see exactly the same behaviour there
> (not quite surprisingly, as API wise things didn't change since 242).
> 
> Doing VM deletion via the API directly reproduces the issue:
> 
> # virsh list --all
>  Id   Name    State
> -----------------------
>  1    test1   running
>  2    test2   running
> 
> # busctl call org.libvirt /org/libvirt/QEMU org.libvirt.Connect ListDomains
> u 0
> ao 2 "/org/libvirt/QEMU/domain/_b5a8b543_ed63_453c_8b58_8318eb63f0d0"
> "/org/libvirt/QEMU/domain/_69007a04_04ba_4970_80ac_5dc30f6d6250"
> 
> # busctl call org.libvirt
> /org/libvirt/QEMU/domain/_69007a04_04ba_4970_80ac_5dc30f6d6250
> org.libvirt.Domain Destroy u 0
> Call failed: access denied: 'QEMU' denied access
> 
> @Juan, @Yunming, so I cannot reproduce the rejection on creating the VM, but
> supposedly it's the same root cause.
> 
> Reassigning to libvirtd as there is now a CLI reproducer entirely outside of
> cockpit. This possibly belongs to libvirt-dbus, please reassign if
> appropriate.


Hi Martin,

I can hit the error with your steps, and could see the error log in libvirtd.log:
2021-05-25 02:22:53.962+0000: 39451: debug : virAccessDriverPolkitCheck:140 : Check action 'org.libvirt.api.domain.stop' for process '39445' time 401995 uid 977
2021-05-25 02:22:53.962+0000: 39451: info : virPolkitCheckAuth:84 : Checking PID 39445 running as 977
2021-05-25 02:22:53.982+0000: 39451: debug : virPolkitCheckAuth:131 : is auth 0  is challenge 0
2021-05-25 02:22:53.982+0000: 39451: error : virPolkitCheckAuth:145 : authentication failed: access denied by policy
2021-05-25 02:22:53.982+0000: 39451: info : virObjectUnref:381 : OBJECT_UNREF: obj=0x55bdc3509df0
2021-05-25 02:22:53.982+0000: 39451: error : virDomainDestroyFlagsEnsureACL:2987 : access denied: 'QEMU' denied access

And from the error log we can see cockpit delete(destroy) guest with user libvirtdbus, which uid is 977. For the non-root user, we need to add polkit rule for api action. So i added it as follows:
#cat /etc/polkit-1/rules.d/100-libvirt-acl.rules
polkit.addRule(function(action, subject) {
if (action.id == "org.libvirt.api.domain.stop" &&
subject.user == "libvirtdbus") {
if (action.lookup("connect_driver") == 'QEMU') {
return polkit.Result.YES;
} else {
return polkit.Result.NO;
}
}
});

Then destroy guest again, the guest destroy successfully:
# busctl call org.libvirt /org/libvirt/QEMU/domain/_c506dacd_1e60_408f_b983_f09b425ec058 org.libvirt.Domain Destroy u 0
# echo $?
0

So i think it's not a bug, it works as expected.


Comment 7


Martin Pitt



2021-05-25 15:19:57 UTC

So this happens because from libvirtd's point of view (the polkit target API) it's libvirt-dbus which is doing the calls, and that is always the libvirtdbus system user which the polkit rules apply to. This is not really useful -- the actual caller that needs to be checked is the one invoking libvirt-dbus' method (which then "forwards" it to libvirtd).

libvirt-dbus ships /usr/share/polkit-1/rules.d/libvirt-dbus.rules which allows anyone calling libvirt-dbus to execute "org.libvirt.unix.manage" operations, but apparently that only allows listing and creation, but does not include "org.libvirt.api.domain.stop"? libvirt-dbus itself does not do any polkit checks against its callers, it just seems to allow calls from root.

So I guess with the current architecture of libvirt-dbus being a separate process/service to libvirtd this is unfixable. To do this cleanly, libvirtd itself would need to expose the D-Bus interface. Unless there is a way to "forward" a polkit API check -- that may be possible with a custom polkit agent?


So Juan, the summary is: libvirt polkit mode and cockpit-machines (via libvirt-dbus) are incompatible. If you want to hand out access to non-root/wheel users, there is currently no way to do that with cockpit-machines.


Comment 8


Martin Pitt



2021-05-25 15:23:48 UTC

A bandaid fix for libvirt-dbus is then to actually do exactly what yafu proposed above: Add the other operations to /usr/share/polkit-1/rules.d/libvirt-dbus.rules , not just "org.libvirt.unix.manage". As libvirt-dbus access is restricted to root, there is no point in restricting what libvirt-dbus can do. With that, cockpit-machines/libvirt-dbus would at least work for actual root/wheel users in polkit mode. That doesn't require any architectural changes.


Comment 9


Juan Orti



2021-06-01 08:59:29 UTC

Thanks for the explanation, and based on that, would it make sense to expand the supplied polkit policy in /usr/share/polkit-1/rules.d/libvirt-dbus.rules to allow all actions?

Something like this:

polkit.addRule(function(action, subject) {
    if ((action.id == "org.libvirt.unix.manage" ||
         action.id.indexOf("org.libvirt.api.connect.") == 0 ||
         action.id.indexOf("org.libvirt.api.domain.") == 0 ||
         action.id.indexOf("org.libvirt.api.interface.") == 0 ||
         action.id.indexOf("org.libvirt.api.network.") == 0 ||
         action.id.indexOf("org.libvirt.api.node-device.") == 0 ||
         action.id.indexOf("org.libvirt.api.nwfilter.") == 0 ||
         action.id.indexOf("org.libvirt.api.secret.") == 0 ||
         action.id.indexOf("org.libvirt.api.storage-pool.") == 0 ||
         action.id.indexOf("org.libvirt.api.storage-vol.") == 0 ) &&
        subject.user == "libvirtdbus") {
        return polkit.Result.YES;
    }
});


Comment 10


Martin Pitt



2021-06-01 09:25:14 UTC

Juan: In principle yes; I'd even simplify it too

    if (subject.user == "libvirtdbus" &&
        (action.id == "org.libvirt.unix.manage" || action.id.indexOf("org.libvirt.api.") == 0))

or even

    if (subject.user == "libvirtdbus" && action.id.indexOf("org.libvirt.") == 0)

as conceptually libvirt-dbus should be able to call *all* libvirt APIs?


Comment 11


Juan Orti



2021-06-01 10:41:26 UTC

Martin, I've tested your last example allowing all "org.libvirt." and works like a charm. Now root and the members of the libvirt group can manage the VMs from Cockpit.

Can we update the supplied policy?


Comment 14


Pavel Hrdina



2021-06-17 15:35:47 UTC

As Martin mentioned in one of the comments using libvirt polkit policy together with libvirt-dbus isn't compatible. With the current state without any changes for system connection it works like this:

   polkit disabled:

      - root user: both virsh and libvirt-dbus works with all APIs

      - non-root user: using virsh requires authentication (if authenticated all APIs) and libvirt-dbus access denied

      - non-root user with libvirt group: both virsh and libvirt-dbus works with all APIs

   polkit enabled:

      - root user: virsh works for all APIs but libvirt-dbus only read-only APIs

      - non-root user: using virsh requires authentication (if authenticated APIs allowed for the authenticated user) and libvirt-dbus access denied

      - non-root user with libvirt group: both virsh and libvirt-dbus only read-only APIs

Now if we consider the situation with polkit enabled:

   - any change to polkit rules for specific user (except for libvirtdbus) will be available only for virsh usage

   - any change to polkit rules for libvirtdbus user will affect both root user and any user with libvirt group added


With the change proposed by Comment 9 or Comment 10 we would be able to use all APIs with root user but also with all users that are part of libvirt group which could break expectation for system administrators enabling polkit for libvirt. Users with libvirt group would not be able to use virsh to make changes to VMs but would be able to use libvirt-dbus to make changes to VMs which ti me sounds like security hole.


I don't think we should change the default policy rules shipped by libvirt-dbus, instead we need to properly document all limitations and offer some examples how to control access to VMs with libvirt-dbus and cockpit-machines.


Comment 15


Jaroslav Suchanek



2021-06-21 11:51:38 UTC

I am changing the component to 'Documentation' per comment 14. Thanks.


Comment 26


Jaroslav Suchanek



2022-01-28 08:59:13 UTC

Overall, looks good to me.

Я хочу создать пул хранения данных для изображений qcow2 virt-менеджера в моем корневом каталоге, но я получаю странную ошибку:

Error creating pool: Could not define storage pool: XML error: name /home/matthias/virtual-guests/virt-manager cannot contain '/'

Error creating pool

вопросы

  • Даже возможно иметь пул хранения данных в моем корневом каталоге?
  • Мне нужны специальные полномочия для virt-менеджера получить доступ к каталогу?

полная ошибка traceback

Traceback (most recent call last): File "/usr/share/virt-manager/virtManager/asyncjob.py", line 89, in cb_wrapper callback(asyncjob, *args, **kwargs) File "/usr/share/virt-manager/virtManager/createpool.py", line 442, in _async_pool_create poolobj = self._pool.install(create=True, meter=meter, build=build) File "/usr/share/virt-manager/virtinst/storage.py", line 531, in install raise RuntimeError(_("Could not define storage pool: %s") % str(e)) RuntimeErError creating pool: Could not define storage poror: Could not define storage pool: XML error: name /home/matthias/virtual-guests/virt-manager cannot contain '/'

задан
3 June 2018 в 16:04

поделиться

2 ответа

Можно создать пулы, но существует несколько вещей рассмотреть.

  1. «имя» действительно должно быть без ряда специальных символов, как ‘/’. Если Вы хотите создать пул/tmp/test, Вы могли бы назвать его» тест » ( на шаге 1 2 ) и дать ему путь» /tmp/test» ( на шаге 2 2 ), и он будет работать.

  2. apparmor остановит Вас, если Вы пойдете слишком редкие существует ограниченный набор путей, которые позволяются по умолчанию, если Вы выйдете из них в какой-то момент , то virt-aa-helper будет не более способный получить доступ к файлам. Но это было бы необходимо так, чтобы это могло предоставить доступ для пользовательского профиля на гостя. См. существующие правила в /etc/apparmor.d/usr.lib.libvirt.virt-aa-helper и добавьте, что пользовательские через /etc/apparmor.d/local/usr.lib.libvirt.virt-aa-helper Видят/etc/apparmor.d/local/README для больше на этом.

  3. Некоторые типы пула все же не могут быть обработанными apparmor. Тип пула по умолчанию virt-менеджера будет» dir«, и это будет прекрасно. Но там более совершенствуются типы как» lvm группы «, для тех типов apparmor правила не может быть создан для гостя на лету (, видят ошибку на этом ), в этих случаях необходимо будет позволить дополнительные пути, в которых Вы нуждаетесь через изменение /etc/apparmor.d/abstractions/libvirt-qemu.

ответ дан Christian Ehrhardt
14 April 2019 в 18:48

поделиться

В моем случае это была ошибка — не особо очевидная. Я пытался создать пул хранения в каталоге, поэтому dir:Filesystem Directory

Есть 2 шага:

  1. Вы указываете тип и имя, но здесь имя не является путем. Пример: test
  2. Следующий шаг, Целевой путь, это даст вам предложенный путь /var/lib/libvirt/images/**test**. Просто **измените**/var/lib/libvirt/images на все, что хотите. Пример: /libvirt-images-pool2/(что приведет к /libvirt-images-pool2/test«`

Примечание: вам может понадобиться возиться с владельцем и разрешением, но Я думаю, что libvirt исправит их, как только вы нажмете «Готово».

Надеюсь, это кому-нибудь поможет.

ответ дан Lukino
17 April 2019 в 14:33

поделиться

Другие вопросы по тегам:

Похожие вопросы:

  • Ошибка создания подписи указан неправильный алгоритм 0x80090008 error code createrawsignature
  • Ошибка создания папки gta 5 rp
  • Ошибка создания подписи сертификат не найден zakupki gov ru
  • Ошибка создания открытия журнала регистрации ошибка совместного доступа к файлу
  • Ошибка создания подписи параметр задан неверно 0x80070057 суфд