Ich habe ein Bash-Skript, das sich automatisch mit meinem Benutzernamen und Passwort bei einem Dienst authentifiziert. Die Anmeldeinformationen werden derzeit im Skript als Klartext gespeichert.
Welche Vorsichtsmaßnahmen sollte ich treffen, um diese Anmeldeinformationen möglichst sicher zu speichern, während der Skriptzugriff weiterhin zulässig ist?
Klarstellungspunkte:
- Soweit verfügbar, sollten stattdessen andere Authentifizierungsmethoden verwendet werden. Ich möchte immer noch wissen, was zu tun ist, wenn die Kennwortauthentifizierung die einzige Option ist.
- Das Passwort überhaupt nicht zu speichern, ist hier keine akzeptable Antwort. Ich frage nach dem Fall, in dem das Skript unbeaufsichtigt auf das Kennwort zugreifen muss.
Antworten:
Was für ein Service? Bestimmte Dienste verfügen über andere Authentifizierungsmethoden, z. B. SSH-Schlüssel für SSH in Verbindung mit dem SSH-Agenten.
Ich würde das Kennwort getrennt vom Skript speichern und sicherstellen, dass alle Pfadkomponenten über die richtigen Berechtigungen verfügen. Zum Beispiel, stellen Sie sicher , dass auf dem Weg
/path/to/file
,/
,/path
und/path/to
von einem Benutzer , die Sie vertrauen Besitz (root
) und dass diese nicht beschreibbar von jemandem, der nicht erlaubt ist , Ihre Dateien zu sehen. Die empfohlenen Berechtigungen fürfile
sind 600 oder 400.Das
file
könnte so aussehen:Verwenden Sie in Ihrem Skript den folgenden Code, um die Variable zu importieren:
Stellen Sie sicher, dass Ihr Skript keine Lücken enthält, die es Angreifern ermöglichen könnten, Code im Skriptkontext auszuführen (z. B. unkontrollierte Umgebung, in der möglicherweise eine beliebige
$PATH
Variable festgelegt ist, oder ungültige Verwendung anderer Dateien (z. B. Beschaffung einer von der Welt beschreibbaren Datei). .Was den eigentlichen Schutz Ihres Passworts angeht, können Sie das nicht. Es muss irgendwie für den anderen Dienst verfügbar sein. Alternativ können Sie die Datei / das Skript mit dem Kennwort verschlüsseln,
openssl
odergpg
Sie müssen ein Kennwort eingeben, bevor die Anmeldeinformationen entsperrt werden. Dies ist besonders nützlich, wenn Sie sich das Passwort Ihres Dienstes nur schwer merken können.quelle
Speichern Sie das Kennwort in einer separaten Datei, und schützen Sie die Datei (
chmod 700
oderchmod 500
), damit nur die autorisierten Benutzer darauf zugreifen können, anstatt das Kennwort in der Datei fest zu codieren .Rufen Sie das Kennwort mit ab,
cat /dir/to/file/with/.password
anstatt die Datei zu lesen und deren Inhalt in einer Variablen zu speichern.quelle
--passphrase-file
Option gpg .chmod 400
für Dateien (schreibgeschützt). Natürlich müssen Sie die führenden Verzeichnisse sichern (700 oder 500 oder sogar 100, wenn Sie paranoid sind). Beachten Sie, dass 400 (oder 500 für Verzeichnisse) ausreichen. Andere Modi (100) können als Sicherheit durch Verschleierung betrachtet werden , genau wie das Ausblenden der Datei durch Setzen eines Punkts vor dem Namen.Ich weiß, dass dies eine alte Frage ist, aber ich sah mich mit diesem ähnlichen Problem konfrontiert und benutzte Ubuntus Schlüsselring, um es zu lösen. Hier ist eine Lösung für Ubuntu 18.04LTS Öffnen Sie das Terminal. Notieren Sie sich dies
keyring set {{service}} {{username}}
beispielsweise, wenn Sie dies für die Protokollierung von Schulkennwörtern verwenden :Sie werden für ein Passwort angemeldet. Geben Sie das Passwort ein. Das eingegebene Passwort wird nun im Ubuntu-Schlüsselbund gespeichert.
Um dieses Passwort zu erhalten, schreiben Sie in das Terminal:
Um dies im Kontext eines Skripts zu verwenden:
Das Passwort enthält nun das zuvor eingegebene Passwort.
quelle