Como removo um usuário de um grupo?

343

Qual comando devo usar para remover um usuário de um grupo no Debian?

Ao adicionar um usuário a um grupo, isso pode ser feito com:

usermod -a -G group user

No entanto, não foi possível encontrar um comando semelhante (aceitando um grupo e um usuário como argumentos) para remover o usuário do grupo. O mais próximo que pude chegar é:

usermod -G all,existing,groups,except,for,group user

Existe um comando como o usermod OPTION group userOPTION como uma opção para fazer usermod(ou um programa semelhante) remover o usuário do grupo?

Lekensteyn
fonte
1
Para usuários do Fedora que acabam aqui, o man usermod revela nos comentários da opção -G que uma lista de todos os grupos atuais deseja ser mantida é a maneira de excluir um grupo. Sem opção -R com o Fedora; você deve usar a abordagem de Lekensteyn que ele está tentando evitar.
Stephen

Respostas:

404

Você pode usar gpasswd:

# gpasswd -d user group

então a nova configuração de grupo será atribuída no próximo login, pelo menos no Debian. Se o usuário estiver conectado, os efeitos do comando não serão vistos imediatamente.


fonte
9
Perfeito obrigado! gpasswd -a user grouppara adicionar o usuário ao grupo também parece mais agradável, especialmente se um erro de digitação ocorreu e a -aopção foi descartada.
precisa saber é o seguinte
1
Não funciona para mim. Eu recebo duas mensagens: a) Removendo usuário do grupo. b) gpasswd: o usuário não é um membro do grupo. Depois, executar o "grupo de membros" não mostra alterações.
geoidesic
1
@geoidesic você precisa fazer logoff e login novamente para ver o efeito
Wasif Hossain
1
Existe uma maneira de fazer a alteração entrar em vigor sem precisar fazer login novamente?
Andy Fusniak
2
@geoidesic Eu recebi esses erros no Centos 7. Encontrei isso, se você estava tentando remover o usuário do grupo padrão. Tente alternar o grupo padrão usermod -g user usere tente removê-los.
PanPipes
175

No Debian, o adduserpacote contém um deluserprograma que remove um usuário de um grupo se você passar ambos como argumentos:

deluser user group

Se a sua distribuição não tiver adduser, você poderá editar /etc/groupe /etc/gshadowmanualmente.

vigr
vigr -s
Gilles
fonte
10
Eu não conhecia programas como vigre vipw. Muito útil no caso das manpages estão muito longe :)
Lekensteyn
3
Como alternativa, após modificar, /etc/groupexecute grpconva atualização em /etc/gshadowvez de editá-la.
Cyrille
sudo deluser jenkins admin/ usr / sbin / deluser: você não pode remover o usuário do grupo principal.
22614 Jonathan
@JonathanLeaders Todo usuário precisa estar em pelo menos um grupo. Use usermodou vipwpara alterar o grupo principal do usuário. Esta pergunta era sobre grupos suplementares.
Gilles
Agradável. Há também o adduser $user $groupcomando mais simples em vez do usermod -x -y -z -....
ygoe
65
usermod -G "" username

remove todos os grupos secundários / suplementares do nome de usuário , deixando-os como membros apenas do seu grupo principal. isso funcionou no Solaris 5.9

user208145
fonte
5
Testado no CentOS 6.4; trabalho.
aggregate1166877
1
Também funciona no Ubuntu 12.04.
aggregate1166877
E esta parece ser a melhor maneira de forçar os grupos secundários a qualquer lista de grupos, excluindo todos os grupos não listados.
sage
Testado e trabalhando no CentOS 7. Obrigado!
Tricky
14

Esta é a abordagem da "velha escola" ...

A maioria dos sistemas * nix mantém as informações do grupo em um arquivo de texto simples /etc/group, onde

  • cada linha contém os campos

    • nome do grupo
    • senha
    • GID e
    • Lista de usuários

    delimitado pelo :personagem.

  • o campo user_list é uma lista de nomes de usuário, separados por vírgulas.

Agora, suponha que você queira remover um usuário chamado thisuser de um grupo chamado thatgroup. Comece fazendo backup /etc/groupe use o editor de sua preferência com privilégios su para editar o arquivo /etc/group e remover a thisuserreferência da thatgroupentrada de linha, por exemplo,

