Wie man Qubes OS VMs auf der Kommandozeile erstellt mit den Qubes-Verwaltungstools qvm-create, qvm-clone, qvm-prefs, qubes-prefs, qvm-run und qvm-volume
Dieser Blogpost wurde von einer Maschine aus dem Englischen übersetzt. Die Originalversion finden Sie hier: How to Create Qubes OS VMs Using the Command Line
Bitte kontaktieren Sie uns , wenn etwas nicht klar beschrieben ist, nicht funktioniert, falsch erscheint oder wenn Sie Unterstützung benötigen.
Dieses Tutorial erklärt, wie man Qubes OS VMs auf der Kommandozeile mit den Qubes-Verwaltungstools qvm-create, qvm-clone, qvm-prefs, qubes-prefs, qvm-run und qvm-volume erstellt.
Es erklärt detailliert, wie man die verschiedenen Klassen von Qubes OS VMs erstellt, nämlich TemplateVMs, AppVMs, DispVMs und StandaloneVMs, wie man TemplateVMs durch Installation und Konfiguration von Software anpasst, wie Root- und Private-Disks für jeden VM-Typ verwendet und geklont werden und wie verschiedene Qubes-Prefs verwendet werden können, um die interne Nutzung und das Verhalten von VMs in Qubes zu modifizieren.
In Qubes OS läuft jede Anwendung oder Gruppe ähnlicher Anwendungen in ihrer eigenen virtuellen Maschine (VM). Dies bietet robuste Sicherheit durch Kompartimentierung. Dieser Blogpost stellt die verschiedenen Klassen von VMs in Qubes OS vor und führt Sie durch den Prozess der Erstellung jedes Typs mit den Qubes-Kommandozeilen-VM-Verwaltungstools.
Qubes OS kategorisiert VMs in mehrere Klassen:
/home/
, verwirft aber Änderungen an allen anderen Verzeichnissen beim HerunterfahrenFür zusätzliche Informationen siehe das Qubes OS Dokumentations-Glossar.
Sie können die Klasse einer VM mit folgendem Befehl anzeigen. In diesem Beispiel ist die Klasse der VM “debian-12-xfce”, die standardmäßig mit Qubes 4.2 installiert wird, “TemplateVM”. Dieses Template enthält Debian und eine große Auswahl installierter Anwendungen, wie gnome-terminal, firefox, thunderbird und so weiter.
qvm-ls debian-12-xfce
NAME STATE CLASS LABEL TEMPLATE NETVM
debian-12-xfce Running TemplateVM black - -
Die work-VM, die der Qubes OS Installer standardmäßig erstellt, ist eine AppVM, die die TemplateVM “fedora-39-xfce” verwendet. Sie können Firefox in der work-VM starten, und ihre Änderungen unterhalb des /home/-Verzeichnisses, zum Beispiel beim Speichern eines Lesezeichens in Firefox oder beim Herunterladen einer Datei nach ~/Downloads/, sind persistent. Wenn Sie etwas außerhalb der Verzeichnisse /home/, /rw/ oder /usr/local/ in einer AppVM speichern, gehen die Änderungen beim Herunterfahren der VM verloren.
qvm-ls work
NAME STATE CLASS LABEL TEMPLATE NETVM
work Running AppVM blue fedora-39-xfce sys-firewall
AppVMs können auch als Templates für Disposable-VMs dienen. Disposable-VMs bewahren keine Änderungen über Neustarts hinweg, unabhängig davon, in welchem Verzeichnis Sie Dateien speichern oder ändern:
qvm-ls sys-net
NAME STATE CLASS LABEL TEMPLATE NETVM
sys-net Running DispVM purple fedora-39-xfce -
StandaloneVMs sind Kopien von TemplateVMs. Nach ihrer Erstellung haben sie selbst kein Template mehr, und alle Änderungen unterhalb aller Verzeichnisse werden persistent gespeichert. Es ist im Grunde nur eine normale VM.
qvm-ls code-playground
NAME STATE CLASS LABEL TEMPLATE NETVM
code-playground Running StandaloneVM green - sys-firewall
Beim Erstellen neuer VMs in Qubes OS beginnt alles mit der Template-VM. In den meisten Fällen können Sie einfach die Standard-Templates debian-12-xfce verwenden, die bereits eine große Anzahl von Paketen enthalten.
Es wird DRINGEND empfohlen, die Standard-Template-VMs nicht zu modifizieren, außer für apt-Sicherheitsupdates. Wenn den Standard-Templates ein Paket fehlt, das Sie benötigen, sollten Sie eine neue Template-VM erstellen. Eine neue Template-VM wird erstellt, indem eine Kopie einer vorhandenen Template-VM erstellt wird.
Die Template-VMs “debian-12-xfce” und “fedora-39-xfce” sind standardmäßig auf Qubes OS installiert.
Wenn Sie kleinere Images möchten, die nur die gewünschte Software enthalten, können Sie mit dem minimalen Debian-Image beginnen, das mit folgendem Befehl installiert werden kann:
sudo qubes-dom0-update --enablerepo=qubes-templates-itl-testing qubes-template-debian-12-minimal
Sie können alle verfügbaren Templates in der Qubes OS Dokumentation zu Templates einsehen.
Angenommen, wir möchten eine VM erstellen, um Firefox auszuführen. Klonen Sie eine vorhandene Template-VM, um eine neue VM namens template-firefox zu erstellen:
qvm-clone debian-12-minimal template-firefox
Qubes-Prefs (Präferenzen) sind Konfigurationseinstellungen, die das Verhalten und die Eigenschaften von virtuellen Maschinen in Qubes OS definieren. Diese Einstellungen steuern verschiedene Aspekte wie Netzwerkoptionen, verfügbaren Speicher, Festplattengrößen und so weiter.
Sie können alle Prefs einer VM mit dem qvm-prefs-Tool anzeigen:
qvm-prefs template-firefox
audiovm D dom0
autostart D False
backup_timestamp U
debug D False
default_dispvm D default-dvm
default_user D user
dns D 10.139.1.1 10.139.1.2
gateway D
gateway6 D
guivm D dom0
icon D templatevm-orange
include_in_backups D True
installed_by_rpm D False
ip D 10.137.0.13
ip6 D
kernel D 6.6.29-1.fc37
kernelopts D swiotlb=2048
keyboard_layout D us++
klass D TemplateVM
label - orange
mac D 00:16:3e:5e:6c:00
management_dispvm D default-mgmt-dvm
maxmem - 4096
memory - 1024
name - template-firefox
netvm - sys-firewall
provides_network D False
qid - 13
qrexec_timeout D 60
shutdown_timeout D 60
start_time D
stubdom_mem U
stubdom_xid D -1
updateable D True
uuid - d5455b0d-35b7-4d2d-9ded-cc0eb4849c03
vcpus - 2
virt_mode - hvm
visible_gateway D 10.138.21.233
visible_gateway6 D
visible_ip D 10.137.0.13
visible_ip6 D
visible_netmask D 255.255.255.255
xid D -1
Um eine bestimmte Pref anzuzeigen, fügen Sie sie einfach am Ende des Befehls hinzu - das k in class ist kein Rechtschreibfehler, so schreibt Qubes OS es.
qvm-prefs template-firefox klass
TemplateVM
Sie können Prefs setzen, indem Sie den gewünschten Wert der Pref als drittes Argument angeben:
qvm-prefs template-firefox memory
400
qvm-prefs template-firefox memory 2048
qvm-prefs template-firefox memory
2048
Beachten Sie, dass verschiedene Klassen von VMs einige leicht unterschiedliche Pref-Schlüssel haben - einige Schlüssel wie “memory” sind für alle Arten von VMs verfügbar, während “template_for_dispvms” zum Beispiel nur für AppVMs verfügbar ist.
Um eine detaillierte Erklärung jeder Pref zu erhalten, die für die “template-firefox”-VM verfügbar ist, verwenden Sie folgenden Befehl:
qvm-prefs template-firefox --help-properties
Beim Erstellen einer neuen TemplateVM aus einer vorhandenen TemplateVM erbt die neue TemplateVM alle Prefs der ursprünglichen TemplateVM.
Identische Prefs:
audiovm dom0
autostart False
backup_timestamp
debug False
default_dispvm default-dvm
default_user user
dns 10.139.1.1
gateway
gateway6
guivm dom0
icon templatevm-orange
include_in_backups True
installed_by_rpm False
ip6
kernel 6.6.29-1.fc37
kernelopts swiotlb=2048
keyboard_layout us++
klass TemplateVM
label orange
mac 00:16:3e:5e:6c:00
management_dispvm default-mgmt-dvm
maxmem 4096
memory 1024
netvm None
provides_network False
qrexec_timeout 60
shutdown_timeout 60
start_time
stubdom_mem
stubdom_xid -1
updateable True
vcpus 2
virt_mode hvm
visible_gateway6
visible_ip6
visible_netmask 255.255.255.255
xid -1
Unterschiedliche Prefs:
< Prefs der ursprünglichen TemplateVM
> Prefs der neuen TemplateVM
< ip 10.137.0.13
> ip 10.137.0.22
< name debian-12-xfce
> name template-test
< qid 13
> qid 22
< uuid d5455b0d-35b7-4d2d-9ded-cc0eb4849c03
> uuid 73e8cf04-8827-417d-ad90-6c36e8e5b398
< visible_gateway 10.138.21.233
> visible_gateway 10.137.0.8
< visible_ip 10.137.0.13
> visible_ip 10.137.0.22
Sie können die Disk der VM für das Root-Verzeichnis vergrößern, das standardmäßig 20 GB groß ist. Das /home/-Verzeichnis einer TemplateVM wird nicht verwendet, wenn das /home/-Verzeichnis einer AppVM erstellt wird. Stattdessen wird das /etc/skel-Verzeichnis der TemplateVM verwendet, um das /home/-Verzeichnis in der AppVM zu befüllen. Daher sind alle Änderungen am /home/-Verzeichnis der TemplateVM ziemlich irrelevant.
qvm-volume resize template-firefox:root 50G
Qubes OS verwendet LVM, um logische Volumes für jede VM zu erstellen. So zeigen Sie alle von einer TemplateVM verwendeten Volumes an:
sudo lvdisplay /dev/qubes_dom0/vm-template-firefox-*
--- Logical volume ---
LV Path /dev/qubes_dom0/vm-template-firefox-root
LV Name vm-template-firefox-root
VG Name qubes_dom0
LV UUID ZrYB1S-eEd7-RMeG-uIdA-7OXM-ZszW-fGPJxT
LV Write Access read/write
LV Creation host, time dom0, 2024-05-14 16:12:13 -0400
LV Pool name vm-pool
LV Thin origin name vm-template-firefox-root-1715717848-back
LV Status available
# open 0
LV Size 20.00 GiB
Mapped size 8.99%
Current LE 5120
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 2048
Block device 253:84
--- Logical volume ---
LV Path /dev/qubes_dom0/vm-template-firefox-private
LV Name vm-template-firefox-private
VG Name qubes_dom0
LV UUID SGON7W-Rg38-De6v-Aufe-ZJ3n-Es0A-TelCXc
LV Write Access read/write
LV Creation host, time dom0, 2024-05-14 16:12:13 -0400
LV Pool name vm-pool
LV Thin origin name vm-template-firefox-private-1715717848-back
LV Status available
# open 0
LV Size 2.00 GiB
Mapped size 4.98%
Current LE 512
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 2048
Block device 253:56
Im nächsten Schritt nehmen wir Anpassungen an der Template-VM vor, wie die Installation und Konfiguration von apt-Paketen. Dies kann durch Ausführen von Befehlen oder durch Ausführen von Skripten auf der VM erfolgen. Beachten Sie, dass alle Änderungen am /home/-Verzeichnis nicht in AppVMs vorhanden sein werden, die die TemplateVM als Template verwenden, da AppVMs ein neues logisches LVM-Volume erstellen, das in diesem Verzeichnis eingehängt wird. Wenn Sie persistente Änderungen am /home/-Verzeichnis wünschen, tun Sie dies in der AppVM.
Verwenden Sie qvm-run, um einfache BASH-Befehle auf der VM auszuführen. Beachten Sie, dass dieses Tool ohne ein zusätzliches Argument namens “–pass-io” die Ausgabe der ausgeführten Befehle nicht ausgibt:
qvm-run template-firefox whoami
Running 'whoami' on template-firefox
echo $?
0
Um die Ausgabe anzuzeigen, die der Befehl zurückgibt, können wir das qvm-run --pass-io-Argument verwenden. Dieser Ansatz wird jedoch nicht empfohlen, da er verwendet werden kann, um Daten von einer VM in ein Terminal zu senden, das in dom0 läuft!
qvm-run --pass-io template-firefox whoami
user
Sie können Befehle auch direkt als Root-Benutzer ausführen:
qvm-run --user root --pass-io template-firefox whoami
root
Führen Sie kleine Skripte direkt auf einer Qubes-VM mit folgendem Befehl aus:
cat << EOF | qvm-run --pass-io --user root --service template-firefox qubes.VMShell
set -x
whoami
hostname
EOF
root
template-firefox
Hinweis: Wenn Sie mit dem minimalen Debian-Template arbeiten, sind standardmäßig zwei grafische Terminal-Emulatoren installiert: xterm und uxterm. Ich persönlich bevorzuge xfce4-terminal, Sie können es mit folgenden Befehlen installieren:
qvm-run -u root template-firefox "apt-get update"
qvm-run -u root template-firefox "apt-get -y install xfce4-terminal"
Der praktischste und sicherste Ansatz zum Ausführen von Befehlen innerhalb einer Qubes-VM besteht darin, einen grafischen Terminal-Emulator wie xterm, gnome-terminal oder xfce4-terminal innerhalb einer VM zu starten, der dann den Befehl ausführt. Auf diese Weise wird die Ausgabe, die die Befehle erzeugen, nur innerhalb des grafischen Terminal-Emulators angezeigt, xfce4-terminal in diesem Beispiel, der INNERHALB der VM läuft. Daher kann dom0 nicht davon betroffen sein, wenn Malware-generierte Ausgabe produziert wird.
qvm-run template-firefox xfce4-terminal --hold --command "whoami"
Die --command-Option von grafischen Terminals wie xfce4-terminal und gnome-terminal ist ziemlich eingeschränkt, und das Starten des Terminal-Emulators als Argument für qvm-run macht das Übergeben von Argumenten an die Tools, die Sie innerhalb des Terminals ausführen möchten, ziemlich problematisch. Der nächste Abschnitt behandelt die beste Lösung.
Da wir eine TemplateVM konfigurieren, ist davon auszugehen, dass mehr als ein Befehl auf der VM ausgeführt werden muss. Wir können alle diese Befehle in ein Skript einfügen, das Skript auf die VM hochladen und das Skript als einzelnes Argument für xfce4-terminal ausführen.
Erstellen Sie dazu ein Skript in dom0 namens new-template-basics.sh mit folgendem Inhalt:
#!/bin/bash
#
# Setup everything we need for the firefox VM
apt-get update
apt-get update
apt-get -y upgrade
# Configure locale
apt-get -y install locales-all
locale-gen en_US.UTF-8
# Install apt packages
apt-get -y install xfce4-terminal firefox curl flatpak
# Add flatpak remote
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
# Install libre-wolf, a firefox browser modified for privacy
flatpak install --verbose -y --noninteractive flathub io.gitlab.librewolf-community
Laden Sie jetzt das Skript auf die VM hoch:
qvm-copy-to-vm template-firefox new-template-basics.sh
Das Skript befindet sich jetzt unter template-firefox:/home/user/QubesIncoming/dom0/new-template-basics.sh. Wir können es jetzt ausführbar machen. Denken Sie daran, aus Sicherheitsgründen nicht das --pass-io-Flag zu verwenden!
qvm-run template-firefox "chmod 700 /home/user/QubesIncoming/dom0/new-template-basics.sh"
Wir können jetzt das Skript in einem grafischen Terminal ausführen:
qvm-run template-firefox "xfce4-terminal --hold --command /home/user/QubesIncoming/dom0/new-template-basics.sh"
Wenn Ihre Skripte zusätzliche Dateien benötigen, wie Konfigurationsdateien, können Sie ein ganzes Verzeichnis in die VM kopieren:
qvm-copy-to-vm template-firefox templates/
Das Verzeichnis ist dann auf der VM unter template-firefox:/home/user/QubesIncoming/dom0/templates verfügbar, und Sie können die Dateien in Ihren Setup-Skripten verwenden.
Das folgende BASH-Skript kopiert BASH-Skripte in VMs und führt sie aus. Verwendung:
# Syntax
qvm-run-script [target-vm] [path-to-script] <user>
# Run dom0:~/scripts/fix-network-manager.sh in sys-net as default user (root)
qvm-run-script sys-net ~/scripts/fix-network-manager.sh
# Run a script as user "user" inside an AppVM
qvm-run-script app-firefox ~/scripts/update-virtualenv-pip-packages.sh user
Sie können das Skript nach dom0 kopieren, indem Sie das Skript als Datei in einer beliebigen VM erstellen, wie der VM, die Sie zum Ausführen eines Browsers verwenden, um diese Website anzuzeigen, und dann den folgenden Befehl ausführen, um die Datei nach dom0 zu kopieren:
qvm-run work --pass-io "cat /home/user/qvm-run-script.sh" | sudo tee /usr/local/bin/qvm-run-script.sh
Speichern Sie das folgende BASH-Skript in dom0 unter /usr/local/bin/qvm-run-script
#!/bin/bash
#
# Ein Skript innerhalb einer Qubes-VM ausführen
# Argumente parsen
myvm=$1
myscript=$2
myuser=${3:-root}
# Argumente überprüfen
if test -z "$myvm"; then
echo "Ziel-VM als erstes Argument angeben, Abbruch!"
exit 1
elif ! qvm-ls | grep --quiet $myvm; then
echo "Keine solche VM: $myvm, Abbruch!"
exit 1
elif ! test -f "$myscript"; then
echo "Skript zum Ausführen in der Ziel-VM als zweites Argument angeben, Abbruch!"
exit 1
fi
# Sicherstellen, dass der Zielpfad auf der VM leer ist und keine Datei vom vorherigen Lauf vorhanden ist
qvm-run --pass-io --user $myuser $myvm "rm -f /home/user/QubesIncoming/dom0/$myscript"
# Das Skript in die VM kopieren
qvm-copy-to-vm $myvm $myscript
# Das Skript ausführbar machen
qvm-run --pass-io --user $myuser $myvm "chmod 500 /home/user/QubesIncoming/dom0/$myscript"
# Das Skript in xfce4-terminal ausführen
# --hold schließt das Terminal nicht, nachdem der letzte Befehl ausgeführt wurde, Sie müssen das Fenster manuell schließen
qvm-run --pass-io --user $myuser $myvm "xfce4-terminal --hold --command /home/user/QubesIncoming/dom0/$myscript"
# Aufräumen: das ausgeführte Skript entfernen
qvm-run --pass-io --user $myuser $myvm "rm /home/user/QubesIncoming/dom0/$myscript"
Vergessen Sie nicht, das Skript ausführbar zu machen:
chmod 750 /usr/local/bin/qvm-run-script
Bevor die Template-VM verwendet werden kann, um App-VMs zu erstellen, muss sie heruntergefahren werden:
qvm-shutdown --wait template-firefox
Jetzt, da wir eine Template-VM mit installiertem Firefox haben, können wir eine AppVM aus dieser TemplateVM erstellen.
Beim Starten einer AppVM in Qubes wird ein temporärer Snapshot der Root-Disk der TemplateVM erstellt, der dann gebootet wird. AppVMs können Daten persistent speichern, wofür ein LVM-Volume in dom0 erstellt wird, das später unter appvm:/rw/ eingehängt wird, wobei /rw/home/ nach /home/ gebunden wird. Die Inhalte des /home/-Verzeichnisses werden durch die Inhalte des /etc/skel/-Verzeichnisses der TemplateVM befüllt. Zusätzlich werden die Inhalte des /usr/local.orig/-Verzeichnisses der TemplateVM verwendet, um das /usr/local/-Verzeichnis der AppVM zu befüllen. Für zusätzliche Informationen siehe die Qubes-Dokumentation zu Vererbung und Persistenz in verschiedenen VM-Typen
.
Es gibt drei spezielle Verzeichnisse: /home/user/, /rw/ und /usr/local/, die persistent sind. Alle Dateien in ihnen werden auf einem privaten Volume gespeichert, das mit der AppVM verbunden ist. Alle anderen Dateien und Verzeichnisse, einschließlich derer, die die Betriebssystemdateien enthalten, werden verworfen, da sie aus dem temporären Snapshot des Root-Volumes der TemplateVM geladen werden.
Die persistenten Verzeichnisse werden alle von appvm:/dev/xvdb eingehängt, dem privaten Volume, das mit der AppVM verbunden ist. Diese Gerätedatei wird unter /rw/ eingehängt und enthält ein Verzeichnis namens /rw/home und /rw/usrlocal (wir haben hier keinen Schrägstrich vergessen). Mit /etc/fstab werden diese Verzeichnisse nach /home/ und /usr/local gebunden:
app:/dev/xvdb wird unter /rw/ eingehängt:
grep xvdb /etc/fstab
/dev/xvdb /rw auto noauto,defaults,discard,nosuid,nodev 1 2
Danach werden /rw/home und /rw/usrlocal nach /home und /usr/local gebunden:
grep bind /etc/fstab
/rw/home /home none noauto,bind,defaults,nosuid,nodev 0 0
/rw/usrlocal /usr/local none noauto,bind,defaults 0 0
Auf diese Weise bieten AppVMs persistenten Speicher für Dateien wie Dokumente oder die Konfigurationsdateien Ihres Browsers wie Lesezeichen und so weiter oder SSH-Schlüsselpaare und Konfiguration in ~/.ssh/.
Wenn Sie Firefox verwenden, um eine bösartige Website zu besuchen, und diese Malware irgendwo außerhalb dieser persistenten Verzeichnisse installiert, zum Beispiel in /etc/firefox, dann wird diese Änderung nicht über Neustarts hinweg bestehen bleiben - es sei denn, Sie besuchen die Website erneut.
Um eine AppVM aus einer TemplateVM zu erstellen:
qvm-create --class AppVM --label blue --template template-firefox app-firefox
Beachten Sie, dass qvm-create ein --property-Argument hat, das verwendet werden kann, um Prefs direkt zu setzen. Da dies zu ziemlich langen qvm-create-Befehlen führt, bevorzuge ich persönlich die Verwendung von qvm-prefs nach dem Erstellen der VM.
Hier sind einige häufig verwendete Qubes-Prefs für AppVMs:
qvm-prefs app-firefox netvm sys-firewall
qvm-prefs app-firefox template_for_dispvms false
qvm-prefs app-firefox autostart true
qvm-prefs app-firefox provides_network false
qvm-prefs app-firefox label orange
qvm-prefs app-firefox vcpus 4
qvm-prefs app-firefox memory 2048
qvm-prefs app-firefox maxmem 4096
Um die Home-Partition einer AppVM zu vergrößern, verwenden Sie folgenden Befehl, der die Größe des privaten LVM-Volumes der AppVM ändert. Siehe unten für zusätzliche Informationen zu den verwendeten LVM-Volumes.
qvm-volume resize app-firefox:private 50G
Beim Starten einer AppVM klont Qubes OS die LVM-Volumes der TemplateVM, um Root-Volumes für die AppVM zu erstellen. So zeigen Sie alle von einer AppVM verwendeten Volumes an, die derzeit NICHT läuft. Für laufende AppVMs gibt es zusätzliche Volumes, wie den temporären Klon der Root-Disk der TemplateVM.
sudo lvdisplay /dev/qubes_dom0/vm-app-firefox-*
--- Logical volume ---
LV Path /dev/qubes_dom0/vm-app-firefox-private
LV Name vm-app-firefox-private
VG Name qubes_dom0
LV UUID srQf86-f44I-B31g-8TJU-eDpz-4FTQ-KIYKI0
LV Write Access read/write
LV Creation host, time dom0, 2024-05-14 16:44:24 -0400
LV Pool name vm-pool
LV Status available
# open 0
LV Size 2.00 GiB
Mapped size 0.00%
Current LE 512
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 2048
Block device 253:79
Wenn Sie Pakete mit apt innerhalb einer AppVM installieren, werden die Änderungen beim Herunterfahren verworfen. Nur Änderungen unterhalb der Verzeichnisse /home/, /usr/local/ und /rw/ bleiben erhalten. Für zusätzliche Informationen siehe die Qubes-Dokumentation zu persistentem Speicher in AppVMs
.
Beachten Sie, dass das /home/-Verzeichnis der TemplateVM nicht verwendet wird, um das /home/-Verzeichnis in der AppVM zu befüllen!
qvm-run app-firefox "mkdir /home/user/projects/"
Beim Erstellen von AppVMs aus TemplateVMs erbt die AppVM fast alle Prefs von den TemplateVMs. Der Rest stammt von dem, was in den globalen Standardeinstellungen festgelegt ist, die Sie mit dem Befehl qubes-prefs anzeigen und definieren können.
Identische Prefs:
audiovm dom0
autostart False
backup_timestamp
debug False
default_dispvm default-dvm
default_user user
dns 10.139.1.1
gateway
gateway6
guivm dom0
include_in_backups True
installed_by_rpm False
ip6
kernel 6.6.29-1.fc37
kernelopts swiotlb=2048
keyboard_layout us++
label orange
mac 00:16:3e:5e:6c:00
management_dispvm default-mgmt-dvm
maxmem 4096
memory 1024
provides_network False
qrexec_timeout 60
shutdown_timeout 60
start_time
stubdom_mem
stubdom_xid -1
vcpus 2
virt_mode hvm
visible_gateway 10.138.21.233
visible_gateway6
visible_ip6
visible_netmask 255.255.255.255
xid -1
Unterschiedliche Prefs:
< Pref der TemplateVM
> Pref der AppVM
< icon templatevm-orange
> icon appvm-orange
< ip 10.137.0.13
> ip 10.137.0.35
< klass TemplateVM
> klass AppVM
< name tpl-deb-12
> name app-test
< netvm None
> netvm sys-firewall
< qid 13
> qid 35
< updateable True
> updateable False
< uuid d5455b0d-35b7-4d2d-9ded-cc0eb4849c03
> uuid 3d47bf5f-80d0-4770-8a0a-3a0a3e33332a
< visible_ip 10.137.0.13
> visible_ip 10.137.0.35
Keine in einer Disposable-VM geänderten Dateien bleiben erhalten. Alle Volumes, die DispVMs verwenden, werden beim Herunterfahren der VM verworfen. Disposable-VMs benötigen eine AppVM als ihr Template.
Es gibt zwei Arten von Disposable-VMs:
qvm-run --dispvm
zum Starten eines einzelnen Befehls, wie
firefox
, und wird ein zufälliger Name wie “Disp123” zugewiesenqvm-create --dispvm
erstellt und haben einen persistenten Namen. Obwohl sie heruntergefahren werden können, wird die AppVM bei jedem Start vollständig geklont. Am hilfreichsten für systembezogene VMs wie “sys-net”, bei denen Sie einen persistenten Namen für die VM benötigen, um Netzwerk-VMs zu verketten.Alle Disposable-VMs, sowohl temporäre, die mit qvm-run --dispvm <AppVM> <tool-to-launch-in-disp-vm> erstellt wurden, als auch persistente, die mit qvm-create --class DispVM --label <color> --template <AppVM> <permanent-dispvm-name> erstellt wurden, erben das appvm:/dev/xvdb-Gerät, das zum Einhängen der Verzeichnisse /home/, /rw/ und /usr/local/ verwendet wird. Dies bedeutet, dass alle Dateien in diesen Verzeichnissen in der AppVM auch in der Disposable-VM vorhanden sind.
Damit eine AppVM als Template für eine DisposableVM verwendet werden kann, verwenden Sie folgenden qvm-prefs-Befehl:
qvm-prefs app-firefox template_for_dispvms true
Wie Sie unten sehen können, ist die Pref template_for_disvms nur für AppVMs verfügbar und nicht für TemplateVMs oder StandaloneVMs:
qvm-prefs template-firefox template_for_dispvms
usage: qvm-prefs [--verbose] [--quiet] [--help] [--help-properties] [--hide-default] [--get]
[--set] [--default]
VMNAME [PROPERTY] [VALUE]
qvm-prefs: error: no such property: 'template_for_dispvms'
Mit app-firefox als Template können wir mehrere Disposable-VMs davon erzeugen - jede erstellte DispVM ist ihre eigene VM, und jede führt den Befehl /usr/bin/firefox aus. Sie können auch einfach firefox eingeben.
qvm-run --dispvm app-firefox /usr/bin/firefox
Running 'firefox' on $dispvm:app-firefox
Die qvm-ls-Ausgabe unten zeigt, dass Qubes der VM den Namen “disp960” zugewiesen hat. Dies ist ein zufälliger Name, der dieser temporären Disposable-VM gegeben wurde. Sie können den obigen qvm-run-Befehl wiederholen, um zusätzliche Instanzen wie diese zu erzeugen.
qvm-ls --running | grep DispVM
disp960 Running DispVM orange app-firefox -
Nachdem der Befehl abgeschlossen ist, also nachdem Sie Firefox geschlossen haben, wird Qubes die Disposable-VM automatisch herunterfahren und löschen.
Besonders für Netzwerk-VMs wie “sys-net” kann es wünschenswert sein, eine Disposable-VM zu haben - sys-net ist ziemlich risikoreich, da es sich direkt mit “dem Kaffeehaus-WLAN” verbindet. Daher ist es sinnvoll, alle Änderungen beim Herunterfahren zu verwerfen. Der Qubes OS Installer hat sogar eine Funktion während der Installation, um sys-net disposable zu machen.
Wenn Sie eine Disposable-VM mit einem persistenten Namen wie “sys-net” anstelle eines zufälligen Namens wie “disp960” erstellen möchten, verwenden Sie qvm-create mit dem class=DispVM-Argument:
qvm-create --class DispVM --label purple --template app-firefox disposable-firefox
Wenn Sie jetzt Firefox innerhalb der benannten Disposable-VM mit qvm-run starten:
qvm-run disposable-firefox /usr/bin/firefox
Qubes startet Firefox in einer VM namens “disposable-firefox”. Sie können diese VM herunterfahren, und sie wird in den Shutoff-Zustand übergehen, und keine Änderungen, die während ihrer Laufzeit vorgenommen wurden, bleiben bestehen. Das qvm-run --dispvm-Argument wird für persistente Disposable-VMs nicht benötigt.
Siehe die Qubes OS Dokumentation zu benannten Disposable-VMs für zusätzliche Informationen.
Beim Erstellen einer regulären oder benannten (persistenten) DispVM aus einer AppVM erbt die neue DispVM einige der Prefs von der AppVM:
Identische Prefs:
audiovm dom0
autostart False
backup_timestamp
debug False
default_user user
dns 10.139.1.1
gateway
gateway6
guivm dom0
include_in_backups True
installed_by_rpm False
ip6
kernel 6.6.29-1.fc37
kernelopts swiotlb=2048
keyboard_layout us++
mac 00:16:3e:5e:6c:00
management_dispvm default-mgmt-dvm
maxmem 4096
memory 1024
netvm sys-firewall
provides_network False
qrexec_timeout 60
shutdown_timeout 60
start_time
stubdom_mem
stubdom_xid -1
updateable False
vcpus 2
virt_mode hvm
visible_gateway 10.138.21.233
visible_gateway6
visible_ip6
visible_netmask 255.255.255.255
xid -1
Unterschiedliche Prefs:
< Prefs der AppVM
> Prefs der DispVM
< ip 10.137.0.35
> ip 10.138.35.139
< klass AppVM
> klass DispVM
> label black
< label orange
< name app-test
> name dsp-test
< qid 35
> qid 36
< template tpl-deb-12
> template app-test
< uuid 3d47bf5f-80d0-4770-8a0a-3a0a3e33332a
> uuid 138775bb-f46a-44f1-a40b-18603af928b0
< visible_ip 10.137.0.35
> visible_ip 10.138.35.139
Beim Starten einer DispVM erstellt Qubes OS Snapshots der LVM-Volumes für die Root-Disk von der TemplateVM, die die AppVM verwendet, und das private Volume, das /home/ enthält, von der AppVM. So zeigen Sie alle von einer DispVM verwendeten Volumes an, die derzeit läuft:
sudo lvdisplay /dev/qubes_dom0/vm-disp834*
--- Logical volume ---
LV Path /dev/qubes_dom0/vm-disp834-volatile
LV Name vm-disp834-volatile
VG Name qubes_dom0
LV UUID J462m5-ebXA-fs6Y-3fhV-e245-8N4i-LyNkBi
LV Write Access read/write
LV Creation host, time dom0, 2024-05-21 17:34:39 -0400
LV Pool name vm-pool
LV Status available
# open 2
LV Size 12.00 GiB
Mapped size 0.01%
Current LE 3072
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 2048
Block device 253:132
--- Logical volume ---
LV Path /dev/qubes_dom0/vm-disp834-root-snap
LV Name vm-disp834-root-snap
VG Name qubes_dom0
LV UUID 5vTKHJ-tIET-VzVi-EJqm-DTGX-26Uo-7Ec0nd
LV Write Access read/write
LV Creation host, time dom0, 2024-05-21 17:34:39 -0400
LV Pool name vm-pool
LV Thin origin name vm-template-firefox-root
LV Status available
# open 2
LV Size 20.00 GiB
Mapped size 9.12%
Current LE 5120
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 2048
Block device 253:133
--- Logical volume ---
LV Path /dev/qubes_dom0/vm-disp834-private-snap
LV Name vm-disp834-private-snap
VG Name qubes_dom0
LV UUID dVtXed-7GnK-L13W-f76E-OfvX-aSry-UW3FNv
LV Write Access read/write
LV Creation host, time dom0, 2024-05-21 17:34:39 -0400
LV Pool name vm-pool
LV Thin origin name vm-app-firefox-private
LV Status available
# open 2
LV Size 2.00 GiB
Mapped size 1.81%
Current LE 512
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 2048
Block device 253:134
Eine Standalone-VM ist eine reguläre virtuelle Maschine, wie Sie sie bereits kennen. Alle Änderungen daran sind persistent. Sie wird durch Klonen einer Template-VM erstellt. Alle Änderungen an einer Standalone-VM sind permanent, keine der “Qubes-Magie”, die verwendet wird, um Teile oder alle an VMs vorgenommenen Änderungen nicht-persistent zu machen, wird verwendet.
Um eine Standalone-VM zu erstellen, verwenden Sie folgenden Befehl:
qvm-create --standalone --template debian-12-xfce --label green code-playground
code-playground: Cloning root volume
Starten Sie die VM:
qvm-start --wait code-playground
Um die Klasse für eine Standalone-VM anzuzeigen:
qvm-ls code-playground
NAME STATE CLASS LABEL TEMPLATE NETVM
code-playground Running StandaloneVM green - sys-firewall
Dieser VM-Typ ist am sinnvollsten für Experimente und sollte für den Produktionseinsatz vermieden werden.
Beim Erstellen einer StandaloneVM aus einer TemplateVM erbt die neue StandaloneVM fast alle Prefs von der TemplateVM:
Identische Prefs:
audiovm dom0
autostart False
debug False
default_dispvm default-dvm
default_user user
dns 10.139.1.1
guivm dom0
include_in_backups True
installed_by_rpm False
kernel 6.6.29-1.fc37
kernelopts swiotlb=2048
keyboard_layout us++
mac 00:16:3e:5e:6c:00
management_dispvm default-mgmt-dvm
maxmem 4096
memory 1024
provides_network False
qrexec_timeout 60
shutdown_timeout 60
stubdom_xid -1
updateable True
vcpus 2
virt_mode hvm
visible_gateway 10.138.21.233
visible_netmask 255.255.255.255
xid -1
Unterschiedliche Prefs:
< icon templatevm-orange
> icon standalonevm-green
< ip 10.137.0.13
> ip 10.137.0.33
< klass TemplateVM
> klass StandaloneVM
> label green
< label orange
< name debian-12-xfce
> name code-playground
< netvm None
> netvm sys-firewall
< qid 13
> qid 33
< uuid d5455b0d-35b7-4d2d-9ded-cc0eb4849c03
> uuid 988f5070-35e9-4b0f-a361-fa0080083a46
< visible_ip 10.137.0.13
> visible_ip 10.137.0.33
Eine Standalone-VM hat zwei Volumes, eines für das Root-Dateisystem und eines für Home. Obwohl sie zwei Volumes hat, speichern beide Daten persistent, und alle an ihnen vorgenommenen Änderungen sind permanent.
sudo lvdisplay /dev/qubes_dom0/vm-code-sandbox*
--- Logical volume ---
LV Path /dev/qubes_dom0/vm-code-sandbox-root
LV Name vm-code-sandbox-root
VG Name qubes_dom0
LV UUID vHwtNU-9AUr-APMG-V8cL-IOTc-u1qY-RTFXMI
LV Write Access read/write
LV Creation host, time dom0, 2024-05-15 17:10:21 -0400
LV Pool name vm-pool
LV Thin origin name vm-code-sandbox-root-1716327722-back
LV Status available
# open 0
LV Size 20.00 GiB
Mapped size 8.73%
Current LE 5120
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 2048
Block device 253:118
--- Logical volume ---
LV Path /dev/qubes_dom0/vm-code-sandbox-private
LV Name vm-code-sandbox-private
VG Name qubes_dom0
LV UUID u3qsKy-nHzc-2MmH-aIfd-dfkK-BLqJ-nNhCmk
LV Write Access read/write
LV Creation host, time dom0, 2024-05-15 17:10:22 -0400
LV Pool name vm-pool
LV Thin origin name vm-code-sandbox-private-1716327722-back
LV Status available
# open 0
LV Size 2.00 GiB
Mapped size 4.93%
Current LE 512
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 2048
Block device 253:120
Suchen Sie
Linux Notfallunterstützung,
Linux-Beratung für Projekte,
Linux Managed Hosting,
Qubes OS Beratung und Support oder
Online- und Vor-Ort-Schulungen?