Excluir grupo não exclusivo com ID de grupo como grupo principal de um usuário

Excluir grupo não exclusivo com ID de grupo como grupo principal de um usuário

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_busynã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.

informação relacionada