lxc: Ausführen der Virtualbox in einem Container

9

Ich habe virtualbox in einem lxc-Container installiert. Wenn ich jedoch versuche, eine VM zu starten, wird folgende Meldung angezeigt:

Kerneltreiber nicht zugänglich (rc = 1909) .... Berechtigungsproblem mit / dev / vboxdrv.

Dies scheint offensichtlich ein vorhersehbares Sicherheitsproblem zu sein.

Weiß jemand, wie ich dem Container die Berechtigung erteilen kann, auf diesen Gerätetreiber zuzugreifen: '/ dev / vboxdrv'?

Jede Hilfe oder Hinweise sehr geschätzt.

user108168
quelle

Antworten:

9

Auf Ihrem LXC-Host (ich gehe hier von Ubuntu aus):

  1. Installieren Sie die virtualbox-dkms, linux-headers-generic, build-essentialPakete und überprüfen Sie die Kernel - Module geladen werden:

    myhost$ sudo /etc/init.d/virtualbox status
    VirtualBox kernel modules are loaded.
    
  2. Holen Sie sich die VirtualBox-Gerätenummern (10, 55/56/57 in meinem Fall):

    myhost$ ls -la /dev | grep vbox
    crw-------  1 root root     10,  57 Feb 25 08:22 vboxdrv
    crw-------  1 root root     10,  56 Feb 25 08:22 vboxdrvu
    crw-------  1 root root     10,  55 Feb 25 08:22 vboxnetctl
    
  3. Nehmen Sie die Knotennummern und fügen Sie sie Ihrer LXC-Gastkonfiguration hinzu ( /var/lib/lxc/myguest/config):

    ## VirtualBox
    lxc.cgroup.devices.allow = c 10:57 rwm
    lxc.cgroup.devices.allow = c 10:56 rwm
    lxc.cgroup.devices.allow = c 10:55 rwm
    
  4. Starten Sie Ihren LXC-Gast neu, installieren Sie das virtualboxPaket und erstellen Sie die Geräteknoten:

    myguest$ sudo mknod -m 600 /dev/vboxdrv c 10 57
    myguest$ sudo mknod -m 600 /dev/vboxdrvu c 10 56
    myguest$ sudo mknod -m 600 /dev/vboxnetctl c 10 55
    
  5. Überprüfen Sie, ob VirtualBox auf dem Gast die Kernelmodule sehen kann:

    myguest$ sudo /etc/init.d/virtualbox status
    VirtualBox kernel modules are loaded.
    
rcoup
quelle
Dies sollte die richtige Antwort sein. Die wichtigsten Schritte, die allen anderen Antworten fehlen, sind Schritt 3 und 4.
Léo Lam
1

Der VirtualBox Linux-Kerneltreiber (vboxdrv) ist entweder nicht geladen oder es liegt ein Berechtigungsproblem mit / dev / vboxdrv vor. Richten Sie das Kernelmodul durch Ausführen neu ein

 '/etc/init.d/vboxdrv setup'

als Wurzel. Benutzer von Ubuntu oder Fedora sollten zuerst das DKMS-Paket installieren. Dieses Paket verfolgt die Änderungen des Linux-Kernels und kompiliert das vboxdrv-Kernelmodul bei Bedarf neu.

Abhishek Anand Amralkar
quelle
Dies ist nur ein Zitat aus der Fehlermeldung. Der Treiber wird geladen, aber der Container hat keine Berechtigung, darauf zuzugreifen. Gemäß der Fehlerantwort. Meine Frage war: Wie gewährt man Prozessen in einem Container die Berechtigung, auf Kernelgeräte zuzugreifen? Wie löse ich das Berechtigungsproblem?
user108168
0

Sie müssen der /dev/vboxdrvGruppe "vboxuser" und dem Benutzer gehören, der den Container in dieser Gruppe startet. Fügen Sie den Benutzer zur Gruppe hinzu und stellen Sie sicher, dass Gruppenberechtigungen vorhanden sind (dh chmod 660 /dev/vboxdrv).

Nathan C.
quelle
Hallo Nathan C. Danke für deine Antwort. Wo mache ich das? in der Host-Umgebung oder im Container?
user108168
Der Host unter der Annahme, dass die Kerneltreiber dort installiert sind (was sie sollten, da LXC auf dem Hostkernel basiert).
Hallo Nathan C Danke für die Klarstellung. Das Gerät / dev / vboxdrv gehört root und ich starte den Container als root. Ich habe virtualbox als einen anderen Benutzer im Container ausgeführt, aber versucht, es als root auszuführen. Ich habe das Gerät auch geändert, um die Gruppe auf vboxusers und die Berechtigungen auf 660 zu setzen. Ich erhalte immer noch den Fehler. Auf dem Host funktioniert alles einwandfrei für Root- und Nicht-Root-Benutzer. Muss ich keine Einstellung in die lxc-Konfigurationsdatei einfügen, um dem Container Berechtigungen zu erteilen? Das habe ich angenommen, weiß aber nicht, was sie sind. Danke für Ihre Hilfe.
user108168
-1

Es sollte nicht erforderlich sein, virtualbox auf Ihrem Host-Computer zu installieren. Solange Ihr Container das Kernelmodul kompiliert, können Sie es einfach während eines Pre-Start-Skripts auf dem LXC-Container laden. Zur besseren Sicherheit können Sie die VBox-Kernelmodule vor dem Laden auf Ihren Host kopieren.

user190601
quelle