Eliminar grupo no único con ID de grupo como grupo principal de un usuario

Eliminar grupo no único con ID de grupo como grupo principal de un usuario

Entonces digamos que tengo dos grupos con nombres.prueba1yprueba2. Ambos grupos tienen el mismo ID de grupo de 2000. Luego agrego un usuario llamadousuario de pruebacon GID de 2000. En el camino quiero eliminar el grupo testing2, pero no puedo porque cuando lo intento obtengo la siguiente respuesta

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

Estos son los métodos que he probado para solucionar este problema con éxito:

  • Se modificó el GID de testing1 y luego se eliminó testing2, luego se cambió el GID de testing1 a 2000

  • Se modificó el GID principal del usuario de prueba a un grupo separado, se eliminó testing2 y luego se asignó el usuario de prueba a testing1.

¿Existe un método mejor para esto que no implique modificar los usuarios o los ID de grupo en cuestión?

Respuesta1

El error que estás recibiendo es una limitación del camino.grupodelfue escrito y el hecho de que el sistema está diseñado alrededor de números (ID) y no de nombres. Como puedes ver encódigo fuentedegrupodel, solo verifica si hay un usuario que tiene el GID que desea eliminar como grupo principal. No importa si hay otro grupo con el mismo ID, pero con un nombre 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);
}

Entonces, o te metes con los archivos de configuración usando otras herramientas como Perl enla respuesta de mtmo cambias temporalmente el GID de ese usuario para que group_busyya no falle.

Respuesta2

Esto no es tan seguro ya que siempre debes usar las utilidades proporcionadas para modificar los usuarios y grupos, pero...

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

Respuesta3

El grupo predeterminado de cualquier usuario, al menos en Gentoo, es tener el mismo nombre de grupo que el nombre de usuario. Si crea un grupo y coloca un usuario en él, cuando se elimine, el usuario pertenecerá al grupo de su nombre de usuario.

información relacionada