Wie kann ich einem Benutzer unter Linux ein Anfangs- / Standardkennwort zuweisen?

10

Ich habe eine Anleitung gefunden, in der erklärt wird, wie das Kennwort eines Benutzers festgelegt wird . Ich versuche es zu automatisieren und eine E-Mail an den Benutzer zu senden, wie:

userid created with password XYZ.
request to change the initial password.

Gemäß dem obigen Dokument muss ein verschlüsseltes Passwort mit Python erstellt und dem usermodBefehl wie folgt zugeführt werden :

 usermod -p "<encrypted-password>" <username>

Gibt es andere einfachere Möglichkeiten, dies zu tun? Ich möchte kein spezielles Dienstprogramm herunterladen, um dies zu tun. es sollte so weit wie möglich verallgemeinert werden.


Bearbeiten : Selbst die im obigen Link angegebene Methode scheint für mich nicht zu funktionieren:

bash-3.00# python
Python 2.4.6 (#1, Dec 13 2009, 23:43:51) [C] on sunos5
Type "help", "copyright", "credits" or "license" for more information.
>>> import crypt; print crypt.crypt("<password>","<salt>")
<sOMrcxm7pCPI
>>> ^D
bash-3.00# useradd -g other -p "sOMrcxm7pCPI" -G bin,sys -m -s /usr/bin/bash mukesh2
UX: useradd: ERROR: project sOMrcxm7pCPI does not exist.  Choose another.
UX: useradd: sOMrcxm7pCPI name should be all lower case or numeric.
Munish
quelle
Hier ist ein weiterer Link, den ich gefunden habe, aber es scheint ein Sicherheitsproblem auch bei der Verwendung der Option -p zu geben, usermodwenn jemand pssieht, dass der Prozess, in dem das Passwort
aufgelistet

Antworten:

13

Sie können dies folgendermaßen chpasswdtun:

echo "username:newpassword" | chpasswd

Sie können chpasswdvon anderen Programmen als echo, wenn es zweckmäßig ist, in Pipe einsteigen, aber dies reicht aus.

Bearbeiten: Um das Kennwort im Shell-Skript zu generieren und dann festzulegen, können Sie Folgendes tun:

# Change username to the correct user:
USR=username
# This will generate a random, 8-character password:
PASS=`tr -dc A-Za-z0-9_ < /dev/urandom | head -c8`
# This will actually set the password:
echo "$USR:$PASS" | chpasswd

Weitere Informationen chpasswdfinden Sie unter http://linux.die.net/man/8/chpasswd

(Der Befehl zum Generieren des Passworts stammt von http://nixcraft.com/shell-scripting/13454-command-generate-random-password-string.html )

Dominick Pastore
quelle
danke @Dominick hmm, chpasswd ist vielleicht in AIX ... ich habe es nicht benutzt. und jedes Mal muss ich ein Passwort schreiben ... kann es nicht vom Skript wie im Fragen-Link generiert werden ... leider hat auch das bei mir nicht funktioniert
munish
@munish Ich bin mir nicht ganz sicher, was Sie unter "Generieren" im Skript verstehen, aber ich habe meine Antwort aktualisiert, um hoffentlich hilfreicher zu sein.
Dominick Pastore
Funktioniert nicht. "Manipulationsfehler des Authentifizierungstokens"
Cerin
@Cerin Machst du zufällig so etwas wie sudo echo "username:newpass" | chpasswd? Da die erhöhten Berechtigungen von sudonicht durch die Pipe gehen, chpasswdwürde dies als normaler Benutzer ausgeführt. Sie kann durch Verschieben des sudowie in behoben werden echo "username:newpass" | sudo chpasswd. Es gibt auch andere Probleme, die diese Fehlermeldung verursachen können, aber Berechtigungsfehler wie diese sind wahrscheinlich die häufigsten.
Dominick Pastore
1
Kennwörter in der Befehlszeile können für andere angemeldete Benutzer auf demselben Computer mit w, ps oder anderen Befehlen sichtbar sein, die Informationen zu anderen Prozessen anzeigen. Auf diese Weise festgelegte Passwörter sollten vom Benutzer so schnell wie möglich geändert werden.
Mnebuerquo
3

Sie können OpenSSL verwenden, um das zufällige Passwort zu generieren (in diesem Fall 16 Zeichen):

# 1000 bytes should be enough to give us 16 alphanumeric ones
p=$(openssl rand 1000 | strings | grep -io [[:alnum:]] | head -n 16 | tr -d '\n')

Geben Sie dann das Hash-Passwort an useraddoder weiterusermod

# omit the "-1" if you want traditional crypt()
usermod -p $(openssl passwd -1 "$p") <username>

Gutschrift wo fällig: Die Passwortgenerierung wird nach einer ähnlichen Methode angepasst , die /dev/urandomanstelle von verwendet wird openssl.

James Sneeringer
quelle
2

useradd sollte funktionieren (ich habe es unter Ubuntu gemacht). Überprüfen Sie vielleicht, ob alle Ihre Argumente korrekt sind (es gibt Gruppen, der Pfad ist richtig, um zu schlagen). Sie können den Befehl nur mit einem Kennwort und einem Benutzer ausführen und dann mit userdel weitere Parameter entfernen und erneut versuchen , um festzustellen , was das Problem verursacht (Brute-Force-Ansatz).

Es gibt auch neue Benutzer (siehe Manpage), zumindest unter Ubuntu, wo Sie ihm eine Datei mit passwd-Dateien wie Informationen, einschließlich Klartext-Passwörtern, geben und diese Benutzer erstellen. Gute Möglichkeit, viele Benutzer gleichzeitig zu erledigen.

pcm
quelle
+1 für die Erwähnung des newusersBefehls für Ubuntu
Levon
1

einfachster Weg, den ich gefunden habe:


PASSWD="mySeCr3t-default-pa55" 
echo ${PASSWD} | passwd --stdin username_here
MelBurslan
quelle
Hast du das überhaupt getestet? passwd: unrecognized option '--stdin'
Cerin
Ja, ich habe dies oft verwendet, aber wie bei fast jedem anderen Befehl ist es nicht die defakte Lösung für das vorliegende Problem. Einige Variationen von passwd binary unterstützen den Schalter --stdin nicht.
MelBurslan