Richtige Möglichkeit, ein Benutzerkonto über ein Bash-Skript hinzuzufügen

14

Hier ist der Skriptcode, den ich gerade verwende:

getent group $MYGROUP
if [ $? -ne 0 ] ; then
    sudo su -c "groupadd $MYGROUP"
fi
sudo su -c "useradd mynewuser -p mypassword -m -g $PRIMARYGRP -G $MYGROUP"

Dieser Ansatz funktioniert gut unter openSuse. Da es jedoch einige Probleme mit dem Benutzerkonto gibt, das es unter Ubuntu erstellt, bitte ich um Hilfe.

  • die Terminal-Eingabeaufforderung ist nicht gesetzt ( echo $PS1gibt nichts zurück)
  • Die Pfeiltasten und die Tabulatortaste funktionieren im Terminal nicht richtig
  • Das Passwort scheint nicht zu funktionieren (obwohl ich immer noch nicht genau weiß, um was es sich handelt)
  • Die für diesen neuen Benutzer festgelegten / etc / sudoers-Rechte werden nicht berücksichtigt

Wenn ich stattdessen den Benutzer manuell mit adduser(anstelle von useradd) erstelle, treten diese Probleme unter Ubuntu nicht auf. Aber ich kann nicht adduserauf openSuse (afaik) verwenden. Daher benötige ich ein nicht-exklusives Debian-Skript oder eine Methode zum Hinzufügen von Benutzerkonten über mein Bash-Skript, das unter Ubuntu funktioniert (und nicht aufhört, an anderen Distributionen zu arbeiten).

Abschließend möchte ich die Unterschiede zwischen adduserund verstehen useradd. Zum Beispiel möchte ich wissen, welches Skeleton-Verzeichnis von verwendet wird, adduserda dies möglicherweise der Grund dafür useraddist, dass es nicht wie erwartet funktioniert (weil ich gerade die Standardeinstellung akzeptiert habe).

Vielen Dank

MountainX für Monica Cellio
quelle
1
Was den Unterschied betrifft: Aus der useradd-Manpage ( man useradd): useradd ist ein Hilfsprogramm auf niedriger Ebene zum Hinzufügen von Benutzern. Unter Debian sollten Administratoren stattdessen normalerweise adduser (8) verwenden.
guntbert
Auch sudo su -c "cmd arg1 arg2"ist gleichbedeutend mit sudo cmd arg1 arg2.
Enzotib
@enzotib danke. Gut zu wissen, dass diese unter Ubuntu gleichwertig sind, da sie nicht unter openSuse laufen. Daher werde ich weiter verwenden, sudo su -c "cmd arg1 arg2"damit es überall funktioniert, wo ich es zum Arbeiten brauche.
MountainX für Monica Cellio
adduserIst ein Perl- Skript mehr als 1000 Zeilen lang, so können Sie für die Unterschiede einen Blick auf das Skript werfen.
Enzotib
@enzotib Ja, ich habe gelesen, adduseraber ich kenne Perl nicht. Das ist also kein guter Ansatz für mich.
MountainX für Monica Cellio

Antworten:

12

Meine Lösung wurde hier bereitgestellt: /unix/82923/proper-way-to-add-a-user-account-via-bash-script von Ulrich Schwarz und Joseph R .. Das Wichtigste, was ich tun musste, war -s /bin/bash, meinen vorhandenen useraddBefehl zu ergänzen und zu entfernen, -p passwordder ein verschlüsseltes Kennwort erwartet.

sudo su -c "useradd mynewuser -s /bin/bash -m -g $PRIMARYGRP -G $MYGROUP"

Dann mach das:

sudo chpasswd << 'END'
mynewuser:password
END
MountainX für Monica Cellio
quelle
6
echo mynewuser:password | sudo chpasswdfunktioniert auch.
Felix Rabe
8

Das wird funktionieren.

sudo adduser myuser --gecos "First Last,RoomNumber,WorkPhone,HomePhone" --disabled-password
echo "myuser:password" | sudo chpasswd
Ankur Devani
quelle
Dies ist eine einfachere Lösung als die akzeptierte Antwort.
Steven
2

Mein Skript, das automatisch ein Dienstkonto mit SSH-Schlüssel-Login und ohne Passwort erstellt

#add service group/user
addgroup service-runner
useradd devops-service --create-home --shell /bin/bash --groups service-runner
#gpasswd -a devops-service sudo #allowing sudo requires password, and not a good idea for a service account.
mkdir /home/devops-service/.ssh
chmod 700 /home/devops-service/.ssh
cat devops-service@v2-20150312.pub >> /home/devops-service/.ssh/authorized_keys
chown devops-service:devops-service /home/devops-service -R
JasonS
quelle
Nach der Verwendung meines Skripts stelle ich fest, dass "sudo" mit dem Dienstkonto so gut wie unbrauchbar ist, da kein Kennwort bedeutet, dass sudo nicht verwendet werden kann. Sie können es so konfigurieren, dass Sudo ohne Kennwort über Visudo zulässig ist, aber ich weiß nicht, wie ich das in einem Skript automatisieren kann. Wahrscheinlich ist ein Dienstkonto mit sudo ohne Kennwort auch keine gute (Sicherheits-) Idee.
JasonS
0

Ich nehme an, Sie können einfach eine Bedingung in Ihrem Skript verwenden, so etwas wie

if grep -q 'Ubuntu\|Debian' /etc/issue; then
    adduser .....
else
    useradd .....
fi

(Kann nicht überprüfen, ob die Datei /etc/issueauf OpenSUSE vorhanden ist, andernfalls können Sie die Bedingung für das Vorhandensein einer solchen Datei festlegen.)

Enzotib
quelle
Warum testen Sie nicht einfach die Existenz von addusermit if command -v adduser >/dev/null; thenoder dergleichen? Das ist das einzige, was zählt und nicht die zugrunde liegenden Verteilungen. Neben Debian / Ubuntu und OpenSUSE gibt es auch andere Distributionen.
David Foerster