Wie füge ich einen Benutzer hinzu, ohne die verschlüsselte Form des Passworts zu kennen?

8

Ich verwende den folgenden Befehl, um einen Benutzer auf einem Linux-Computer zu erstellen:

useradd -d /home/dummy -g idiots -m -p 12345689 dummy

Der Benutzer wird erstellt und auch das Home-Verzeichnis.
Das Problem ist, dass ich mich mit diesem Konto nicht beim System anmelden kann, da -perwartet wird, dass das verschlüsselte Kennwort von zurückgegeben wird crypto.

Frage : Ich möchte einen Benutzer über ein Bash-Skript erstellen und kenne das verschlüsselte Passwort von nicht crypto. Wie kann ich das tun, damit ich diesen Benutzer automatisch über ein Skript erstellen und das Problem mit dem Passwort umgehen kann?

Jim
quelle

Antworten:

13

Mit openssl können Sie vorverschlüsselte Kennwortzeichenfolgen generieren, die mit der Option -p to useradd verwendet werden

echo "P4sSw0rD" | openssl passwd -1 -stdin

$1$Jxmpx1Da$Y8MzBctIyDW8/7pFPbNWD1

Das -1sagt, um einen MD5-Passwort-Hash zu generieren. Das Salz wird automatisch erzeugt.

Sie können dann verwenden

useradd -d /home/dummy -g idiots -m -p $(echo "P4sSw0rD" | openssl passwd -1 -stdin) dummy

um den Benutzer hinzuzufügen. Dazu wird das Passwort interaktiv ausgeblendet

useradd -d /home/dummy -g idiots -m -p $(read -sp Password: pw ; echo $pw | openssl passwd -1 -stdin) dummy
Iain
quelle
Ist der Befehl openssl standardmäßig in ALLEN Linux-Installationen verfügbar? Kann ich mich darauf verlassen?
Jim
Auch echowird das Passwort im console.How zeigen kann ich das vermeiden?
Jim
@ Jim: Wenn nicht alle, dann 99%. Es ist Teil der SSH-Client- und -Serverpakete, daher wird es fast immer installiert, obwohl ich technisch nicht glaube, dass es erforderlich ist. Sie können sich darauf verlassen, dass es standardmäßig installiert wird, aber nicht unbedingt, dass jemand es nicht deinstalliert hat.
Matthew Scharley
@ Jim: Kann nicht mit 100% iger Sicherheit sagen, dass es auf allen Linux-Installationen sein wird.
user9517
@Iain: Was ist mit echo? Wie kann ich das vermeiden?
Jim
3

Anscheinend können Sie verwenden

echo "password" | passwd dummy --stdin

Ich habe das noch nie versucht.

Alternativ können Sie den öffentlichen Schlüssel des Benutzers /home/dummy/.ssh/authorized_keyseingeben und Kennwörter vollständig vergessen. Dies ist die sicherheitstechnisch beste Option.

Ladadadada
quelle
echozeigt das Passwort in der Konsole an. Wie kann ich das vermeiden?
Jim
Sie können das Passwort in eine Datei einfügen und cat passwordfile | passwd dummy --stdinoder verwenden passwd --stdin dummy < passwordfile. Außerdem habe ich diese --stdinOption gerade auf einer Ubuntu-Box getestet und sie hat nicht funktioniert. Die Version von passwdIch habe diese Option nicht unterstützt. Mit freundlichen Grüßen auch nicht. Einer der anderen Antworten mit chpasswd, openssloder newusersvielleicht besser, wenn Sie müssen Passwörter haben.
Ladadadada
3

So mache ich das:

# cat user-pw_list
john:p455W0rD
geany:p455W0rD


# cat CreateUsers.sh
#!/bin/bash
#
# filename: CreateUsers.sh
# usage: cat "User:passwd" | $0
#
set -e
# set -x
while read ; do
  USER=${REPLY%%:*}
  PWD=${REPLY##*:}
  # alternative for random passwd, where $RANDOM is a bash function
  #PWD=${REPLY%%:*}$RANDOM$RANDOM

  echo -e "adding User $USER "
  # for disabled users: /usr/sbin/nologin, otherwise /bin/bash
  /usr/sbin/useradd -c automaticUser -m -k/dev/null -s /usr/sbin/nologin $USER
  echo "$USER:$PWD" | chpasswd --md5 $USER

  ## also add user to samba:
  #echo -e "$PWD\n$PWD" | pdbedit -t -u $USER
done
ThorstenS
quelle
1
Könnten Sie bitte diese Lösung erklären? Ich bin nicht sehr gut mit Bash-Skripten
Jim
2

Wenn Sie ein Bash-Skript verwenden, ist der gute alte newusersBefehl möglicherweise hilfreich für Sie? Es liest seine Eingabe aus einer Textdatei, die wie folgt formatiert ist:

pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell

Und das Passwort in dieser Datei sollte Klartext sein. Sie können beliebig viele Benutzer in der Eingabedatei auflisten.

Weitere Informationen finden Sie unter man newusers.

Janne Pikkarainen
quelle
Ich bekomme: bash: newusers: command not foundundNo manual entry for newusers
Jim
Oh, SLES bündelt also nicht newusers(standardmäßig), obwohl Fedora, Debian und RHEL dies zu tun scheinen.
Janne Pikkarainen