linha original é algo como isto:

thatgroup:x:1274:someuser,thisuser,anotheruser

após a edição deve ficar assim:

thatgroup:x:1274:someuser,anotheruser

Como em todas as outras respostas, isso não afetará a (s) sessão (s) atual (is) do usuário, se houver (ou seja, se o usuário estiver conectado no momento). A alteração entrará em vigor na próxima vez que o usuário efetuar login.

p57
fonte
1
vigrjá foi mencionado para edição /etc/groupmanual. Minhas páginas de manual dizem que os nomes de usuário são separados por vírgulas, não por dois pontos. A reinicialização não é necessária, você só precisa fazer login novamente (ou usar newgrp).
Lekensteyn
Para ajudar usuários não-Debian a chegarem a essas pistas procurando pistas ... isso pode ser suficiente para o Debian de acordo com o escopo da pergunta do OP, mas se você o estivesse usando para um sistema operacional * BSD, você precisaria modificar o arquivo de texto sem formatação aqui, como mencionado, em seguida, emita um pwd_mkdb -p /etc/master.passwd para realmente colocar essa lista em uso.
Danno
3

Você pode usar o comando abaixo nas distribuições do SUSE (e, aparentemente, nenhuma outra ).

usermod -R grupo  nome_do_usuário

onde groupé o grupo do qual você deseja remover o usuário e user_nameo usuário que deseja remover do grupo. Por exemplo,

usermod -R root imnottheroot
Stavros Fan Koutsouropoulos
fonte
1
Qual pacote fornece seu binário usermod? Estou pedindo para descobrir a versão, pois a minha do shadow-utils-4.1.4.3 não fornece a opção -R.
Myroslav
3
Meu pacote shadow 4.1.5.1-5 (Arch Linux) tem uma -Ropção, mas isso significa outra coisa. Acho que não é o Linux.
Lekensteyn
3
Não tenho certeza se isso funcionará. A página de manual está dizendo que -Ré: "-R, --root CHROOT_DIR Aplique alterações no diretório CHROOT_DIR e use os arquivos de configuração do diretório CHROOT_DIR."
MikeKusold
2
As únicas coisas que consegui encontrar foram esta página de manual do oracle, mas ainda não é a mesma coisa, portanto essa resposta talvez deva ser removida.
Kyrias 5/10
sudo usermod -R admin jenkinsusermod: caminho chroot inválido 'admin'
Jonathan
1

Considerar:

  • nome de usuário: abc2
  • nome do grupo: newgroup11

  • Tarefa: Removendo Usuário abc2do Gruponewgroup11

[root@home1 ~]# groups abc2
abc2 : abc2
[root@home1 ~]# usermod -G newgroup11 abc2
[root@home1 ~]# groups abc2
abc2 : abc2 newgroup11
[root@home1 ~]# usermod -G newgroup11 abc2
[root@home1 ~]# usermod -G abc2 abc2
[root@home1 ~]# groups abc2
abc2 : abc2

** Por favor, corrija-me se estiver errado. **

novo usuário
fonte
1
Isso "funciona", mas apenas porque você tem um único grupo secundário. usermod -G newgroup11 abc2colocará você no grupo secundário newgroup11. Como o grupo principal é abc2, você terminará nos dois grupos. usermod -g abc2 abc2resulta em newgroup11ser removido dos grupos secundários porque não é mais mencionado. Portanto, para três ou mais grupos diferentes, esse método não funcionará. Veja as outras respostas envolvendo gpasswdpara um comando melhor.
precisa saber é o seguinte
1

Você pode remover o usuário do grupo executando o comando usermod sem a opção -a. Exemplo, executando "usermod -G group1 nome de usuário" adicionará o usuário ao grupo1 e o removerá de qualquer outro grupo em que esteja. Lembre-se, você pode manter o usuário em vários grupos listando os nomes dos grupos, separados por vírgula.

Ajudante
fonte
1
Esta informação já foi apresentada várias vezes.
Scott
0

Para continuar usando o usermod em uma distribuição (como o Fedora) que não possui uma opção de remoção, onde user = bob e group = deletethisgroup, o comando seria:

