Agregar múltiples usuarios al grupo UNIX en una línea

13

En Centos 6.5 (y probablemente en cualquier) Linux, puedo crear un grupo:

sudo groupadd mygroup

y agregarle varios usuarios:

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

El número de usuarios en mi caso particular es 20. ¿Cómo puedo usar una línea como:

sudo usermod -a -G mygroup userA userB userC

Incluso usar for loop estaría bien, pero no soy un especialista en bash, así que me pregunto.


fuente

Respuestas:

12

Si gpasswdestá disponible (debe estar en la mayoría de las distribuciones excepto, por ejemplo, Solaris), puede proporcionar una lista de usuarios separada por comas seguida del nombre del grupo:

gpasswd -M userA,userB,userC mygroup
Tombart
fuente
1
Esta debería ser la respuesta.
ivanleoncz
44
Tenga en cuenta que esta solución sobrescribe la lista de miembros del grupo existente. Esto es algo diferente a "agregar" usuarios como lo usermod -aG mygrouphace.
Michael
10
for user in userA userB userC; do sudo usermod -a -G mygroup "$user"; done
Masterfool
fuente
2

Este es un script rudimental con parámetros posicionales, guarde el código a continuación en un archivo llamado fill_group.shy hágalo ejecutable chmod +x fill_group.sh.

Luego agréguelo a un directorio PATH ( /usr/local/bin) o ejecútelo en el mismo directorio donde está ubicado ./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
fuente
2
Otra forma de validar el grupo:if ! getent group "$group" >/dev/null
Glenn Jackman
@glennjackman: gracias, perdí el getentcomando hasta ahora (en mi sistema también hay una buena característica de autocompletar para todas las bases de datos inspeccionadas).
Giuseppe Ricupero
Demasiado complicado, me gustaría ejecutarlo desde la línea de comandos.
@HordonFreeman: la secuencia de comandos cuando se guarda se ejecuta como un oneliner: fill_group.sh <group> <user1> ... <userN>. Si realmente desea una línea: for user in "userA userB userC"; do sudo usermod -a -G "groupName" "${user}"; doneo si tiene una lista de usuarios, una por línea en un archivo llamado users.list:group=mygroup && while read user; do sudo usermod -a -G "${group}" "${user}"; done < users.list
Giuseppe Ricupero
1

En Fedora, Red Hat, CentOS y otras distribuciones posteriores, la newusersutilidad le permite agregar fácilmente un lote de nuevos usuarios a un sistema sin tener que escribir el script Bash.

También puede estar disponible en Debian y Ubuntu.

fpmurphy
fuente
0

En cuanto a las respuestas de Tombart y Masterfool. Para distos antiguos (SLES 11 SP1), las herramientas de sombra son ligeramente diferentes. Los manuales no dan número de versión, pero tienen fecha 2009-2010.

La opción -M en gpasswd no existe (pero necesitaba gpasswd para otra cosa). Por lo tanto, debe elegir la opción de bucle de Masterfool. Pero aquí -a no existe, en cambio -A se comporta como -a y -G.

Estoy haciendo esto para desplegar el acceso a la carga de sistemas y mi completo "crear grupo y poblar" hasta ahora parece:

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

Por lo tanto, cree un grupo con GID establecido, elimine la contraseña / active el nuevo grupo, agregue algunos usuarios.

Stripy42
fuente