Ajouter plusieurs utilisateurs au groupe UNIX sur une seule ligne

13

Sur Centos 6.5 (et probablement n'importe quel) Linux, je peux créer un groupe:

sudo groupadd mygroup

et y ajouter plusieurs utilisateurs:

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

Le nombre d'utilisateurs dans mon cas particulier est 20. Comment puis-je utiliser une doublure comme:

sudo usermod -a -G mygroup userA userB userC

Même utiliser for loop serait bien, mais je ne suis pas un spécialiste bash, donc je me demande.


la source

Réponses:

12

Si gpasswdest disponible (devrait être sur la plupart des distributions sauf Solaris par exemple), vous pouvez fournir une liste d'utilisateurs séparés par des virgules suivie du nom du groupe:

gpasswd -M userA,userB,userC mygroup
Tombart
la source
1
Celui-ci devrait être la réponse.
ivanleoncz
4
N'oubliez pas que cette solution écrase la liste des membres du groupe existante. C'est différent de l'ajout d'utilisateurs comme le usermod -aG mygroupfait.
Michael
10
for user in userA userB userC; do sudo usermod -a -G mygroup "$user"; done
Masterfool
la source
2

Il s'agit d'un script rudimentaire avec des paramètres de position, enregistrez le code ci-dessous dans un fichier appelé fill_group.shet rendez-le exécutable avec chmod +x fill_group.sh.

Ajoutez-le ensuite à un répertoire PATH ( /usr/local/bin) ou exécutez-le dans le même répertoire où il se trouve ./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
la source
2
Une autre façon de valider le groupe:if ! getent group "$group" >/dev/null
glenn jackman
@glennjackman: merci, j'ai manqué la getentcommande jusqu'à présent (dans mon système il y a aussi une belle fonctionnalité de saisie semi-automatique pour toutes les bases de données inspectées).
Giuseppe Ricupero
Trop compliqué, je souhaiterais l'exécuter depuis la ligne de commande.
@HordonFreeman: le script lors de l' enregistrement est exécuté en tant que oneliner: fill_group.sh <group> <user1> ... <userN>. Si vous voulez vraiment un oneliner: for user in "userA userB userC"; do sudo usermod -a -G "groupName" "${user}"; doneou si vous avez une liste d'utilisateurs une par ligne dans un fichier appelé users.list:group=mygroup && while read user; do sudo usermod -a -G "${group}" "${user}"; done < users.list
Giuseppe Ricupero
1

Sur Fedora, Red Hat, CentOS et autres distributions en aval, l' newusersutilitaire vous permet d'ajouter très facilement un lot de nouveaux utilisateurs à un système sans avoir à écrire le script Bash.

Peut également être disponible sur Debian et Ubuntu.

fpmurphy
la source
0

Concernant les réponses de Tombart et Masterfool. Pour les anciennes distos (SLES 11 SP1), les outils d'ombre sont légèrement différents. Les manuels ne donnent aucun numéro de version, mais datent de 2009-2010.

L'option -M de gpasswd n'existe pas (mais elle avait besoin de gpasswd pour autre chose). Il faut donc opter pour l'option de boucle de Masterfool. Mais ici -a n'existe pas, au lieu de cela -A se comporte comme -a & -G.

Je fais cela pour déployer l'accès aux charges des systèmes et mon "créer un groupe et remplir" jusqu'à présent ressemble à ceci:

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

Donc, créez un groupe avec un GID défini, unpassword / activez le nouveau groupe, ajoutez des utilisateurs.

Stripy42
la source