usermod -G `cat /etc/group |  grep bob | grep -v deletethisgroup | cut -d ':' -f 1 | tr '\n' ',' | sed 's/,$//'` bob

Os pipes (1) obtêm todas as entradas de grupo das quais o usuário pertence, (2) retira o que precisa ser removido, (3) retorna a primeira coluna (nome do grupo), substitui a nova linha por vírgula e remove a vírgula à direita.

Obviamente, você pode colocar tudo isso em um script bash que leva o usuário e o grupo a serem excluídos como parâmetros. O awk poderia ser usado para encurtar o final, mas eu queria ficar com grep, cut, tr e sed.

Stephen
fonte
De acordo com esta página de manual , também gpasswd -d bob deletethisgroupestá disponível. Alguma razão para você não usá-lo?
Lekensteyn 27/03
Nem todo mundo deseja configurar senhas de grupo. Eu estava apenas oferecendo uma solução usando o comando referenciado pela pergunta em uma distribuição específica. no Fedora / RHEL / Centos com gpasswd -d, o usuário removido ainda pode ingressar no grupo se tiver acesso à senha. Na verdade, aumenta o acesso ao grupo, em vez de não o permitir.
Stephen
Eu entendi que o utilitário é nomeado gpasswdporque está intimamente relacionado /etc/passwd, mas gerencia grupos. Ao contrário do passwdcomando simples que apenas controla senhas, gpasswdtambém pode ser usado para gerenciar a associação de um grupo. Uma senha de grupo não é necessária se você for root ou um administrador de grupo.
Lekensteyn
Você leu o manual gpasswd? Para o Fedora / RHEL / CentOS, se você ler o manual, é declarado que o comando "é usado para administrar o / etc / group e / etc / gshadow". Na verdade, não tem efeito no / etc / passwd. O manual também declara "As senhas de grupo são um problema de segurança inerente, pois mais de uma pessoa tem permissão para saber a senha". Na verdade, ele não gerencia a associação de um grupo, abre o grupo para QUALQUER usuário com a senha. Uma senha de grupo não é necessária se você já é um MEMBRO do grupo.
Stephen
Intimamente relacionado, no sentido de nomes e propósitos semelhantes, não sugeri que o arquivo / etc / passwd seja realmente gerenciado pelo gpasswd. Note que "man page" no meu primeiro comentário aponta para a página de manual gpasswd do Fedora 13. Usando gpasswd $groupvocê pode definir a senha do grupo que causa o problema de segurança que você mencionou. No entanto, você também não pode ter uma senha e usá-lo gpasswd -d $user $grouppara excluir um usuário, conforme descrito no primeiro comentário e na resposta aceita. Observe que este comando não solicita uma senha de grupo nem a modifica ou exige.
Lekensteyn
0

Suponha que username = student e groupname = research , portanto, para remover o studentusuário do researchgrupo, faça o seguinte:

gpasswd -d student research
Ravi
fonte
Por que repetir algo que estava aqui 6 anos antes? Está marcado como resposta aceita!
Betlista
-1
pw groupmod "groupname|gid" -d "username|uid"

Uma solução se você estiver usando CSH, por qualquer motivo.

James
fonte
-1

Para remover um usuário de um grupo, o gpasswd é o melhor utilitário para este IMO.

Exemplo de comando:

sudo gpasswd -d group user

* Informações da Ajuda *

Usage: gpasswd [option] GROUP

Options:
  -a, --add USER                add USER to GROUP
  -d, --delete USER             remove USER from GROUP
  -h, --help                    display this help message and exit
  -Q, --root CHROOT_DIR         directory to chroot into
  -r, --delete-password         remove the GROUP's password
  -R, --restrict                restrict access to GROUP to its members
  -M, --members USER,...        set the list of members of GROUP
  -A, --administrators ADMIN,...
                                set the list of administrators for GROUP
Except for the -A and -M options, the options cannot be combined.
Brian Cotton
fonte
1
Os argumentos do grupo e do usuário são trocados. Além disso, é exatamente isso que a resposta aceita propôs, este post não é realmente útil?
Lekensteyn