Aggiungi più utenti al gruppo UNIX in una riga


13

Su Centos 6.5 (e probabilmente su qualsiasi) Linux, posso creare un gruppo:

sudo groupadd mygroup

e aggiungi diversi utenti:

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

Il numero di utenti nel mio caso particolare è 20. Come posso usare un one-liner come:

sudo usermod -a -G mygroup userA userB userC

Anche usare per loop andrebbe bene, ma non sono uno specialista di bash, quindi mi chiedo.

bash  group 

Risposte:


12

Se gpasswdè disponibile (dovrebbe essere sulla maggior parte delle distribuzioni tranne per esempio Solaris) è possibile fornire un elenco separato da virgole di utenti seguito dal nome del gruppo:

gpasswd -M userA,userB,userC mygroup

1
Questa dovrebbe essere la risposta.
Ivanleoncz,

4
Tieni presente che questa soluzione sovrascrive l'elenco dei membri del gruppo esistente. Questa è una cosa diversa rispetto a "aggiungere" gli utenti come usermod -aG mygroupfa.
Michael,

10
for user in userA userB userC; do sudo usermod -a -G mygroup "$user"; done

2

Questo è uno script rudimentale con parametri posizionali, salva il codice qui sotto in un file chiamato fill_group.she rendilo eseguibile con chmod +x fill_group.sh.

Quindi aggiungilo a una directory PATH ( /usr/local/bin) o eseguilo nella stessa directory in cui si trova ./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
Un altro modo per convalidare il gruppo:if ! getent group "$group" >/dev/null
glenn jackman,

@glennjackman: grazie, ho perso il getentcomando fino ad ora (nel mio sistema c'è anche una bella funzione di completamento automatico per tutti i database controllati).
Giuseppe Ricupero,

Troppo complicato, vorrei eseguirlo dalla riga di comando.

@HordonFreeman: lo script quando salvata viene eseguito come oneliner: fill_group.sh <group> <user1> ... <userN>. Se vuoi davvero un oneliner: for user in "userA userB userC"; do sudo usermod -a -G "groupName" "${user}"; doneo se hai un elenco utenti uno per riga in un file chiamato users.list:group=mygroup && while read user; do sudo usermod -a -G "${group}" "${user}"; done < users.list
Giuseppe Ricupero

1

Su Fedora, Red Hat, CentOS e altre distribuzioni a valle, l' newusersutilità consente di aggiungere molto facilmente un batch di nuovi utenti a un sistema senza dover scrivere lo script Bash.

Potrebbe anche essere disponibile su Debian e Ubuntu.


0

Per quanto riguarda le risposte di Tombart e Masterfool. Per le vecchie distro (SLES 11 SP1), gli strumenti ombra sono leggermente diversi. I manuali non forniscono un numero di versione, ma sono datati 2009-2010.

L'opzione -M in gpasswd non esiste, (ma era necessario gpasswd per qualcos'altro). Quindi è necessario scegliere l'opzione loop di Masterfool. Ma qui -a non esiste, invece -A si comporta come -a & -G.

Lo sto facendo per distribuire l'accesso ai carichi di sistemi e il mio completo "creare gruppo e popolare" finora sembra:

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

Quindi, crea un gruppo con GID impostato, non password / attiva il nuovo gruppo, aggiungi alcuni utenti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.