Angenommen, ich habe zwei Gruppen mit NamenPrüfung1UndPrüfung2. Beide Gruppen haben die gleiche Gruppen-ID von 2000. Dann füge ich einen Benutzer namensTestbenutzermit GID 2000. Unterwegs möchte ich die Gruppe Testing2 löschen, aber ich kann es nicht, weil ich beim Versuch die folgende Antwort erhalte
groupdel: cannot remove the primary group of user 'testing-user'
Hier sind die Methoden, die ich erfolgreich ausprobiert habe:
GID von Testing1 geändert und dann Testing2 gelöscht, dann GID von Testing1 wieder auf 2000 geändert
Die primäre GID des Testbenutzers wurde in eine separate Gruppe geändert, „testing2“ gelöscht und dann „testinguser“ der Gruppe „testing1“ zugewiesen.
Gibt es hierfür eine bessere Methode, bei der die betreffenden Benutzer- oder Gruppen-IDs nicht geändert werden müssen?
Antwort1
Der Fehler, den Sie erhalten, ist eine Einschränkung der Art und WeiseGruppendelgeschrieben wurde und die Tatsache, dass das System auf Nummern (IDs) und nicht auf Namen basiert. Wie Sie in sehen könnenQuellcodevonGruppendel, es wird nur geprüft, ob es einen Benutzer gibt, der die GID, die Sie löschen möchten, als primäre Gruppe hat. Es spielt keine Rolle, ob es eine andere Gruppe mit derselben ID, aber einem anderen Namen gibt.
/* [ 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);
}
Sie können also entweder die Konfigurationsdateien mit anderen Tools wie Perl bearbeiten inmtms Antwortoder Sie ändern vorübergehend die GID dieses Benutzers, damit es group_busy
nicht mehr fehlschlägt.
Antwort2
Dies ist nicht ganz sicher, da Sie zum Ändern von Benutzern und Gruppen immer die bereitgestellten Dienstprogramme verwenden sollten, aber …
[ ! -f /etc/group.lock ] && perl -ne 'next if /^testing2:/; print' /etc/group > /etc/group.lock && mv /etc/group.lock /etc/group && grpconv
Antwort3
Die Standardgruppe eines jeden Benutzers, zumindest unter Gentoo, hat den gleichen Gruppennamen wie den Benutzernamen. Wenn Sie eine Gruppe erstellen und einen Benutzer darin aufnehmen, gehört der Benutzer nach seiner Entfernung zur Gruppe seines Benutzernamens.