Passwort programmgesteuert ändern

11

In der aktuellen Version von Raspian weiß ich, dass es möglich ist, das Passwort des aktuell angemeldeten Benutzers über die Befehlszeile wie folgt zu ändern:

sudo passwd

Dadurch wird der Benutzer aufgefordert, zweimal ein neues Kennwort einzugeben. Dies erzeugt eine Ausgabe wie folgt:

Changing password for pi.
(current) UNIX password:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

Ich habe mich gefragt, ob es eine Möglichkeit gibt, ein Passwort programmgesteuert zu ändern, beispielsweise aus einem Shell-Skript.

Ich versuche, ein Konfigurationsskript für die Bereitstellung auf meinem Raspberry Pis zu erstellen, und möchte nicht manuell neue Kennwörter für diese eingeben müssen.

James Taylor
quelle
1
Um das Passwort des aktuellen Benutzers zu ändern, müssen Sie kein Präfix verwenden sudo. Wenn Sie verwenden sudo, können Sie jedem Benutzer ein neues Kennwort erzwingen, ohne das aktuelle Kennwort dieses Benutzers kennen zu müssen.
Roaima
expect(1)könnte auch helfen.
SailorCire
Berücksichtigen Sie beim programmgesteuerten Ändern von Kennwörtern unbedingt die Auswirkungen auf die Sicherheit.
Josh Habdas

Antworten:

17

Sie suchen nach dem chpasswdBefehl. Sie würden so etwas tun:

echo 'pi:newpassword' | chpasswd # change user pi password to newpassword

Beachten Sie, dass es zumindest mit der Standard-PAM-Konfiguration als root ausgeführt werden muss. Aber vermutlich als Root ausgeführt ist kein Problem für ein Systembereitstellungsskript.

Sie können auch mehrere Benutzer gleichzeitig ausführen, indem Sie mehrere Eingabezeilen eingeben.

derobert
quelle
8

Eine andere Alternative ist die Verwendung der yes Befehl in Ihrem Skript zu verwenden.

yes newpassword | passwd youruser

Dies wird senden newpassword an den passwdBefehl für gesendet youruser.

Es sollte erwähnt werden, dass das Festlegen / Ändern von Benutzerkennwörtern über Skripte Sicherheitsrisiken darstellen kann und nach Möglichkeit vermieden werden sollte.

BEARBEITEN:

Diese Antwort erfordert Root-Zugriff. Entschuldigung, dass Sie dies zuvor nicht erwähnt haben. Diese Methode verwende ich, wenn ich Verwaltungsaufgaben ausführe, für die Root-Zugriff erforderlich ist.

Timothy Martin
quelle
Hast du das versucht?
Roaima
Ja. Ich benutze diese Methode seit Jahren. Ich habe es getestet, bevor ich meine Antwort gepostet habe und gerade jetzt noch einmal.
Timothy Martin
Selbst unter der Annahme , dass die passwdLese von stdineher als ein Terminal (Tastatur), wie kann das funktionieren , wenn passwdAufforderungen zunächst für einen alte Kennwort des Benutzers und dann Eingabeaufforderungen für die neuen?
Roaima
@roaima möglicherweise führt Timothy es als root (was erklären würde, warum er youruseram Ende braucht ). Es könnte irgendwo funktionieren ...
derobert
1
@roaima Der passwdBefehl der Shadow-Dienstprogramme von Linux akzeptiert umgeleitete Eingaben (im Gegensatz zu z ssh. B. OpenSSH ). Die Verwendung yesist jedoch keine gute Idee: Sie stellt das Kennwort Snoopern zur Verfügung, die die Prozessliste zur falschen Zeit anzeigen. Die Verwendung echohätte diesen Fehler nicht, da es sich um eine eingebaute Shell handelt.
Gilles 'SO - hör auf böse zu sein'