como verificar se os usuários estão no grupo

2

adicionamos o seguinte usuário ao grupo white_house

kuku, trump, karter

usermod -a -G white_house kuku
usermod -a -G white_house trump
usermod -a -G white_house karter

como todos sabemos, podemos verificar se os usuários foram adicionados ao grupo por

grep white_house /etc/group

mas é possível verificá-lo por alguma linha de comando ou de maneira mais elegante?

    
por yael 02.11.2017 / 10:38

3 respostas

2

Você poderia usar getent

getent group white_house 

ou se você quiser verificar um grupo de usuários específico, você pode usar groups

groups karter
    
por 02.11.2017 / 10:43
0

Você pode executar id -Gn user_name :

  • -G exibe todos os grupos para este user_name;
  • -n exibe nomes não GIDs.

Se você precisar verificar se a declaração é True, a seguinte construção (mais complexa) deve ser útil id -Gn user_name | grep group_name && echo "We are good" || echo "user_name is not the member of group_name .

    
por 02.11.2017 / 11:00
0

A seguinte função do shell aceita dois parâmetros:

  1. um nome de usuário
  2. um nome de grupo

Ele solicita as informações sobre esse grupo com getent group e, em seguida, passa esse resultado para awk. Awk pega a lista de usuários (campo 4, dividido por dois-pontos) e divide-a em uma matriz "usuários", dividida por vírgulas. Em seguida, ele imprime cada elemento (nome de usuário) dessa matriz em linhas separadas, que grep , em seguida, inspeciona o nome de usuário fornecido. Se o usuário for encontrado, grep (e, portanto, toda a função) retornará 0 / success; caso contrário, retorna 1 / falha. As bandeiras do grep significam:

  • -F - trata o texto da pesquisa como uma string fixa, não uma expressão regular
  • -x - exige que a linha inteira corresponda ao texto da pesquisa (evita correspondências falso-positivas, como "joão" e "johnson"
  • -q - não imprime nada na tela, mas define o código de retorno apropriadamente
function useringroup {
  getent group "$2" |
    awk -F: '{split($4, users, ","); for (name in users) print users[name]}' |
      grep -Fxq "$1"
}

Use como:

useringroup myuser mygroup && echo myuser is in mygroup || echo myuser is not in mygroup
    
por 02.11.2017 / 14:34