Was ist die am wenigsten unsichere Methode zum Speichern eines Kennworts, das von einem Skript verwendet wird?

13

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.
ændrük
quelle
2
Speichern Sie nicht den Passcode Teil der Anmeldeinformationen, vielleicht?
Thomas Ward
Wäre es nicht möglich, auf GNOME Keyring oder ähnliches zuzugreifen?
Firefeather
Wenn Sie es vielleicht als kryptografischen Hash (wie SHA-1) speichern könnten, wäre das nett.
Anonym
ROT13 würde es verdecken, aber NICHT in irgendeiner Weise sichern.
Anonym
@Anonymous Wenn das Passwort als kryptografischer Hash gespeichert ist, wie empfehlen Sie es abzurufen?
ændrük

Antworten:

8

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, /, /pathund /path/tovon 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ür filesind 600 oder 400.

Das filekönnte so aussehen:

PASSWORD='something that you cannot remember'

Verwenden Sie in Ihrem Skript den folgenden Code, um die Variable zu importieren:

. /path/to/file

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 $PATHVariable 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, openssloder gpgSie 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.

Lekensteyn
quelle
14

Speichern Sie das Kennwort in einer separaten Datei, und schützen Sie die Datei ( chmod 700oder chmod 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/.passwordanstatt die Datei zu lesen und deren Inhalt in einer Variablen zu speichern.

Rinzwind
quelle
Einige Tools haben sogar die Option, das Kennwort direkt aus einer Datei zu lesen, beispielsweise die --passphrase-fileOption gpg .
2
... und mache daraus ein .dotfile (/dir/to/file/with/.password)
knb
2
chmod 400fü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.
Lekensteyn
1

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 :

keyring set school mohamed

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:

keyring get school mohamed

Um dies im Kontext eines Skripts zu verwenden:

password=$(keyring get school mohamed)

Das Passwort enthält nun das zuvor eingegebene Passwort.

Mohamed Ashref
quelle