Passwort erzeugen

Oft braucht man eine Idee für ein neues Passwort, doch die Idee fehlt. Wie man solche einfach erfindet, habe ich im Artikel Sichere Passwörter schon erklärt. Doch kommt es manchmal auch vor, dass man viele Passwörter automatisch erzeugen muss. Hier helfen entweder viele kleine Tools oder eben die Shell.

Zuerst hole ich mir mit dd zufällige Daten, sagen wir mal 10 kByte. Diese schicke ich durch eine RegEx und entferne alle Zeichen, die nicht den gewünschten Zeichen entsprechen. Ich nehme hier im Beispiel nur Buchstaben und Zahlen. Nun muss ich nur noch dafür sorgen, dass nur so viele Zeichen wie benötigt ankommen, was ebenfalls wieder durch eine RegEx passiert.

Das Ergebnis sieht dann so aus:

dd if=/dev/urandom bs=1024 count=10 2>/dev/null
  | perl -pe "s/[^a-zA-Z0-9]//g"
  | perl -pe "s/^(.{12}).*$/1/g"

Nun gibt es aber einen Sonderfall, bei dem ich weitere Ausnahmen mache: Das Root-Kennwort.

Ein externer Login (via SSH) mit Passwort ist bei meinen Systemen nicht möglich (nur via Public Key). Das Passwort wird bei mir also nur benötigt, wenn ein Techniker es im Rechenzentrum lokal eingeben muss. Daher sollten alle Zeichen einfach tippbar sein, âáà sind das bei nodeadkeys meist nicht. Außerdem sollte man an die Verwechslungsgefahr denken: Der Techie mit dem Ausdruck des Passwortes in seiner Hand kann bei typischer RZ-Beleuchtung sicher keinen Unterschied zwischen | und l erkennen.

Folgende Zeichen der oben generierten Passworter erachte ich als Störend:

  • Kleines Ludwig (l), großes Ida (I), die Zahl Eins (1), das Pipe-Symbol: lI1|
  • Großes Otto (O), die Zahl Null (0): O0
  • Das Ypselon und das Zet (weil auf US-Keyboards vertauscht)

So würde das nun aussehen, wenn wir diese Zeichen nun entfernen:

dd if=/dev/urandom bs=1024 count=10 2>/dev/null
  | perl -pe "s/[^a-zA-Z0-9]//g"
  | perl -pe "s/[lI1O0yYzZ]//g"
  | perl -pe "s/^(.{12}).*$/1/g"

Die beiden RegEx könnte man zusammenfassen, indem man schon beim ersten nur gewünschte Zeichenbereiche freigibt. Aber ich finde es so leichter lesbar und besser zu bearbeiten.

2 Kommentare

  1. Hi Michael,
    ich habe es in der Vergangenheit für mich immer so gelöst:

    mktemp XXXXXXXX
    ArA17594

    rm ArA17594

    Wie ich finde, einfacher.
    Der Befehl “mktemp” ist überall vorhanden und man kann mit der Anzahl der großen “X” die Länge des Zufallswertes angeben.
    Da mktemp aber eine leere Datei anlegt muss man diese dann auch wieder löschen.
    Dieser Zufällswert genügt dem gewöhnlichen Alltagsbedarf.

    Wenn es dann mehrere sein sollen, dann geht das auch in einer Schleife:
    for (( i=1 ; i<=31 ; i++ )) ; do AAA=”`mktemp XXXXXXXX`”;rm $AAA;echo $AAA ; done

    Gruß
    Yoda

  2. Der Trick mit mktemp ist nett, hat jedoch einen großen Nachteil: Durch das mktemp landet das Passwort einmal als Verzeichniseintrag auf der Platte, durch das nachfolgende rm landet das Passwort auch noch in der Bash History.

    Auch wenn die History später gelöscht wird, so wurde das Passwort dennoch 2x auf Platte gespeichert. Und da gelöschte Daten in einem Dateisystem nicht immer wirklich auf Platte gelöscht / überschrieben werden, ergeben sich so 2 Angriffspunkte.

    Eine einfache (sicher nicht perfekte) Lösung für das Erzeugen ohne entsprechende Tools, nur mit Linux Boardmitteln wäre das hier:

    head /dev/urandom | md5sum

Hinterlasse eine Antwort

Pflichtfelder sind mit * markiert.

*