So fügen Sie Benutzer aus Daten in einer Textdatei hinzu

So fügen Sie Benutzer aus Daten in einer Textdatei hinzu

Ich habe eine Frage zum Erstellen mehrerer Benutzer unter Linux, aber ich brauche ein Programm, um damit zu arbeiten. Es gibt eine neue txt-Datei für Benutzer mit folgendem Inhalt:

adams:5000:Adams, John Couch:/bin/bash
atiyah:5001:Atiyah, Michael:/bin/csh
babbage:5002:Babbage, Charles:/bin/csh
baker:5003:Baker, Alan:/bin/csh
barrow:5004:Barrow, Isaac:/bin/bash

... (die Datei enthält 70 Benutzernamen)

Ich würde gerne wissen, wie man ein Skript schreibt, um diese Benutzer automatisch hinzuzufügen.

Antwort1

Nehmen wir an, Ihre Datei heißt einfach file. Dieses Skript erledigt die Aufgabe:

USERNAME=$(cat file | cut -d: -f1)
echo "$USERNAME"

ID=$(cat file | cut -d: -f2)
echo "$ID"

USER_SHELL=$(cat file | cut -d, -f2 | cut -d: -f2)
echo "$USER_SHELL"

useradd -m -s "$USER_SHELL" -u "$ID" "$USERNAME"

Antwort2

Dies ist ein Skript, das auf das Nötigste angewiesen ist, um die Aufgabe zu erledigen. Es stellt sicher, dass weder der Benutzername noch die UID bereits verwendet werden. Es erstellt für jeden Benutzer eine passende Gruppe (mit gid=uid) – es prüft nicht, ob die GID oder der Gruppenname bereits vorhanden ist (als Übung für den Leser – Tipp: verwenden getent group).

Hinweis: Das folgende Skript ist ungetestet, aber ich habe schon millionenfach ähnliche Skripte geschrieben (leichte Übertreibung) … es gibt möglicherweise einige kleinere Fehler, die behoben werden müssen.

#! /bin/bash
# get newusers file from first arg on cmd line or default to 'newusers.txt'
nf="${1:-newusers.txt}"

# get existing usernames and uids.
names="^($(getent passwd | cut -d: -f1 | paste -sd'|'))$"
 uids="^($(getent passwd | cut -d: -f3 | paste -sd'|'))$"

yesterday=$(date -d yesterday +%Y-%m-%d)
# temp file for passwords
tf=$(mktemp) ; chmod 600 "$tf"

while IFS=: read u uid gecos shell; do
    gid="$uid" ; homedir="/home/$u"
  
    useradd  -e "$yesterday" -m -d "$homedir" -c "$gecos" \
             -u "$uid" -g "$gid" -s "$shell" "$u"

    groupadd -g "$gid" "$u"
  
    # generate a random password for each user..
    p=$(makepasswd)
    echo "$u:$p" >> "$tf"
done < <(awk -F: '$1 !~ names && $2 !~ uids' names="$names" uids="$uids" "$nf")

# uncomment to warn about users not created:
#echo Users not created because the username or uid already existed: >&2
#awk -F: '$1 ~ names || $2 ~ uids' names="$names" uids="$uids" "$nf" >&2    

# uncomment the cat to display the passwords in the terminal
echo ; echo "passwords are saved in $tf"
# cat "$tf"

# set passwords using `chpasswd:
chpasswd < "$tf"

Verwenden Sie pwgenoder makepasswordoder ein ähnliches Programm, wenn makepasswdes nicht installiert ist. Oder schreiben Sie Ihr eigenes, das 4+ zufällige Wörter mit 5+ Buchstaben aneinanderreiht, um ein leicht zu merkendes Passwort mit mindestens 20 Zeichen Länge zu erhalten – schreiben Sie einige Wörter groß und fügen Sie zwischen jedem Wort zufällige 1-3-stellige Zahlen und/oder ein Satzzeichen ein, um das Passwort noch länger zu machen und den Brute-Force-Suchraum zu vergrößern. Die zufällige Generierung von Passwörtern ist etwas, das viele Male neu erfunden wurde.

Sie können die Benutzernamen und Passwörter (von ) ausdrucken "$tf"und in Streifen schneiden (lassen Sie zwischen jedem Streifen ein paar Leerzeilen user:password), um sie jedem Benutzer zu geben. Fordern Sie sie auf, ihr Passwort sofort zu ändern und den Streifen Papier zu vernichten. Die Passwörter laufen ab "$yesterday"(erfordert GNU date), daher sollten die Benutzer aufgefordert werden, sie zu ändern, wenn sie sich zum ersten Mal bei ihrer Shell anmelden.

Antwort3

Es gibt eine einfachere Möglichkeit, Benutzer aus einer Datei im Batch-Modus hinzuzufügen oder zu aktualisieren: den newusers(8)Befehl, der von derSchattenTool Swite. Die Tool-Suite sollte als Paket zumindest für Debian und Derivate verfügbar sein. Es ist in Arch Linux verfügbar, das ich verwende.

Informationen zur Verwendung finden Sie unterman newusers

verwandte Informationen