Wenn ich einen Anbieter wie Digital Ocean verwende und private/sensible Informationen auf dem VPS speichere, gibt es eine Möglichkeit, diese Informationen zu schützen (indem verhindert wird, dass der VPS-Host Zugriff erhält), während der SFTP- und SSH-Zugriff weiterhin erhalten bleibt?
Akzeptierte Antwort:
Leider ist es überhaupt nicht möglich. Hier sind einige kurze Erklärungen dazu:
Selbst mit Verschlüsselung könnte der Anbieter den aktuellen Zustand von Arbeitsspeicher und Festplatte erstellen und eine neue Instanz klonen, um so viel Zugriff wie möglich zu erhalten. (Quelle)
Selbst wenn Sie einen VPS mit verschlüsselten Dateisystemen betreiben, werden alle In-RAM-Daten unverschlüsselt, auf die die Systemadministratoren des VPS-Hosts Zugriff hätten, einschließlich der Entschlüsselungs-Passphrase. Wenn Sie wirklich diese strengen Sicherheitsanforderungen haben, scheint es, als müssten Sie Ihre eigenen physisch gesicherten Systeme betreiben oder ein dediziertes Server-Hosting-Unternehmen finden, das auf solche Dinge spezialisiert ist. (Quelle)
… denken Sie daran, dass jeder mit Zugriff auf das VPS-Image potenziell Fehler in Ihren Code einfügen kann, um die von Ihnen verwendete Passphrase zu erkennen. (Quelle)
[Verschlüsselung] macht Sinn, wenn Sie die Kontrolle über die Hardware haben; Wenn jemand anderes die Hardware kontrolliert, hat es wenig Sinn, es sei denn, Sie vertrauen darauf, dass der Host es nicht wirklich sehen will … (Quelle)
Physischer Zugriff ist Root-Zugriff. Wenn also jemand physischen Zugriff auf den Server hat, unabhängig davon, ob es sich um eine VM oder Bare Metal handelt, hat er Root-Zugriff. Im Fall von KVM kann der Besitzer des Bare-Metal-Hosts auf den Gast zugreifen. Sie können die Daten immer verschlüsseln, aber das kann nur von begrenztem Nutzen sein, da die Daten entschlüsselt werden, wenn Sie darauf zugreifen.
Das gleiche mit dem Netzwerk. Der Eigentümer der VM kann Ihren Netzwerkdatenverkehr sehen. Auch hier können Sie einen Teil des Datenverkehrs verschlüsseln (https, ssh usw.). (Quelle)
Hier ist eine spezielle Lösung, falls Sie nur einige sensible Daten auf Ihrem VPS speichern möchten:
Wie man ein verschlüsseltes Verzeichnis über eCryptfs erstellt und verwendet und es aus der Ferne einbindet
Voraussetzungen
Installieren Sie die Pakete ecryptfs-utils und sshfs und starten Sie das System neu:
sudo apt update && sudo apt -y install ecryptfs-utils sshfs
sudo apt update && sudo systemctl reboot
Standardeinrichtung und -nutzung
Öffnen Sie ein Terminalfenster und führen Sie diesen Befehl aus:
ecryptfs-setup-private
Dann werden Sie aufgefordert:
-
Enter your login passphrase [<user>]:Diese Passphrase muss mit dem Passwort des aktuellen Benutzers übereinstimmen und wird zum Entsperren (Entschlüsseln) Ihrer verschlüsselten Informationen verwendet. -
Enter your mount passphrase [leave blank ...]:Diese Passphrase wird automatisch verwendet, wenn Ihre verschlüsselten Daten gemountet werden, aber Sie brauchen sie, falls es eine Notsituation gibt und Sie Ihre Daten wiederherstellen müssen, also notieren Sie sie an einem sicheren Ort.
Der obige Befehl erstellt zwei Verzeichnisse:
~/.Privatewo Ihre verschlüsselten Daten gespeichert werden.~/Privatewobei das Verzeichnis~/.Privatewird entschlüsselt gemountet.
Während ~/.Private nicht im Verzeichnis ~/Private gemountet ist hat zwei Dateien mit Anweisungen.
Wenn Sie sich über das Benutzerpasswort (login passphrase ) das Verzeichnis ~/.Private wird automatisch unter ~/Private gemountet und Sie können dort arbeiten. Wenn Sie sich logout oder exit , das Verzeichnis ~/.Private wird ausgehängt. Um dies manuell zu erreichen, können Sie die Befehle verwenden:ecryptfs-mount-private und ecryptfs-umount-private . Mehr zu diesen Optionen finden Sie im Artikel eCryptfs aus dem ArchLinux-Wiki. Siehe auch:wie man ecryptfs mit einem zufälligen Verzeichnis verwendet.
Wenn Sie Ihre SSH/SFTP-Verbindung per Passwort authentifizieren, funktioniert das oben Genannte. Wenn Sie sich jedoch über ein SSH-Schlüsselpaar authentifizieren, müssen Sie ecryptfs-mount-private verwenden um ~/.Private zu mounten . In diesem Fall müssen Sie zuerst eine SSH-Verbindung zum System herstellen und ecryptfs-mount-private ausführen dann können Sie SFTP zum Verzeichnis ~/Private verwenden . Sie können den Befehl ecryptfs-mount-private hinzufügen am Ende von ~/.bashrc um diesen Vorgang zu automatisieren:
echo -e "\n# Mount my Private directory\necryptfs-mount-private\n" | tee -a ~/.bashrc
Mounten Sie ein verschlüsseltes Remote-Verzeichnis und entsperren (entschlüsseln) Sie es lokal
Führen Sie auf dem entfernten Rechner (VPS) und auf dem lokalen Rechner den folgenden Befehl aus und geben Sie identische Daten für login passphrase ein und für mount passphrase auf beiden Rechnern:
ecryptfs-setup-private --nopwcheck --noautomount
Auf dem Remote-Rechner:
-
Führen Sie den Befehl aus:
ecryptfs-mount-privateHinweis: Während ich diesen Ansatz testete, musste ich den obigen Befehl zweimal ausführen!
-
Erstellen Sie einige einfache Inhalte:
echo "Hello Word!" > ~/Private/hello.txt -
Unmounten Sie
~/.Private:ecryptfs-umount-private -
Außerdem können Sie das Verzeichnis
~/.ecryptfsentfernen (vom VPS), wo Ihre Entschlüsselungsdaten gespeichert sind.
Auf dem lokalen Rechner:
-
Mounten Sie den verschlüsselten Remote-Ordner
~/.Privatein den lokalen Ordner~/.Privateübersshfs, und maskieren Sie den Besitz der Dateien (ersetzen Sie<user>@<host_name_or_ip>):sshfs -o idmap=user,uid=$(id -u),gid=$(id -g) <user>@<host_name_or_ip>:.Private ~/.PrivateVerwenden Sie zum Unmounten den folgenden Befehl:
fusermount -u ~/.Privateodersudo umount -l ~/.Private. -
Mounten (und entschlüsseln) Sie dann das lokale Verzeichnis
~/.Privatezu~/Privateecryptfs-mount-private -
Überprüfen Sie, ob die Datei
hello.txtist da:$ cat ~/Private/hello.txt Hello Word! -
Bei Problemen mit dem Befehl
ecryptfs-umount-private(umount.ecryptfs_private) können Sie den lokalen~/Privateaushängen Verzeichnis durch den Befehlsudo umount -l ~/Private. -
eCryptfs hat Fehler und manchmal
ecryptfs-mount-privateundecryptfs-umount-privatefunktionieren nicht richtig. -
Entsprechend dem Obigen können Sie zwei Funktionen innerhalb von
~/.bashrcerstellen Dadurch wird der gesamte Prozess (mounten/unmounten) automatisiert (ersetzen Sie<user>@<host_name_or_ip>):function ecryptfs-remote-mount { sshfs -o idmap=user,uid=$(id -u),gid=$(id -g) <user>@<host_name_or_ip>:.Private ~/.Private > /dev/null 2>&1 sudo keyctl clear @u sudo ecryptfs-insert-wrapped-passphrase-into-keyring $HOME/.ecryptfs/wrapped-passphrase # Attempt to mount, and loop the function unless it is true - due to CLI usage bug ecryptfs-mount-private && echo "Done!" || ecryptfs-remote-mount } function ecryptfs-remote-umount { ecryptfs-umount-private > /dev/null 2>&1 || sudo umount -l $HOME/Private fusermount -u $HOME/.Private > /dev/null 2>&1 || sudo umount -l $HOME/.Private echo "Done!" } export -f ecryptfs-remote-mount ecryptfs-remote-umountDann
source ~/.bashrcund Sie könnenecryptfs-remote-mountverwenden undecryptfs-remote-umountals Befehle.
Referenzen und weiterführende Literatur
-
Erstellen Sie eine verschlüsselte Archivdatei (tar), in der sich Ihre sensiblen Daten verstecken:
- tar.gz-Datei beim Erstellen verschlüsseln
- Wie man ein verschlüsseltes (kennwortgeschütztes) Tar- oder Zip-Archiv unter Linux erstellt
- Wie schütze ich gzip-Dateien auf der Kommandozeile mit einem Passwort?
- Wie schütze ich eine .tgz-Datei mit einem Passwort unter Unix mit tar?.
-
Erstellen Sie ein verschlüsseltes Verzeichnis:
- Verschlüsseltes Backup auf einen SFTP-Server (WebSpace) mit ecryptfs
- Anleitung zum sicheren verschlüsselten Remote-Volume
- Wie kann ich einzelne Ordner verschlüsseln?
- Verschlüsseln von Verzeichnissen mit eCryptfs unter Ubuntu 16.04
- YouTube:Ordner in Ubuntu verschlüsseln
-
Verschlüsselung des Home-Verzeichnisses des Benutzers verwenden:
- Verschlüsselter Home-Ordner
- Anleitung zum verschlüsselten Home-Verzeichnis
- HOW-TO-Verschlüsselung Ihres Home-Verzeichnisses
- Zugriff auf Ihr verschlüsseltes Home-Verzeichnis in Ubuntu
- Migration zu einem verschlüsselten Home-Verzeichnis
- SSH-Nachricht nach Anmeldung, dann Nutzung des Kontos durch den Benutzer einschränken