
Ein Kommandozeilenwerkzeug zum sicheren Sichern, Wiederherstellen und Verifizieren von Secrets mithilfe interoperabler Standards wie age-Verschlüsselung und coreutils, das langfristige Zugänglichkeit ohne Vendor-Lock-in gewährleistet.
secs-man ist ein Werkzeug zur Verwaltung von Backups von Geheimnissen mit dem Gedanken der Werkzeugunabhängigkeit: Wenn Sie Ihre Geheimnisse mit dieser Software verschlüsseln, sollten Sie in der Lage sein, sie ohne diese Software zu entschlüsseln und wiederherzustellen. Selbst wenn secs-man vom Angesicht der Erde verschwindet, sind Ihre Daten weiterhin zugänglich.
secs-man kann verwendet werden, um Geheimnisse lokaler und entfernter Maschinen zu verwalten, und ist ideal für die Erstellung rein lokaler Backups für Daten, die zu sensibel sind, um irgendwo in der Cloud gesichert zu werden.
Sie sollten nicht von einer bestimmten Software abhängen, um Ihre äußerst wichtigen Daten zu sichern.
Jede Software, die Sie zwingt, nach der Verwendung in ihrem Ökosystem zu bleiben (wie etwa: „Wenn Sie es mit dieser Software verschlüsseln, können Sie es nur mit dieser Software entschlüsseln"), macht Sie von ihr abhängig.
Daher sollten Verschlüsselung, Entschlüsselung und Wiederherstellung Ihrer wichtigen Daten entkoppelt sein, das heißt, wenn Sie sie mit Software X verschlüsselt haben, sollten Sie sie auch ohne Software X entschlüsseln können.
In der Praxis können Sie kein Setup erstellen, in dem Ihre Geheimnisse zu 100 % vor Datenverlust sicher sind. Selbst wenn Ihre Software X mit Y, Z und W kompatibel ist, verlieren Sie dennoch den Zugriff auf Ihre Daten, wenn X, Y, Z und W gleichzeitig aufhören zu funktionieren.
Was Sie in der Praxis tun, ist sicherzustellen, dass Sie nur von Technologien abhängig sind, die „Standards" sind oder nahe daran. Ich bin damit einverstanden, von der Existenz von Bash-Interpretern, USB-Anschlüssen und Linux-Maschinen abhängig zu sein.
Das wahre Ziel von secs-man besteht dann darin, perfekt reproduzierbar zu sein, nur mit:
cp, mv und sha256sumDie Abhängigkeit von
ageist die heikelste, aber die Abhängigkeit von irgendeiner kryptografischen Bibliothek ist unvermeidlich, undagehat sowohl große Beliebtheit als auch schöne Bindungen in Rust.
Dies stellt sicher, dass Sie, selbst wenn dieser Software etwas zustoßen sollte, das Sie daran hindert, sie wieder zu verwenden, unter der Annahme, dass age noch existiert und Sie bereit sind, 30 Minuten Ihres Lebens zu investieren, dennoch alle Ihre Geheimnisse wiederherstellen könnten.
Der Abschnitt manuelle Wiederherstellung erklärt, wie Sie die von dieser Software exportierten Geheimnisse importieren können, ohne diese Software zu verwenden, also nur mit Coreutils, age und einem Terminal.
secs-man ist nirgendwo veröffentlicht (weder als veröffentlichte Crate, noch auf nixpkgs, dem AUR oder Ähnlichem). Es kann nur direkt aus diesem Repository installiert werden, auf eine der folgenden Arten.
nix runWenn Sie secs-man nur gelegentlich ausführen müssen, können Sie es direkt ausführen, ohne es zu installieren (erfordert aktivierte Flakes)
nix run github:Fran314/secrets-manager-rs -- export /path/to/secrets /path/to/export/endpoint
Um secs-man systemweit verfügbar zu machen, können Sie dieses Repository in Ihrer Nix-Konfiguration mit fetchGit importieren und das resultierende Paket zu environment.systemPackages (oder home.packages mit home-manager) hinzufügen.
let
secs-man = pkgs.callPackage "${builtins.fetchGit {
url = "https://github.com/Fran314/secrets-manager-rs.git";
ref = "main";
# rev = "<commit>"; # pin a specific commit for reproducibility
}}/default.nix" { };
in
# add `secs-man` to environment.systemPackages or home.packages
cargoWenn Sie nicht auf NixOS sind, können Sie die secs-man-Binärdatei installieren, indem Sie cargo auf dieses Repository verweisen.
cargo install --git https://github.com/Fran314/secrets-manager-rs
Beachten Sie, dass keine dieser Methoden das secs-man-ssh-Skript installiert, das für entfernte Maschinen benötigt wird: Es ist ein eigenständiges Skript, das separat aus diesem Repository kopiert werden muss.
Dieses Werkzeug ermöglicht es, Dateien aus einem bestimmten Quellverzeichnis zu exportieren und zu verschlüsseln und sie durch Import in dasselbe Verzeichnis wiederherzustellen. Die empfohlene Art, dieses Werkzeug zu verwenden, besteht darin, alle Ihre „Geheimnisse" (Schlüssel, Dateien, ...) in einem zentralen Verzeichnis zu haben.
Im Wurzelverzeichnis des Geheimnisverzeichnisses sollte eine Klartextdatei .secrets-manifest vorhanden sein, die die Liste der zu verwaltenden Geheimnisse in Form von Pfaden relativ zum Geheimnisverzeichnis enthält. Dateipfade dürfen keine Leerzeichen enthalten. Jeder Eintrag kann auch einen owner und einen mode angeben, die verwendet werden, um beim Import die korrekten Berechtigungen zu setzen. Siehe .secrets-manifest.example für die Syntax.
Während eines Exports werden die im Manifest aufgeführten Dateien mit age mit einer Passphrase verschlüsselt, die über eine interaktive Eingabeaufforderung abgefragt wird (secs-man liest sie niemals aus einer Datei, einem Argument oder einer Umgebungsvariable). Dieselbe Passphrase wird beim Import erneut abgefragt, um die Dateien zu entschlüsseln. Die Integrität der Dateien wird durch eine begleitende *.sha256-Datei gewährleistet, die automatisch erzeugt wird, falls sie fehlt. Die verschlüsselten Dateien werden in einen mit Zeitstempel versehenen Snapshot innerhalb des Export-Zielverzeichnisses exportiert.
Die Dateien können dann entschlüsselt und importiert werden, indem man entweder auf das Export-Zielverzeichnis (um den neuesten Snapshot zu importieren) oder auf einen bestimmten Snapshot in diesem Verzeichnis zeigt.
Die folgenden Befehle können ohne sudo ausgeführt werden, sie schlagen jedoch fehl, wenn das Manifest einen anderen Besitzer angibt als den Benutzer, der den Befehl ausführt (da der interne chown-Aufruf fehlschlägt).
Um Ihre Geheimnisse zu exportieren, führen Sie aus:
sudo secs-man export /path/to/secrets /path/to/export/endpoint
Um die Integrität eines vorhandenen Exports zu überprüfen (siehe Hinweis unten), führen Sie aus:
# to verify the integrity of all the exported snapshots
sudo secs-man verify-export /path/to/export/endpoint
# to verify the integrity of a specific snapshot
sudo secs-man verify-export /path/to/export/endpoint/export-YYYY-MM-DD_HH-MM-SSZ
Beachten Sie, dass bei jedem Export automatisch eine Integritätsprüfung durchgeführt wird. Dies ist nur erforderlich, wenn Sie die Integrität eines alten Exports überprüfen möchten, der möglicherweise beschädigt oder korrupt geworden ist.
Um Ihre Geheimnisse zu importieren, führen Sie aus:
# to import the latest snapshot
sudo secs-man import /path/to/export/endpoint /path/to/secrets
# to import a specific snapshot
sudo secs-man import /path/to/export/endpoint/export-YYYY-MM-DD_HH-MM-SSZ /path/to/secrets
# to import only specific secrets
sudo secs-man import /path/to/export/endpoint /path/to/secrets --pick ssh/id_ed25519 wg/wg0.key
Dieses Werkzeug kann auch verwendet werden, um Geheimnisse auf entfernten Maschinen bereitzustellen und zu sichern.