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.

bash  group 

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

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

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

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.


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.