Virtuelle Maschine als Nicht-Root installieren?

15

Ist es möglich, Software für virtuelle Maschinen als Nicht-Root-Benutzer zu installieren und auszuführen?

Welche VMs können ohne Root-Zugriff installiert werden?

Wenn es nicht möglich ist, welche virtuelle Maschine mit dem geringsten Gewicht für einige VMs zu verwenden, auf denen Windows XP SP3 ausgeführt wird?

Prix
quelle

Antworten:

5

Jede echte Virtualisierung benötigt einen Low-Level-Zugriff auf die CPU und muss daher von root installiert werden. Einmal installiert, müssen Sie nicht mehr root sein, um es auszuführen. Sie könnten wahrscheinlich einen Emulator installieren und ausführen, der kein Root-Benutzer ist, z. B. bochs, oder einen Adapter wie wine. Wenn Sie eine bestimmte Windows-App im Sinn haben, können Sie diese (möglicherweise) auch unter Wine ausführen.

Keith
quelle
Möglicherweise müsste ich aber verlangen, dass eine Anwendung in Mono konvertiert wird, damit sie auch funktioniert. Das wäre eine Menge Ärger. Eigentlich wüsste ich nicht einmal, ob sie es tatsächlich tun würden. Danke für die Antwort. Würdest du zufällig wissen, was die leichtesten VMs sind, um Windows XP SP3 mit zwei wirklich kleinen Apps für die Speichernutzung auszuführen?
Prix
Wahrscheinlich ist der VMware-Player die beste Wahl . Es ist kostenlos von VMware.
Keith
11

Für KVM benötigen Sie Zugriff auf das Gerät /dev/kvm. Wenn Ihr Benutzer auf diesem Gerät lesen und schreiben kann, können Sie als Benutzer KVM-basierte virtuelle Maschinen ausführen.

In den meisten Distributionen haben Mitglieder der kvmGruppe Zugriff auf dieses Gerät. Sie müssen also lediglich Ihren Benutzer zur kvmGruppe hinzufügen .

Für die meisten anderen beschleunigten Technologien müssen Kernelmodule geladen sein (einschließlich Virtualbox und VMWare). Dies erfordert mit ziemlicher Sicherheit einen Zugriff auf Root-Ebene.

Sie können nicht beschleunigte Virtualisierungstechnologien wie jeden Benutzer ausführen. Zum Beispiel qemu im nicht beschleunigten Modus. Beachten Sie, dass es im Vergleich zur beschleunigten Virtualisierung sehr langsam sein wird.

jmtd
quelle
thaks die nicht beschleunigten Informationen war nützlich;)
Prix
7

Benutzermodus Linux ist eine Linux-Virtualisierungslösung, die vollständig im Benutzerbereich ausgeführt wird. Es sind keine Root-Berechtigungen erforderlich.

Es kann jedoch nur einen Linux-Gast auf einem Linux-Host ausführen. Daher ist es nicht geeignet, wenn Sie etwas anderes ausführen möchten.

Riccardo Murri
quelle
4

Eine virtuelle Maschine benötigt einen recht einfachen Zugriff auf den Prozessor (und andere Hardware), um effizient zu sein. Daher wird keine leistungsfähige VM-Software angezeigt, die nicht als Root installiert werden kann.

Bei leichten virtuellen Maschinen wird die Leichtigkeit nur durch die Einbeziehung der erforderlichen Funktionen erreicht. Dies erfordert einige Kenntnisse über das Betriebssystem, das ausgeführt werden soll. Daher unterstützen Open-Source -Lightweight-VMs ( Plex86 , LilyVM ) nur Open-Source-Betriebssysteme. Nach dieser Logik ist Microsoft Virtual PC möglicherweise leichter als VirtualBox / VMWare / etc. aber ich weiß es wirklich nicht. VirtualBox ist als Open Source verfügbar, ist recht benutzerfreundlich und hat für meine Zwecke immer gereicht (aber ich habe andere ausprobiert).

dancek
quelle
2

Virtualbox 4.0.8 muss als Root installiert werden, danach können Benutzer eigene VMs erstellen. Sie müssen nur ein Mitglied der Gruppe seinvboxusers

usermod -G vboxusers USERNAME

Schauen Sie sich diesen Link an , einen schönen Artikel, wie man es kopflos laufen lässt, direkt aus der Shell. Ich stelle auch fest, dass es das RDP-Protokoll unterstützt, was bedeutet, dass Sie nur rdesktopeine Verbindung herstellen können.

Bas Keur
quelle
2

QEmu ist dazu in der Lage. Ich habe es mehrmals gemacht. Nicht sehr performant

Marco
quelle
2

1) Drei Zeilen antworten

Um meine vorgefertigten Images / kompilierten Versionen von qemu zu verwenden, laden Sie sie hier herunter und dekomprimieren Sie sie:

