useradd verschlüsselt keine Passwörter in / etc / shadow

20

Ich bin über dieses Problem gestolpert, als ich versucht habe, neue FTP-Benutzer für vsftpd zu erstellen. Beim Erstellen eines neuen Benutzers mit dem folgenden Befehl und dem Versuch, sich mit FileZilla anzumelden, erhalte ich den Fehler "Falsches Passwort".

useradd f -p pass -d /home/f -s /bin/false

Danach enthält / etc / shadow

f:pass:1111:0:99:2:::

Einmal führe ich den folgenden Befehl aus und gebe den gleichen Pass weiter

passwd f

/ etc / shadow enthält

f:$1$U1c5vVwg$x5TVDDDmhi0a7RWFer6Jn1:1111:0:99:2:::

Es scheint, dass die Verschlüsselung erfolgt, wenn ich passwd ausführe , aber nicht bei useradd

Wichtig ist, dass ich mich danach mit denselben Anmeldeinformationen bei FTP anmelden kann.

Ich verwende CentOS 5.11, vsftpd für FTP und FileZilla für FTP Access

/ var / log / secure enthält:

Dec 17 useradd[644]: new group: name=f, GID=511
Dec 17 useradd[644]: new user: name=f, UID=511, GID=511, home=/home/f, shell=/bin/false

Warum funktioniert es nicht, wenn ich -p passan useradd übergebe? Was muss ich tun, damit es funktioniert?

BadToTheBone
quelle
Ich sehe dort keine Frage? - Solche Dinge werden über PAM verwaltet und normalerweise angemeldet/var/log/secure
HBruijn
@ HBruijn Ich habe meine Antwort aktualisiert, um zu zeigen, was in / var / log / secure
BadToTheBone
2
"Ja wirklich?" +12 für eine Frage, die von der jeweiligen Manpage explizit beantwortet wird?
ein Lebenslauf vom
Beachten Sie, dass in einem Kennwort-Hash $1$angibt , dass MD5 verwendet wird . MD5 ist zwar nicht gerade schrecklich für Passwörter, aber heutzutage eher schwach. Es ist eine völlig andere Frage, aber ich möchte Sie dringend bitten, die Migration auf eine stärkere Hash-Funktion in Betracht zu ziehen.
ein Lebenslauf vom
2
Randnotiz: Passwörter in /etc/shadowwerden nicht verschlüsselt, sondern gehasht
Tobias Kienzler

Antworten:

43

Das funktioniert wie vorgesehen. Wenn Sie mit dem useraddBefehl ein Kennwort festlegen möchten , müssen Sie eine Hash-Version des Kennworts angeben useradd.

Die Zeichenfolge passerfüllt zwar die Formatkriterien für das Hash-Kennwortfeld in /etc/shadow, es werden jedoch keine tatsächlichen Kennwort-Hashs für diese Zeichenfolge erstellt. Dies hat zur Folge, dass für dieses Konto in jeder Hinsicht ein Kennwort festgelegt ist. Jedes Kennwort, das Sie für den Zugriff verwenden, wird jedoch als nicht das richtige Kennwort zurückgewiesen.

Siehe man useraddoder die useradd Dokumentation :

-p, --password PASSWORT

Das verschlüsselte Passwort, wie von crypt (3) zurückgegeben . Standardmäßig ist das Passwort deaktiviert.

Hinweis: Diese Option wird nicht empfohlen, da das Kennwort (oder das verschlüsselte Kennwort) für Benutzer sichtbar ist, die die Prozesse auflisten.

Sie sollten sicherstellen, dass das Kennwort die Kennwortrichtlinie des Systems einhält.

Kasperd
quelle
32

manuseradd :

   -p, --password PASSWORD
       The encrypted password, as returned by crypt(3). The default is to
       disable the password.

Sie sollen ein gehashtes Passwort übergeben.
Kein Klartext-Passwort.

Schwindler
quelle
16

useradderwartet, dass Sie den Hash des Passworts übergeben, nicht das Passwort selbst. Sie können die folgende Variante Ihres Befehls verwenden, um dem useraddBefehl ein Hash-Kennwort zuzuweisen :

useradd f -p "$(mkpasswd --method=sha-512 'pass')" -d /home/f -s /bin/false

Um die verfügbaren Methoden herauszufinden, verwenden Sie:

mkpasswd --method=help

Um zu vermeiden, dass das Kennwort in der Befehlszeile übergeben wird, geben Sie das Kennwort in eine Datei ein (mit einem Editor und ohne echoo.ä.) und gehen Sie folgendermaßen vor:

useradd f -p "$(mkpasswd --method=sha-512 --password-fd=0 < filename)" -d /home/f -s /bin/false

Dadurch wird das gehashte Kennwort in der Befehlszeile übergeben, nicht jedoch das Klartextkennwort.

mkpasswdkommt mit dem expectPaket.

Bis auf weiteres angehalten.
quelle
2
Verwenden Sie kein MD5! Verwenden Sie SHA-2
Josef
9
Beachten Sie , dass hierdurch das Kennwort vorübergehend über die verschiedenen Kernel-Schnittstellen zugänglich gemacht wird (jeder Prozess kann die Befehlszeile eines anderen Prozesses lesen) und möglicherweise über $ HISTORY oder ähnliche Mechanismen im Nur-Text-Format auf der Festplatte gespeichert werden.
ein Lebenslauf vom
@ MichaelKjörling: Ein sehr guter Punkt. Bitte sehen Sie meine bearbeitete Antwort.
Bis auf weiteres angehalten.
1
Natürlich speichern Sie das Klartext-Passwort weiterhin auf der Festplatte. Zumindest hat der Sysadmin so die Wahl. Vielleicht ist es an dieser Stelle besser, zuerst nur ein Dummy-Passwort zu verwenden und es sofort passwdin etwas anderes zu ändern ...
einen
2
Absolut Dennis, es ist viel besser, aber das Passwort landet immer noch im Klartext auf der Festplatte. In einigen Situationen und unter bestimmten Bedrohungsmodellen kann dies ein echtes Problem sein. Es muss nicht haben sein.
ein Lebenslauf vom