Fügen Sie der UNIX-Gruppe mehrere Benutzer in einer Zeile hinzu

12

Unter Centos 6.5 (und wahrscheinlich jedem anderen) Linux kann ich eine Gruppe erstellen:

sudo groupadd mygroup

und fügen Sie mehrere Benutzer hinzu:

sudo usermod -a -G mygroup userA
sudo usermod -a -G mygroup userB
sudo usermod -a -G mygroup userC

Die Anzahl der Benutzer in meinem speziellen Fall ist 20. Wie kann ich einen Einzeiler verwenden wie:

sudo usermod -a -G mygroup userA userB userC

Sogar die Verwendung von for loop wäre in Ordnung, aber ich bin kein Bash-Spezialist, also wundere ich mich.


quelle

Antworten:

12

Wenn gpasswdverfügbar (sollte in den meisten Distributionen außer z. B. Solaris vorhanden sein), können Sie eine durch Kommas getrennte Liste der Benutzer gefolgt vom Gruppennamen bereitstellen:

gpasswd -M userA,userB,userC mygroup
Tombart
quelle
1
Dieser sollte die Antwort sein.
ivanleoncz
4
Beachten Sie, dass diese Lösung die Liste der vorhandenen Gruppenmitglieder überschreibt. Dies ist etwas anderes als das "Hinzufügen" von Benutzern usermod -aG mygroup.
Michael
9
for user in userA userB userC; do sudo usermod -a -G mygroup "$user"; done
Masterfool
quelle
2

Dies ist ein rudimentäres Skript mit Positionsparametern. Speichern Sie den folgenden Code in einer aufgerufenen Datei fill_group.shund machen Sie ihn ausführbar mit chmod +x fill_group.sh.

Fügen Sie es dann einem PATH-Verzeichnis ( /usr/local/bin) hinzu oder führen Sie es in demselben Verzeichnis aus , in dem es sich befindet ./fill_group.sh <group_name> <user1> ... <userN>.

#!/bin/sh
#
# Name: fill_group.sh
# 
# Usage: 
# fill_group.sh <group_name> <user1> <user2> ... <userN>
#
# Description:
# add users to specific group passed as first parameter. 
# If the group doesn't exists add it to the system.
set -eu

# Exit if there is not at least 2 args (group,user1)
if [ $# -lt 2  ]; then exit 5; fi

group="${1}"; shift # extract group from arguments
if ! egrep --quiet "^${group}:" /etc/group; then
  sudo groupadd "${group}"
fi

for user in "${@}"; do
    sudo usermod -a -G "${group}" "${user}"
done
Giuseppe Ricupero
quelle
2
Eine andere Möglichkeit, die Gruppe zu validieren:if ! getent group "$group" >/dev/null
Glenn Jackman
@glennjackman: Danke, ich habe den getentBefehl bis jetzt verpasst (in meinem System gibt es auch eine nette Autocomplete-Funktion für alle untersuchten Datenbanken ).
Giuseppe Ricupero
Zu kompliziert, ich würde es gerne über die Kommandozeile ausführen.
@HordonFreeman: Das gespeicherte Skript wird als Oneliner ausgeführt : fill_group.sh <group> <user1> ... <userN>. Wenn Sie wirklich einen Oneliner wollen: for user in "userA userB userC"; do sudo usermod -a -G "groupName" "${user}"; doneoder wenn Sie eine Benutzerliste pro Zeile in einer Datei haben, die heißt users.list:group=mygroup && while read user; do sudo usermod -a -G "${group}" "${user}"; done < users.list
Giuseppe Ricupero
1

Unter Fedora, Red Hat, CentOS und anderen nachgeschalteten Distributionen newuserskönnen Sie mit dem Dienstprogramm ganz einfach eine Reihe neuer Benutzer zu einem System hinzufügen, ohne ein Bash-Skript schreiben zu müssen.

Kann auch auf Debian und Ubuntu verfügbar sein.

fpmurphy
quelle
0

In Bezug auf die Antworten von Tombart und Masterfool. Bei alten Distos (SLES 11 SP1) unterscheiden sich die Schattenwerkzeuge geringfügig. Die Handbücher enthalten keine Versionsnummer, sind jedoch mit 2009-2010 datiert.

Die Option -M in gpasswd existiert nicht (benötigt aber gpasswd für etwas anderes). Sie müssen sich also für die Loop-Option von Masterfool entscheiden. Aber hier existiert -a nicht, stattdessen verhält sich -A wie -a & -G.

Ich mache dies, um den Zugriff auf viele Systeme zu rollen, und mein vollständiges "Gruppe erstellen und füllen" sieht bisher so aus:

/usr/sbin/groupadd -g GID### mygroup
gpasswd -r mygroup
for user in userA userB userC; do sudo usermod -A mygroup "$user"; done

Erstellen Sie also eine Gruppe mit festgelegter GID, entfernen Sie das Kennwort / aktivieren Sie die neue Gruppe und fügen Sie einige Benutzer hinzu.

Stripy42
quelle