Dieses Tutorial beschreibt, wie man Dateien und Verzeichnisse in Qubes OS kopiert: von dom0 zu VMs, zwischen VMs und wie man das automatisch in Skripten macht.
Dieser Blogpost wurde von einer Maschine aus dem Englischen übersetzt. Die Originalversion finden Sie hier: Copying Files in Qubes OS: From and to dom0 and between VMs
Bitte kontaktieren Sie uns , wenn etwas nicht klar beschrieben ist, nicht funktioniert, falsch erscheint oder wenn Sie Unterstützung benötigen.
Qubes OS VMs sind konstruktionsbedingt voneinander isoliert. Daher wird das Kopieren von Dateien zwischen VMs absichtlich etwas komplizierter gestaltet. Dieses Tutorial erklärt, wie man Dateien oder Verzeichnisse von dom0 zu einer Qubes VM, von einer Qubes VM zu einer anderen VM, von einer VM zu dom0 kopiert und wie man all das automatisch in BASH-Skripten durchführt.
Um eine Datei von dom0 zu einer Qubes VM zu kopieren, verwenden Sie den Befehl qvm-copy-to-vm:
echo test-string > testfile.txt
qvm-copy-to-vm work testfile.txt
Dies funktioniert für Verzeichnisse genau auf die gleiche Weise - geben Sie einfach das zu kopierende Verzeichnis als letztes Argument an.
Alle Dateien, die von einer VM zu einer anderen kopiert werden, werden im Verzeichnis /home/user/QubesIncoming/<source-vm>/ gespeichert:
ls /home/user/QubesIncoming/dom0/
testfile.txt
cat /home/user/QubesIncoming/dom0/testfile.txt
test-string
Das Kopieren von Dateien oder Verzeichnissen von einer VM zu dom0 wird stark abgeraten. Dom0 ist das vertrauenswürdigste Betriebssystem und sollte daher überhaupt nicht von externen Quellen modifiziert werden. Aus diesem Grund ist es auch überhaupt nicht mit dem Internet verbunden.
Besonders während der Ersteinrichtung einer neuen Qubes OS Installation ist das Kopieren von Dateien zu dom0 jedoch möglicherweise nicht vermeidbar, zum Beispiel um eine Window-Manager-Konfigurationsdatei zu dom0 zu kopieren.
So können Sie eine einzelne Datei von der work VM zu dom0 kopieren:
qvm-run --pass-io work 'cat /home/user/QubesIncoming/dom0/testfile.txt' > testfile.txt
Um den Inhalt der Datei von der work VM zu überprüfen:
cat testfile.txt
testfile.txt
Mit der oben genannten Methode können Sie nur Dateien kopieren. Um Verzeichnisse zu kopieren, müssen Sie das Verzeichnis zuerst in ein Archiv packen, dann die Archivdatei kopieren und sie anschließend wieder entpacken.
mkdir testdir/
echo test-string > testdir/testfile1.txt
echo some-string > testdir/testfile2.txt
tar cvzf myarchive.tar.gz testdir/
Jetzt kopieren Sie das Archiv zu dom0 und entpacken es:
qvm-run --pass-io work 'cat myarchive.tar.gz' > myarchive.tar.gz
tar xvzf myarchive.tar.gz
Sie können eine Datei oder ein Verzeichnis von einer VM zu einer anderen VM mit dem Befehl qvm-copy kopieren. Beachten Sie, dass Sie mit dem Befehl qvm-copy keine Ziel-VM definieren können.
echo test-string > testfile.txt
qvm-copy testfile.txt
sent 1/1 KB
Beachten Sie, wie das folgende Fenster auf Ihrem Bildschirm erscheint, das Sie auffordert, die Ziel-VM zu definieren und die Aktion zu bestätigen. Dies ist ein zusätzlicher Schritt für die Sicherheit - das Kopieren von Dateien von einer VM zu einer anderen könnte für böswillige Zwecke verwendet werden, weshalb alle diese Aktionen vom Benutzer in dom0 bestätigt werden müssen.
Wenn Sie versuchen, eine Datei mit demselben Dateinamen zweimal zu kopieren, erhalten Sie diesen Fehler:
qvm-copy testfile.txt
qfile-agent: Fatal error: A file named "testfile.txt" already exists in QubesIncoming dir (error type: File exists)
Um dies zu verhindern, müssen Sie die Datei zuerst in /home/user/QubesIncoming/<source-vm>/<filename> verschieben oder löschen.
Die Berechtigung zum Kopieren von Dateien zwischen VMs ist in der Qubes-Richtliniendatei definiert, die sich in dom0:/etc/qubes/policy.d/90-default.policy befindet. Die folgende ist die Standardrichtlinie:
grep Filecopy /etc/qubes/policy.d/90-default.policy
qubes.Filecopy * @anyvm @anyvm ask
Das Sternchen in der zweiten Spalte bedeutet, dass für die Qubes RPC-Richtlinie
Filecopy alle Argumente akzeptiert werden. Das ist hier jedoch irrelevant und nur Teil der Syntax von Qubes-Richtliniendateien, da Filecopy keine Argumente hat. Ein Beispiel für ein Argument für eine RPC-Richtlinie wäre GetDate (verfügbar ab Qubes 4.2 und höher), das wie qrexec-client-vm @default qubes.GetDate oder mit einem Argument qrexec-client-vm @default qubes.GetDate+nanosec verwendet werden kann. Das Sternchen hier würde bedeuten, dass alle Argumente akzeptabel sind, wie das Argument +nanosec. Interessanter Fakt: Das Vergleichen von Zeitstempeln ist eine ziemlich gute Methode, um herauszufinden, ob sich zwei VMs auf demselben Rechner befinden. Besonderen Dank an xaki23 aus dem Qubes Matrix-Kanal
für die Einsicht.
Wie Sie in der letzten Spalte sehen können, ist die Standardrichtlinie für qubes.Filecopy von @anyvm zu @anyvm auf ask gesetzt. Ask bedeutet in diesem Fall das im obigen Abschnitt beschriebene Popup, in dem Sie die Ziel-VM definieren und die Kopieraktion bestätigen müssen.
Sie können dies für bestimmte VMs wie folgt überschreiben, um das automatische Kopieren von Dateien zu ermöglichen:
echo "qubes.Filecopy * work sys-net allow" | tee -a /etc/qubes/policy.d/30-user.policy
Dies erlaubt der work VM, automatisch Dateien zur sys-net VM zu kopieren, ohne vorherige Bestätigung durch das Popup-Fenster in dom0. Dies kann für Skripte nützlich sein.
Wie Sie oben bemerkt haben, hat der Befehl qvm-copy kein Argument, um die Ziel-VM anzugeben. Aus diesem Grund müssen Sie das Tool qvm-copy-to-vm verwenden, das es erlaubt, die Ziel-VM anzugeben:
qvm-copy-to-vm sys-net testfile.txt
Das folgende Beispiel kann verwendet werden, um Dateien zwischen VMs ohne Benutzerbestätigung zu kopieren. Beachten Sie jedoch, dass die Datei über dom0 “gestreamt” wird, was gefährlich sein kann und STARK ABGERATEN wird! TUN SIE DAS NICHT!
qvm-run --pass-io work 'cat testfile.txt' | qvm-run --pass-io sys-net 'cat > testfile.txt'
Sie sollten auch generell nicht das Kopieren von Dateien ohne die interaktive Eingabeaufforderung deaktivieren, da dies einer kompromittierten VM ermöglichen würde, Dateien zu jeder anderen VM zu kopieren:
echo "qubes.Filecopy * @anyvm @anyvm allow" | tee -a /etc/qubes/policy.d/30-user.policy
Für zusätzliche Informationen verweisen Sie auf die folgende Dokumentation und Qubes OS Forum-Seiten:
Qubes OS Dokumentation zum Kopieren und Verschieben von Dateien Qubes OS Dokumentation zum Kopieren von Dateien von dom0 Qubes OS Forum-Thread über das Kopieren von Dateien zu dom0 Qubes OS Forum-Thread darüber, wie man Dateien zwischen VMs ohne die GUI kopiert
Suchen Sie
Linux Notfallunterstützung,
Linux-Beratung für Projekte,
Linux Managed Hosting,
Qubes OS Beratung und Support oder
Online- und Vor-Ort-Schulungen?