Passwörter nicht-interaktiv ändern

AIX bietet mit dem Kommando chpasswd die Möglichkeit Passwörter sowohl interaktiv, als auch nicht interaktiv zu ändern. Allerdings ist die Benutzung des Kommandos dem Benutzer root vorbehalten.

Im einfachsten Fall kann der Administrator das Kommando ohne Argumente starten. Es wird dann die interaktive Eingabe von Benutzernamen und zugehörigem Passwort, getrennt durch einen Doppelpunkt „:“, erwartet. Pro Zeile wird ein Benutzername und ein Klartext-Passwort angegeben. Die Eingabe muss mit Control-D beendet werden:

# chpasswd
user01:hello19
<Control>-<D>
#

Es wird per Default das ADMCHG Flag für den Benutzer-Account gesetzt:

# pwdadm -q user01
user01:
        lastupdate = 1650438240
        flags = ADMCHG

#

Damit wird der Benutzer beim nächsten Login aufgefordert sein Passwort zu ändern.

Möchte man das Setzen des Passworts über ein Skript nicht interaktiv machen, kann z.B. ein sogeanntes „here“ Dokument verwendet werden:

# chpasswd -c <<EOF
> user02:hello20
> EOF
#

Diese Variante erfordert keine manuelle Eingabe mehr. Die einzugebenden Benutzer und Passwörter können direkt im Skript eingetragen werden. Um zu Verhindern das die Benutzer beim nächsten Login aufgefordert werden ihr Passwort zu ändern, haben wir die Option „-c“ (clear all password flags) verwendet.

Alternativ könnte man aber auch z.B. eine Pipe mit einem echo-Kommando verwenden:

# echo user03:hello21 | chpasswd -c
#

Verwendet man eine bash, dann gibt es noch die besonders elegante Möglichket eine Eingabe-Umleitung auf eine Zeichenkette einzurichten. Dazu werden 3 Kleiner-Zeichen „<<<“ gefolgt von einer Zeichenkette verwendet:

(bash)# chpasswd -c <<<user04:hello22
(bash)#

In allen obigen Beispielen wurde das Passwort jeweils im Klartext angegeben. Das ist in der Regel bei nicht-interaktivem Setzen des Passworts nicht gewünscht. Man kann das Passwort aber auch in verschlüsselter Form angeben. Dazu muss lediglich die Option „-e“ (encrypted password) verwendet werden. Es erfolgt keine Prüfung durch das chpasswd Kommando, ob das angegebene verschlüsselte Passwort die richtige Länge und Syntax hat, oder ob es überhaupt gültig ist!

Allerdings muss man nun beachten, dass das verschlüsselte Passwort eventuell Sonderzeichen wie „$“ oder „!“ enthält, die von der Shell ausgewertet und eventuell ersetzt werden. Bei Verwendung eines „here“ Dokuments werden Sonderzeichen in der Eingabe durch die Shell interpretiert. Wir demonstrieren dies durch Setzen einer Variable VAR, die dann im verschlüsselten Passwort verwendet wird:

# VAR=hello
# chpasswd -e -c <<EOF
> user02:{ssha512}06TQ.$VAR
EOF
#

Das angegebene verschlüsselte Passwort ist viel zu kurz und daher nicht gültig, es gibt aber keine Fehlermeldung. Der Teil „$VAR“ wird von der Shell durch den Wert „hello“ ersetzt, wie das Anzeigen des gesetzten Passworts zeigt:

# lsuser -a spassword user02
user02 spassword={ssha512}06TQ.hello
#

Die Ersetzung durch die Shell lässt sich verhindern, indem das Wort „EOF“ in Anführungszeichen gesetzt wird:

# VAR=hello
# chpasswd -e -c <<”EOF”
> user02:{ssha512}06TQ.$VAR
EOF
#

Dieses Mal wurde “$VAR” nicht ersetzt:

# lsuser -a spassword user02
user02 spassword={ssha512}06TQ.$VAR
#

(Das verschlüsselte Passwort ist aber nach wie vor zu kurz und damit ungültig.)