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.

bash  group 

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

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

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

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.


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.