GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie listet man alle Benutzer in einer Linux-Gruppe auf?

getent group <groupname>;

Es ist sowohl unter Linux als auch unter Solaris portierbar und funktioniert mit lokalen Gruppen-/Kennwortdateien, NIS- und LDAP-Konfigurationen.


Leider gibt es keine gute, tragbare Möglichkeit, dies zu tun, die ich kenne. Wenn Sie versuchen, /etc/group zu parsen, wie andere vorschlagen, werden Sie Benutzer vermissen, die diese Gruppe als ihre primäre Gruppe haben, und alle, die dieser Gruppe über einen anderen Mechanismus als UNIX-Flatfiles hinzugefügt wurden (z. B. LDAP, NIS, pam-pgsql usw.).

Wenn ich das unbedingt selbst machen müsste, würde ich es wahrscheinlich umgekehrt machen:Verwenden Sie id um die Gruppen jedes Benutzers auf dem System zu erhalten (wodurch alle für NSS sichtbaren Quellen gezogen werden), und verwenden Sie Perl oder etwas Ähnliches, um eine Hash-Tabelle für jede entdeckte Gruppe zu verwalten, die die Mitgliedschaft dieses Benutzers notiert.

Bearbeiten:Dies lässt Sie natürlich mit einem ähnlichen Problem zurück:Wie Sie eine Liste aller Benutzer im System erhalten. Da mein Standort nur Flatfiles und LDAP verwendet, kann ich einfach eine Liste von beiden Standorten abrufen, aber das kann auf Ihre Umgebung zutreffen oder auch nicht.

Bearbeiten 2:Jemand erinnerte mich im Vorbeigehen daran, dass getent passwd gibt eine Liste aller Benutzer auf dem System zurück, einschließlich derjenigen von LDAP/NIS/etc., aber getent group Trotzdem werden immer noch Benutzer vermisst, die nur über den Standardgruppeneintrag Mitglieder sind, also hat mich das dazu inspiriert, diesen schnellen Hack zu schreiben.


#!/usr/bin/perl -T
#
# Lists members of all groups, or optionally just the group
# specified on the command line
#
# Copyright © 2010-2013 by Zed Pobre ([email protected] or [email protected])
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#

use strict; use warnings;

$ENV{"PATH"} = "/usr/bin:/bin";

my $wantedgroup = shift;

my %groupmembers;
my $usertext = `getent passwd`;

my @users = $usertext =~ /^([a-zA-Z0-9_-]+):/gm;

foreach my $userid (@users)
{
    my $usergrouptext = `id -Gn $userid`;
    my @grouplist = split(' ',$usergrouptext);

    foreach my $group (@grouplist)
    {
        $groupmembers{$group}->{$userid} = 1;
    }
}

if($wantedgroup)
{
    print_group_members($wantedgroup);
}
else
{
    foreach my $group (sort keys %groupmembers)
    {
        print "Group ",$group," has the following members:\n";
        print_group_members($group);
        print "\n";
    }
}

sub print_group_members
{
    my ($group) = @_;
    return unless $group;

    foreach my $member (sort keys %{$groupmembers{$group}})
    {
        print $member,"\n";
    }
}

Linux
  1. So finden Sie alle Sudo-Benutzer in Linux

  2. So listen Sie alle installierten Pakete in Linux auf

  3. So listen Sie alle angemeldeten Benutzer auf

  4. Linux - So listen Sie alle Benutzer auf

  5. Wie liste ich alle Benutzer mit root auf?

So listen Sie Benutzer unter Linux auf

So finden Sie alle installierten Schriftarten in Linux

So listen Sie Benutzer und Gruppen unter Linux auf

So listen Sie alle Benutzer einer Gruppe in Linux auf

Wie listet man alle Gruppen in Linux auf?

Wie listet man alle Dateien in Linux nach Größe sortiert auf?