Adicione vários usuários ao grupo UNIX em uma linha

13

No Centos 6.5 (e provavelmente qualquer) linux, posso criar um grupo:

sudo groupadd mygroup

e adicione vários usuários a ele:

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

O número de usuários no meu caso particular é 20. Como posso usar uma linha como:

sudo usermod -a -G mygroup userA userB userC

Mesmo usando o loop for seria bom, mas eu não sou um especialista em bash, então me pergunto.


fonte

Respostas:

12

Se gpasswdestiver disponível (deve estar na maioria das distribuições, exceto, por exemplo, Solaris), você pode fornecer uma lista de usuários separados por vírgula, seguida pelo nome do grupo:

gpasswd -M userA,userB,userC mygroup
Tombart
fonte
1
Este deve ser a resposta.
ivanleoncz
4
Lembre-se de que esta solução substitui a lista de membros do grupo existente. Isso é algo diferente de "adicionar" usuários como o usermod -aG mygroupfaz.
Michael
10
for user in userA userB userC; do sudo usermod -a -G mygroup "$user"; done
Masterfool
fonte
2

Este é um script rudimental com parâmetros posicionais, salve o código abaixo em um arquivo chamado fill_group.she torne-o executável com chmod +x fill_group.sh.

Em seguida, adicione-o ao diretório PATH ( /usr/local/bin) ou execute-o no mesmo diretório em que está localizado ./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
fonte
2
Outra maneira de validar o grupo:if ! getent group "$group" >/dev/null
glenn jackman
@glennjackman: obrigado, perdi o getentcomando até agora (no meu sistema também há um bom recurso de preenchimento automático para todos os bancos de dados inspecionados).
Giuseppe Ricupero
Muito complicado, eu gostaria de executá-lo na linha de comando.
@HordonFreeman: o script quando salvo é executado como um oneliner: fill_group.sh <group> <user1> ... <userN>. Se você quiser realmente um oneliner: for user in "userA userB userC"; do sudo usermod -a -G "groupName" "${user}"; doneou se você tem uma lista de usuários um por linha em um arquivo chamado users.list:group=mygroup && while read user; do sudo usermod -a -G "${group}" "${user}"; done < users.list
Giuseppe Ricupero
1

No Fedora, Red Hat, CentOS e outras distribuições posteriores, o newusersutilitário permite que você adicione com facilidade um lote de novos usuários a um sistema sem precisar escrever o script Bash.

Também pode estar disponível no Debian e Ubuntu.

fpmurphy
fonte
0

Em relação às respostas de Tombart e Masterfool. Para distos antigas (SLES 11 SP1), as ferramentas de sombra são um pouco diferentes. Os manuais não fornecem o número da versão, mas são datados de 2009 a 2010.

A opção -M no gpasswd não existe (mas é necessário o gpasswd para outra coisa). Então, precisa ir para a opção de loop do Masterfool. Mas aqui -a não existe, ao invés -A se comporta como -a & -G.

Estou fazendo isso para implantar o acesso a cargas de sistemas e meu completo "criar grupo e preencher" até agora parece:

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

Então, crie um grupo com o GID definido, anule a senha / ative o novo grupo, adicione alguns usuários.

Stripy42
fonte