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.