tar -xvzf qemu_packed.tar.gz

Sie können auch mein Debian 8-Bild (1.6G) von hier herunterladen :

tar -xvzf test01.qcow2.tar.gz

und endlich rennen

./command.sh

Sie sollten ein funktionierendes Debian 8 im Textmodus haben, bei dem der SSH-Port im Host-Gast an Port 22222 geöffnet ist. Sie können sich mit dem Benutzer "root" und dem Kennwort "root" anmelden.

2) Längere Antwort, mache diese Bilder selbst

QEMU ist in der Tat eine Lösung, mit der ich mein eigenes Linux-Image auf einem Server installieren kann, auf dem ich keinen Root-Zugriff hatte. Es ist sehr nützlich, ich verwende es zum Beispiel, um ssh umzukehren, ohne mein Hauptbenutzer-Passwort preiszugeben, oder zu Bildungszwecken. Da Sie KVM jedoch nicht für eine echte Virtualisierung ohne Root-Konto verwenden können, können Sie nur eine Emulation durchführen, die recht ineffizient sein kann (bei Befehlszeilenvorgängen habe ich den Overhead jedoch nie wirklich gesehen).

2.1) Pack qemu

Hier ist die Beschreibung, wie ich vorgehen soll. Der erste Schritt ist, qemu "portabel" zu machen, dh auf dem Server ohne Root-Zugriff nutzbar zu machen. Um dies zu tun, haben Sie mehrere Methoden, ich werde versuchen, sie vorzustellen, so dass Sie die von Ihnen bevorzugte auswählen können.

2.1.a) Methode 1: Laden Sie die verfügbare .deb herunter

Diese Lösung lässt sich sehr schnell anwenden (im Grunde genommen, wenn sie funktioniert, erhalten Sie sie mit einem Befehl), aber da mein Skript möglicherweise fehlerhaft ist / eine gewisse Lib vergisst, kann es ziemlich lang sein, alle Binärdateien manuell herunterzuladen ... Ein weiterer Vorteil dieser Methode ist, dass Sie sie im Nicht-Root-Modus direkt auf dem Server ausführen können. Die Idee, qemu-Binärdateien hier abzurufen, ist, die .deb / .rpm-Datei (von apt oder von den Online-Websites, auf denen .deb gehostet wird) abzurufen, sie zu extrahieren, die Bibliotheksabhängigkeiten zu überprüfen lddund alle .debAbhängigkeiten herunterzuladen , die vorhanden sind nicht bereits auf dem Computer vorhanden, um sie zu extrahieren (die .soDateien). Da es ziemlich lang und sich wiederholend sein kann, habe ich ein kleines Skript erstellt, aber wenn Sie mutig sind, können Sie das alles manuell tun ... Es dauert nur einige Zeit. Um es zu verwenden, speichern Sie dieses Skript in einer Dateicreate_qemu_binaries.sh:

#!/usr/bin/env bash
mkdir qemu_extract
cd qemu_extract
echo "########## Downloading qemu... ##########"
apt-get download qemu-system-x86
echo "########## Extracting qemu... ##########"
dpkg -x qemu-system-*.deb .
mkdir -p qemu_packed/lib
cp usr/bin/qemu-system-x86_64 qemu_packed
echo "########## Copy libs... ##########"
ldd usr/bin/qemu-system-x86_64 | grep "=>" | grep -v "not found" | awk '{print "cp "$3" qemu_packed/lib/"}' | bash
mkdir not_found
cd not_found
echo "########## Get not found libs... ##########"
ldd ../usr/bin/qemu-system-x86_64 | grep "not found" | awk '{print $1}' > not_found.txt
echo "########## Download not found libs... ##########"
for lib in $(cat not_found.txt); do echo "=== Dealing with $lib ==="; apt-file search --regexp "/${lib}\$" | sed 's/:.*//' | xargs apt-get download; done
echo "########## Extracting not found libs... ##########"
ls *.deb | xargs -I{} dpkg -x "{}" .
echo "########## Copying not found libs... ##########"
find . | grep ".so" | xargs -I{} cp "{}" ../qemu_packed/lib
cd ..
echo "########## Getting pc-bios... ##########"
git clone https://github.com/qemu/qemu.git
cp -r qemu/pc-bios qemu_packed
echo "########## Finished !!! ##########"
echo "The output file should be in the folder qemu_extract/qemu_packed."
echo "Once you have a filesystem image, you can run it using:"
echo "$ LD_LIBRARY_PATH=$(pwd)/lib ./qemu-system-x86_64 -L pc-bios -no-kvm -m 256 -drive if=virtio,file=<your image>.qcow2,cache=none -display curses -k fr -redir tcp:22222::22"
echo "Don't forget to replace <your image>"

und starte es mit:

chmod +x create_qemu_binaries.sh 
./create_qemu_binaries.sh 

