Sicher übergeben Passwort für openssl über stdin
Wir wissen, wir können eine Datei verschlüsseln mit openssl mit diesem Befehl:
openssl aes-256-cbc -a -salt -in twitterpost.txt -out foo.enc -pass stdin
Wird das Paßwort von stdin Lesen. Als solche geben Sie das Kennwort im Voraus, alles, was wir tun müssen, ist voranzustellen
echo "someGoodPassword" |
zu den oben genannten Befehl. Meine Frage ist: Wie kann ich dies sicher? Die oben beschrieben Methode sieht nicht sicher genug.
Ich würde schätzen einige Kommentare über diese, so kann ich verstehen, dieses Problem besser.
Du musst angemeldet sein, um einen Kommentar abzugeben.
ziemlich jeder Mechanismus, die Sie verwenden werden snoopable von root, also halten Sie dieses im Verstand.
Die echo-option, wird die Anzeige in der '
ps
' listings, wodurch es anfällig für normale Benutzer-snooping und die Suche nach dem Passwort.Können Sie
-pass file:filename
eine Datei verwenden, so können Sie verwenden:dieser erstellt die Datei nicht lesbar von anderen Konten (aber immer noch von root lesbar). Man geht davon aus, dass das Skript nur einmal zu erstellen, die passfile, als wenn Sie den Vorgang wiederholen, neigt Sie dazu, in einer Datei, und daher müssen Sie
chmod go-rwx
die Datei gelesen werden kann von anderen Benutzern.dann nutzen Sie:
durchführen der Verschlüsselung, durch den pre-Passwort-Datei.
Andere Mechanismen
-pass env:ENVVAR
für die Verwendung einer Umgebungsvariable (wieder bekommen es ohne Offenlegung es ist der trick)ps
listings, wie es ist ein built-in (zumindest in der bash)Kurze version
Verwenden Sie eine named pipe.
Lange version
Verwenden Sie eine named pipe. Sie können es schaffen, in der bash mit
z.B.
Es öffnet sich eine named pipe, in der Regel eine FIFO-Warteschlange, und Sie sehen auf der Prozess-Liste so etwas wie
Es lesbar nur durch den aktuellen Benutzer und wird automatisch geschlossen, nachdem es gelesen wurde, so dass Sie nicht haben, um sorgen über die Berechtigungen und das bereinigen der Datenträger (die Leitung schließen, wenn das Programm abstürzt, während eine Datei erstellt, indem Sie wie vorgeschlagen in einer anderen Antwort würde bleiben auf der Festplatte).
Diese Weise wird es in der Nähe in der Schnellste Weg möglich ist, nur nach dem Befehl es zu Lesen und ohne zu warten, für ihn, seine Aufgabe zu beenden (ich habe gerade einen test: verschlüsseln einige Gigabyte und versuche zu Lesen der named pipe (es ist sichtbar in der Prozessliste): die named pipe schließt sofort, auch wenn openssl Alter nimmt zu verschlüsseln).
Über deine Kommentare
Wenn Ihr computer gehackt wurde und der Angreifer hat die selben Benutzerrechte, Sie sind fertig für. Zum Beispiel kann der Angreifer problemlos Bearbeiten .bashrc alias openssl so dass es beginnt, ein hypotetic "böse-openssl", die kopieren Sie Ihr Passwort und die Daten vor der Verarbeitung alles, was der echte openssl, so dass Sie mit Ihrem falschen Gefühl der Sicherheit.
Sagte, ich bin kein security-Experte, also wenn jemand will downvote mich in oblivion (und Sag mir, warum), du bist willkommen.
Wenn ich verstehe richtig, Ihr Konzert über
ist, dass das Passwort wird sichtbar sein in der Prozess-Liste, auf die alle Benutzer für einige kurze Zeit. Das kann leicht bearbeitet werden, um mit bash ist
<<<
Umleitung (funktioniert nicht in plain old POSIX-shell, obwohl):Dieses Konstrukt unterstützt variable interpolation (
<<<"$password"
) und die Ausgabe des Befehls geleitet werden können weiter-oder umgeleitet, um die Datei wie gewohnt.Passwort in der bash oder anderen Skript-Datei, und stellen 600 Berechtigungen für Sie. Dass können nur Sie die Datei, und Kennwort wird nicht offenbart werden, überall.
Können Sie mehrere Methoden für den Durchgang durch das Passwort: https://www.openssl.org/docs/man1.0.2/apps/openssl.html#PASS-PHRASE-ARGUMENTS
Wie @Petesh sagte, die
root
kann alles Lesen!Daher, wenn Sie sich das Passwort notieren, die in jedem gängigen(!) Datei, z.B.
echo
trick in einer pipeden
root
Benutzer finden konnte, diesem!Nicht lieber alles, was über
/proc
(z.B. durch dieps
)Also nicht verwenden...
oder
Die beste Lösung
Passieren Passwörter zu
openssl
via pipe/fifo:oder
oder