Procurando por membros específicos do grupo de usuários com uma correspondência exata

3

Um usuário possui vários membros do grupo que contêm espaços. Exemplo:

  • mydomain \ staff
  • mydomain \ staff admin
  • mydomain \ staff super

Grupos de usuários podem ser retornados usando:

id -Gn username | grep -i -o '\bstaff\b'

Isso infelizmente retorna um hit se o usuário for um membro de "mydomain \ staff admin" ou "mydomain \ staff super", mas não "mydomain \ staff". Como posso pesquisar apenas a associação ao grupo "mydomain \ staff"?

Conforme solicitado, exemplo de saída de

id -Gn username

é o seguinte (toda a linha):

mydomain\staff mydomain\staff admin mydomain\staff super mydomain\some other group

    
por MrBeatnik 19.01.2016 / 16:09

1 resposta

1

Como id -Gn output é delimitado por espaço, não é possível usar isso.

A implementação GNU de id desde o coreutils 8.22 possui uma opção -z para produzir a lista delimitada por nul em vez de delimitada por espaço, então você poderia fazer (com GNU grep que parece estar usando já) :

id -Gzn username | grep -Fxz 'mydomain\staff'

Ou:

id -Gzn username | grep -z '\staff$'

Para staff em qualquer domínio (o que quer que seja)

Caso contrário, se você tiver um comando getent , poderá reverter o problema:

staff_members=$(getent group 'mydomain\staff' | cut -d : -f 4-)
case ",$staff_members," in
  (*,username,*) printf '%s\n' 'username is member of mydomain\staff'
esac
    
por 19.01.2016 / 16:26