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

3

Digamos que eu tenha dois grupos com os nomes testing1 e testing2 . Ambos os grupos têm o mesmo ID de grupo de 2000. Então eu adiciono um usuário chamado testing-user com GID de 2000. Ao longo do caminho eu quero excluir group testing2, mas não posso porque quando eu tento recebo a seguinte resposta

groupdel: cannot remove the primary group of user 'testing-user'

Aqui estão os métodos que tentei em torno disso para o sucesso:

  • Modificou o GID do testing1 e, em seguida, excluiu o testing2 e, em seguida, alterou o GID do testing1 para 2000

  • Modificou o GID principal do usuário de teste para um grupo separado, excluiu o testing2 e então atribuiu o usuário de teste ao testing1

Existe um método melhor para isso que não envolva modificar os usuários ou ids de grupo em questão?

    
por Greg 22.06.2014 / 01:43

3 respostas

2

O erro que você está recebendo é uma limitação da maneira como groupdel foi escrito e o fato de que o sistema é projetado em torno de números (IDs) e não nomes. Como você pode ver em código-fonte do groupdel , ele verifica apenas se há um usuário com o GID que você deseja excluir, como seu grupo principal. Não importa se há outro grupo com o mesmo ID, mas nomeado de forma 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);
}

Você pode mexer nos arquivos de configuração usando outras ferramentas como o Perl na resposta do mtm ou alterar temporariamente o GID desse usuário para que group_busy não falhe mais.

    
por 30.06.2014 / 17:56
2

Isso não é tão seguro, pois você deve sempre usar os utilitários fornecidos para modificar os usuários, mas ...

[ ! -f /etc/group.lock ] && perl -ne 'next if /^testing2:/; print' /etc/group > /etc/group.lock && mv /etc/group.lock /etc/group && grpconv
    
por 25.06.2014 / 01:42
0

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, quando removido, o usuário pertencerá ao grupo de seu nome de usuário.

    
por 24.06.2014 / 18:52

Tags