Então digamos que tenho dois grupos com nomestestando1etestando2. Ambos os grupos têm o mesmo ID de grupo 2000. Em seguida, adiciono um usuário chamadousuário de testecom GID de 2000. Ao longo do caminho quero excluir o grupo testing2, mas não consigo porque quando tento recebo a seguinte resposta
groupdel: cannot remove the primary group of user 'testing-user'
Aqui estão os métodos que tentei para resolver isso com sucesso:
GID de teste1 modificado e, em seguida, excluído teste2 e, em seguida, alterado o GID de teste1 de volta para 2000
O GID principal do usuário de teste foi modificado para um grupo separado, o teste2 foi excluído e o usuário de teste foi atribuído ao teste1
Existe um método melhor para isso que não envolva a modificação dos usuários ou IDs de grupo em questão?
Responder1
O erro que você está recebendo é uma limitação do caminhogrupodelfoi escrito e o fato de o sistema ser projetado em torno de números (IDs) e não de nomes. Como você pode ver emCódigo fontedegrupodel, ele apenas verifica se há um usuário com o GID que você deseja excluir, como grupo principal. Não importa se existe outro grupo com o mesmo ID, mas com nome diferente.
/* [ Note: I changed the style of the source code for brevity purposes. ]
* group_busy - check if this is any user's primary group
*
* group_busy verifies that this group is not the primary group
* for any user. You must remove all users before you remove
* the group.
*/
static void group_busy (gid_t gid)
{
struct passwd *pwd;
/* Nice slow linear search. */
setpwent ();
while ( ((pwd = getpwent ()) != NULL) && (pwd->pw_gid != gid) )
;
endpwent ();
/* If pwd isn't NULL, it stopped because the gid's matched. */
if (pwd == (struct passwd *) 0)
return;
/* Can't remove the group. */
fprintf (stderr,
_("%s: cannot remove the primary group of user '%s'\n"),
Prog, pwd->pw_name);
exit (E_GROUP_BUSY);
}
Então você mexe nos arquivos de configuração usando outras ferramentas como Perl emresposta do mtmou você altera temporariamente o GID desse usuário para que group_busy
não falhe mais.
Responder2
Isso não é tão seguro, pois você deve sempre usar os utilitários fornecidos para modificar usuários em grupos, mas...
[ ! -f /etc/group.lock ] && perl -ne 'next if /^testing2:/; print' /etc/group > /etc/group.lock && mv /etc/group.lock /etc/group && grpconv
Responder3
O grupo padrão de qualquer usuário, pelo menos no Gentoo, é ter o nome do grupo igual ao nome do usuário. Se você criar um grupo e colocar um usuário nele, ao ser removido, o usuário pertencerá ao grupo do seu nome de usuário.