shellscripts:user-passwort-zurücksetzen

Benutzerpasswörter zurücksetzen

Hier eine sichere Methode Benutzerpasswörter per Shellschript.

Grundsätzlich wird

  1. eine temporäre Datei mit zufälligem Namen erzeugt (mktemp),
  2. anschließend per pwgen ein Passwort erzeugt
  3. mit mkpasswd in einen Hash umgewandelt
  4. und dann per usermod gesetzt.

Das neue Passwort ist nicht in der Prozessliste sichtbar, also auch vor neugierigen lokalen Benutzern sicher, da es direkt über die Standard-eingabe in die tempdatei $temp-file und von da nach ''mkpasswd' übertragen wird.

temp-file=`mktemp`
if [ ! -w "$temp-file" ]; then
        echo "$temp-file not writeable, is mktemp installed?"
        exit 1
fi
 
pwgen -s -1 12 > $temp-file
# alternative randomness:
# head -c 10 /dev/urandom | uuencode -m - | tail -n 2 | head -n 1 > $temp-file
if [ $? -ne 0 ]; then
        echo "Error: could generate passwort (is pwgen installed?) exiting."
        exit 1
fi
 
pw-hash=`cat "$temp-file" | mkpasswd --stdin`
if [ "$pw-hash" != 0 ]; then
        echo "no Hash generated! is mkpasswd installed?"
        exit 1
else
        rm "$temp-file"
fi
 
usermod -p "$pw-hash" "$user"
if [ $? -ne 0 ]; then
                echo "Error: could not set hash (of password) for user $user. exiting."
                exit 1
fi