Es funktioniert alles einwandfrei. Am Ende sollten Sie in dem Ordner ./qemu_extract/qemu_packed/eine Datei qemu-system-x86_64(die Hauptbinärdatei), einen Ordner lib(die Bibliotheken, mit denen Sie arbeiten müssen qemu) und einen Ordner haben pc-bios, eine Reihe von Dateien, qemudie ausgeführt werden müssen. Sie können dann qemumithilfe von ausführen (vergessen Sie nicht, durch Ihr Dateisystem-Image zu ersetzen):

$ LD_LIBRARY_PATH=$(pwd)/lib ./qemu-system-x86_64 -L pc-bios -no-kvm -m 256 -drive if=virtio,file=<your image>.qcow2,cache=none -redir tcp:22222::22

Genießen ! (Wenn das Skript bei Ihnen nicht funktioniert, zögern Sie nicht, mich zu fragen. Ich habe es nur auf zwei Computern getestet und kann es kostenlos entfernen, redirwenn Sie keine SSH-Weiterleitung zwischen Host und Vermutung benötigen.)

2.1.b) Methode 2: Wenn Sie auf einen Computer mit Root-Zugriff zugreifen

Die erste Methode benötigt einen Computer mit Root-Zugriff (oder qemuinstalliert). Zuerst qemumit etwas wie installieren

sudo apt install qemu-system-x86

und dann finde den absoluten Pfad von qemu:

$ which qemu-system-x86_64 
/usr/bin/qemu-system-x86_64

Erstellen Sie dann einen Ordner, um es abzulegen:

mkdir -p qemu_packed/lib
cd qemu_packed
cp /usr/bin/qemu-system-x86_64 qemu_packed

und erhalte die Liste der mit qemu verknüpften Bibliotheken:

ldd qemu_packed/qemu-system-x86_64 | awk '{print "cp "$3" qemu_packed/lib"}' | bash

Jetzt müssen wir das BIOS von qemu verwenden lassen. Die Datei ist auf Ihrem System verfügbar, aber ich weiß nicht, warum sie sich in verschiedenen Ordnern befindet. Daher ist es meiner Meinung nach einfacher, sie aus den Quellen abzurufen:

git clone https://github.com/qemu/qemu.git
cp -r qemu/pc-bios qemu_packed
cd qemu_packed

Nun sollte es funktionieren, Sie können diese Dateien auf den Nicht-Root-Computer kopieren und einfach in qemuder folgenden Zeile ausführen (vergessen Sie nicht, das Image zu ersetzen):

$ LD_LIBRARY_PATH=$(pwd)/lib ./qemu-system-x86_64 -L pc-bios -no-kvm -m 256 -drive if=virtio,file=<your image>.qcow2,cache=none

2.1.c) Methode 3: Aus den Quellen

Sie können die Quellen auch kompilieren, aber wenn Sie nicht alle Bibliotheken installiert haben, kann es schwierig sein, die Verwendung eines root-Computers zum Kompilieren von qemu zu vermeiden. Aber ich denke, es ist ein bisschen zuverlässiger, wenn die beiden oben genannten Methoden nicht funktionieren. Sobald es kompiliert ist, rufen Sie die ausführbare Datei ab und führen Sie den gleichen Trick wie oben aus, um die Bibliotheken (unter Verwendung von lddsollten sich alle Bibliotheken bereits auf dem Computer befinden) und die PC-BIOS-Datei abzurufen. Führen Sie es erneut mit demselben Befehl aus.

2.3) Erstellen Sie Ihr eigenes Bild

Wenn Sie kein vorgefertigtes Dateisystem-Image verwenden möchten, befolgen Sie einfach die zahlreichen Tutorials mit den obigen Befehlen anstelle von qemu/qemu-system-x86_64! NB: Wenn Sie auch qemu-imgImages als Nicht-Root erstellen möchten, gehen Sie wie oben beschrieben vor!

Genießen !

NB: Wenn Sie die Curses-Anzeige verwenden möchten, um sie auf einem Server ohne GUI auszuführen, sollten Sie in Ihrem Image eine Zeile in der Boot-Option hinzufügen, damit der Frame-Puffer nicht aktiviert wird in /etc/default/grub:

GRUB_CMDLINE_LINUX_DEFAULT="vga=normal nofb nomodeset bochs_drm.fbdev=off"

(Das Wichtigste ist das Letzte, ich bin mir nicht sicher, ob es gebraucht wird). Ebenso gut wie

GRUB_TERMINAL=console
GRUB_GFXPAYLOAD_LINUX=text

damit grub im textmodus bleibt. Sie können auch den Textmodus in systemd aktivieren, wenn dies nicht ausreicht.

tobiasBora
quelle
1
Könnten Sie mir bitte erklären, warum?
TobiasBora
Ich habe keine Ahnung, aber das ist großartig, danke.
wbkang