[LINUX] Die SHA-512-Verschlüsselung des Kennworts wurde so geschrieben, dass es automatisiert werden kann, ohne sich um die Ausführungsumgebung zu sorgen.

Motivation

In modernem Linux werden in / etc / shadow etc. gespeicherte Passwörter mit SHA-512 verschlüsselt. Vermeiden Sie beispielsweise in einer Docker-Datei beim Erstellen eines allgemeinen Benutzers in einem Container, ein einfaches Kennwort in der Datei zu haben.

Dockerfile


RUN useradd -p 'encrypted_password' accountname

Oder

Dockerfile


RUN echo 'accountname:encrypted_password' | chpasswd -e

Ich möchte auch ein Passwort wie setzen. In diesem Fall muss das Kennwort vorab mit SHA-512 verschlüsselt werden, und es werden verschiedene Methoden aufgeführt.

Es scheint jedoch, dass ** welche der verschiedenen Methoden verwendet werden kann, sehr stark von der Ausführungsumgebung abhängt **.

Abhängig von der Version von macOS, auf der sich der Host befindet, unterstützt die "crypt" -Funktion von "python" oder "perl" SHA-512 nicht oder "openssl", "htpasswd" unterstützt sie in der neuen Version, aber "CentOS7" Es scheint, dass die Standard-Versionen nicht unterstützt werden und dass sie je nach Fall ordnungsgemäß verwendet werden müssen. Ich glaube nicht, dass es möglich ist, die Methode abhängig von der Umgebung, in der das Image erstellt wird, einzeln zu finden und zu ändern. Deshalb habe ich ein Skript erstellt, das mehrere Methoden nacheinander ausprobiert. Der Speicherort der Datei ist wie folgt

Wie benutzt man

Die folgende Verwendung wird angenommen.

Beispiel für die anfängliche Wasward-Einstellung


# useradd -p "$(./passwd_sha512encrypt -u worker)" worker
Enter password for worker:
Enter password again for check. : 

Einstellungsbeispiel für erstelltes Konto


# ./passwd_sha512encrypt -f -u worker   | chpasswd -e
Enter password for worker: 
Enter password again for check. : 

In diesen Beispielen werden Sie aufgefordert, über die Standardeingabe einzugeben. Da sich die erforderlichen Informationen für "useradd", nur das verschlüsselte Passwort, und für "chpasswd", das Paar aus Kontoname und verschlüsseltem Passwort, unterscheiden, wird die Ausgabe mit der Option "-f" umgeschaltet.

Ich glaube jedoch nicht, dass es möglich ist, die Tastatur in Container-Builds mehrmals einzugeben. Es ist realistisch, damit verschlüsselte Objekte zu speichern. Ich habe auch ein optionales Argument (-o Ausgabedatei) festgelegt, um es in eine Datei auszugeben. Detaillierte Informationen finden Sie weiter unten.

Hilfeanzeige


% ./passwd_sha512encrypt -h
[Usage] % passwd_sha512encrypt [options] [username] [rawpassword]
[Options]
           -o output      : Set outputfile (default: stdout)
           -u username    : Set username
           -p rawpassword : Set destenation 
           -f             : Output username:encrupted_password
                            (Default output is encrupted_password only)
           -q             : Skip type-miss check
           -v             : verbose output
           -d             : debug output
           -h             : Show Help (this message)

Bewegung

Suchen Sie intern nach den Verzeichnissen in der Umgebungsvariablen "PATH" in der Reihenfolge "openssl", "htpassword", "PHP", "Python" (in der Reihenfolge von Version 3 → Version 2), "perl", Stellen Sie fest, ob SHA-512 unterstützt wird, und führen Sie es aus.

Wenn keiner von ihnen unterstützt wird, schlägt dies fehl. in diesem Fall. ** Die mit der Option -o angegebene Ausgabedatei wird nicht erstellt **, daher unterscheidet sich das Verhalten von der Umleitung der Ausgabe dieses Skripts mit einer Shell. Da keine Datei der Größe 0 erstellt wird, ist es meiner Meinung nach einfach, die Verarbeitung zu beenden, indem die Dateiabhängigkeit mit "Makefile" verwendet wird.

Recommended Posts

Die SHA-512-Verschlüsselung des Kennworts wurde so geschrieben, dass es automatisiert werden kann, ohne sich um die Ausführungsumgebung zu sorgen.
Tensorflow scheint es, dass sogar der Eigenwert der Matrix automatisch unterschieden werden kann
Lesen Sie das von flask gepostete Bild, damit es von opencv verarbeitet werden kann
Ich habe versucht, es zu erweitern, damit die Datenbank mit der Analysesoftware von Wiire verwendet werden kann
[Django] Eine einfache Zusammenfassung der Protokollausgabefunktion, damit auch Anfänger sie verstehen können.