Die Verwendung von read
zur Eingabe von Passwörtern in Bash-Scripts kann problematisch sein, insbesondere wenn Sie nicht möchten, dass das Passwort in der Shell-Historie, Prozesslisten oder anderen protokollierten Aktivitäten sichtbar ist. Glücklicherweise gibt es sicherere Alternativen.
Ein solches Tool, das speziell für die sichere Passworteingabe entwickelt wurde, ist /lib/cryptsetup/askpass
. Dieses Programm ermöglicht es Benutzern, Passwörter in einer sicheren Umgebung einzugeben, indem es direkt von der Terminal-Eingabe liest und das eingegebene Passwort an den aufrufenden Prozess zurückgibt.
So können Sie es in Ihrem Bash-Script verwenden:
PASSWORT=$(/lib/cryptsetup/askpass "Geben Sie Ihr Passwort ein: ")
echo "Passwort erhalten, aber nicht angezeigt!"
Wenn Sie das Passwort an andere Befehle weitergeben möchten, ohne es anzuzeigen, können Sie es einfach wie folgt verwenden:
some_command_that_needs_password --password-option "$PASSWORT"
Durch die Verwendung von /lib/cryptsetup/askpass
stellen Sie sicher, dass das Passwort in einer Weise eingegeben wird, die es vor vielen gängigen Angriffen und unbeabsichtigten Offenlegungen schützt. Beachten Sie jedoch, dass auch hier das Speichern von Passwörtern in Klartext in Scripts oder Dateien vermieden werden sollte. Bei der Handhabung von Passwörtern ist stets Vorsicht geboten.
#!/bin/bash
rand_file=".rand_$(uuidgen)"
passphrase_file=".passphrase_$(uuidgen)"
// each script run with it's own rand
$(openssl rand -hex 32) > "$rand_file"
// write the encrypted passphrase
openssl enc -aes-256-cbc -pbkdf2 -salt -k `cat $rand_file` -in <(/lib/cryptsetup/askpass "Encryption Password: ") -out "$passphrase_file"
////////////////////////////////////////
// example application
list=$(ls -d $1)
for file in ${list[@]}
do
openssl enc -d -aes-256-cbc -pbkdf2 -salt -kfile "$rand_file" --in "$passphrase_file" | xargs -i zip -eP {} "$file.zip" "$file"
done
rm "$rand_file"
rm "$passphrase_file"
Das Beispielprogramm packt jede einzeln in ls aufgerufene Datei in ein eigenes verschlüsseltesd ZIP.
Allerdings muss die Anweisung in Anführungszeichen gesetzt werden.
ziper "*.sql"
ACHTUNG – wenn beide Dateien auf der Festplatte liegen bleiben, kann man das Passwort entschlüsseln! Es handelt sich nur um ein Beispielscript!